comments entity
This commit is contained in:
		@@ -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',
 | 
				
			||||||
        ];
 | 
					        ];
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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()
 | 
				
			||||||
        ]);
 | 
					        ]);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -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
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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}
 | 
				
			||||||
 *         }
 | 
					 *         }
 | 
				
			||||||
 *     }
 | 
					 *     }
 | 
				
			||||||
 *  },
 | 
					 *  },
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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",
 | 
				
			||||||
 *  ),
 | 
					 *  ),
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user