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; return null;
}, },
'comment_count' => function(){
return Comment::find()->where(['entity_id' => $this->id, 'entity_type' => 2, 'status' => Comment::STATUS_ACTIVE])->count();
},
'taskUsers', 'taskUsers',
]; ];
} }

View File

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

View File

@ -12,6 +12,7 @@ class CommentController extends ApiController
return [ return [
'get-entity-type-list' => ['get'], 'get-entity-type-list' => ['get'],
'create' => ['post'], 'create' => ['post'],
'update' => ['put', 'patch'],
]; ];
} }
@ -126,11 +127,122 @@ class CommentController extends ApiController
$model->load($request, ''); $model->load($request, '');
if (!$model->save()){ if (!$model->save()) {
return $model->errors; return $model->errors;
} }
return $model; 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 class Comment extends \common\models\Comment
{ {

View File

@ -48,13 +48,13 @@ namespace frontend\modules\api\models;
* example={ * example={
* {"id": 1, "title": "Задачи на проверку", "project_id": 95, "status": 1, "priority": 1, * {"id": 1, "title": "Задачи на проверку", "project_id": 95, "status": 1, "priority": 1,
* "tasks": { * "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": { * "taskUsers": {
* {"id": 2, "task_id": 95, "user_id": 2, "fio": "Сапронов Антон Викторович", "avatar": "/profileava/m8.png"}, * {"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": 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": { * "taskUsers": {
* {"id": 3, "task_id": 96, "user_id": 3, "fio": "Иванов Иван Иванович", "avatar": "/profileava/m2.png"}, * {"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"}, * {"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, * {"id": 2, "title": "Новые задачи", "project_id": 95, "status": 1, "priority": 2,
* "tasks": { * "tasks": {
* {"id": 97, "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} * {"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="Статус задачи" * description="Статус задачи"
* ), * ),
* @OA\Property( * @OA\Property(
* property="comment_count",
* type="int",
* example="5",
* description="Кол-во комментариев"
* ),
* @OA\Property(
* property="taskUsers", * property="taskUsers",
* ref="#/components/schemas/ProjectTaskUsersExample", * ref="#/components/schemas/ProjectTaskUsersExample",
* ), * ),