comments entity

This commit is contained in:
Kavalar 2023-05-17 01:14:54 +03:00
parent b32b35540b
commit 4ae43ff2da
6 changed files with 135 additions and 6 deletions

View File

@ -125,6 +125,9 @@ class ProjectTask extends ActiveRecord
return null;
},
'comment_count' => function(){
return Comment::find()->where(['entity_id' => $this->id, 'entity_type' => 2, 'status' => Comment::STATUS_ACTIVE])->count();
},
'taskUsers',
];
}

View File

@ -20,7 +20,7 @@ class m230511_205501_create_comment_table extends Migration
'parent_id' => $this->integer(11),
'entity_type' => $this->integer(2),
'entity_id' => $this->integer(11),
'status' => $this->integer(1),
'status' => $this->integer(1)->defaultValue(1),
'text' => $this->text()
]);
}

View File

@ -12,6 +12,7 @@ class CommentController extends ApiController
return [
'get-entity-type-list' => ['get'],
'create' => ['post'],
'update' => ['put', 'patch'],
];
}
@ -126,11 +127,122 @@ class CommentController extends ApiController
$model->load($request, '');
if (!$model->save()){
if (!$model->save()) {
return $model->errors;
}
return $model;
}
/**
*
* @OA\Put(path="/comment/update",
* summary="Редактировать комментария",
* description="Метод для редактирования комментария",
* security={
* {"bearerAuth": {}}
* },
* tags={"Comment"},
*
* @OA\RequestBody(
* @OA\MediaType(
* mediaType="application/x-www-form-urlencoded",
* @OA\Schema(
* required={"comment_id", "text"},
* @OA\Property(
* property="comment_id",
* type="integer",
* description="Идентификатор комментария",
* ),
* @OA\Property(
* property="text",
* type="string",
* description="Текст комментария",
* ),
* @OA\Property(
* property="status",
* type="integer",
* description="статус",
* ),
* ),
* ),
* ),
* @OA\Response(
* response=200,
* description="Возвращает объект Комментария",
* @OA\MediaType(
* mediaType="application/json",
* @OA\Schema(ref="#/components/schemas/Comment"),
* ),
* ),
* )
*
* @return Comment
* @throws BadRequestHttpException
* @throws \yii\base\InvalidConfigException
*/
public function actionUpdate(): Comment
{
$user_id = \Yii::$app->user->id;
if (!$user_id) {
throw new BadRequestHttpException(json_encode(['User not found']));
}
$comment_id = \Yii::$app->request->getBodyParam('comment_id');
$model = Comment::findOne($comment_id);
if (!$model) {
throw new BadRequestHttpException(json_encode(['Comment not found']));
}
$put = array_diff(\Yii::$app->request->getBodyParams(), [null, '']);
$model->load($put, '');
if(!$model->validate()){
throw new BadRequestHttpException($model->errors);
}
$model->save();
return $model;
}
/**
*
* @OA\Get(path="/comment/get-by-entity",
* summary="Получить комментарии по идентификатору сущности",
* description="Метод для получения комментариев по идентификатору сущности.",
* security={
* {"bearerAuth": {}}
* },
* tags={"Comment"},
* @OA\Parameter(
* name="entity_id",
* in="query",
* required=true,
* @OA\Schema(
* type="integer",
* default=null
* )
* ),
*
* @OA\Response(
* response=200,
* description="Возвращает массив объектов Комментариев",
* @OA\MediaType(
* mediaType="application/json",
* @OA\Schema(ref="#/components/schemas/CommentExample"),
* ),
* ),
* )
*
* @param int $entity_id
* @return array|\yii\db\ActiveRecord[]
*/
public function actionGetByEntity(int $entity_id): array
{
$model = Comment::find()->where(['entity_id' => $entity_id, 'status' => Comment::STATUS_ACTIVE])->all();
return $model;
}
}

View File

@ -56,6 +56,14 @@ namespace frontend\modules\api\models;
* ),
*)
*
* @OA\Schema(
* schema="CommentExample",
* type="array",
* @OA\Items(
* ref="#/components/schemas/Comment",
* ),
*)
*
*/
class Comment extends \common\models\Comment
{

View File

@ -48,13 +48,13 @@ namespace frontend\modules\api\models;
* example={
* {"id": 1, "title": "Задачи на проверку", "project_id": 95, "status": 1, "priority": 1,
* "tasks": {
* {"id": 95, "title": "Сложная задача", "project_id": 44, "column_id": 1, "user_id": 19, "description": "Описание задачи", "status": 1,
* {"id": 95, "title": "Сложная задача", "project_id": 44, "column_id": 1, "user_id": 19, "description": "Описание задачи", "status": 1, "comment_count": 3,
* "taskUsers": {
* {"id": 2, "task_id": 95, "user_id": 2, "fio": "Сапронов Антон Викторович", "avatar": "/profileava/m8.png"},
* {"id": 3, "task_id": 95, "user_id": 3, "fio": "Иванов Иван Иванович", "avatar": "/profileava/m2.png"},
* }
* },
* {"id": 96, "title": "Простая задача", "project_id": 44, "column_id": 1, "user_id": 19, "description": "Описание простой задачи", "status": 1,
* {"id": 96, "title": "Простая задача", "project_id": 44, "column_id": 1, "user_id": 19, "description": "Описание простой задачи", "status": 1, "comment_count": 4,
* "taskUsers": {
* {"id": 3, "task_id": 96, "user_id": 3, "fio": "Иванов Иван Иванович", "avatar": "/profileava/m2.png"},
* {"id": 4, "task_id": 96, "user_id": 4, "fio": "Петров Петр Петрович", "avatar": "/profileava/m7.png"},
@ -64,8 +64,8 @@ namespace frontend\modules\api\models;
* },
* {"id": 2, "title": "Новые задачи", "project_id": 95, "status": 1, "priority": 2,
* "tasks": {
* {"id": 97, "title": "Очень Сложная задача", "project_id": 44, "column_id": 2, "user_id": 19, "description": "Описание простой задачи", "status": 1},
* {"id": 98, "title": "Очень Простая задача", "project_id": 44, "column_id": 2, "user_id": 19, "description": "Описание очень простой задачи", "status": 1}
* {"id": 97, "title": "Очень Сложная задача", "project_id": 44, "column_id": 2, "user_id": 19, "description": "Описание простой задачи", "status": 1, "comment_count": 2},
* {"id": 98, "title": "Очень Простая задача", "project_id": 44, "column_id": 2, "user_id": 19, "description": "Описание очень простой задачи", "status": 1, "comment_count": 3}
* }
* }
* },

View File

@ -71,6 +71,12 @@ namespace frontend\modules\api\models;
* description="Статус задачи"
* ),
* @OA\Property(
* property="comment_count",
* type="int",
* example="5",
* description="Кол-во комментариев"
* ),
* @OA\Property(
* property="taskUsers",
* ref="#/components/schemas/ProjectTaskUsersExample",
* ),