From 16309e5e4fbb4a5266b0d07fdcf83029c8dabf08 Mon Sep 17 00:00:00 2001 From: iIronside Date: Thu, 12 Oct 2023 11:34:47 +0300 Subject: [PATCH] Add marks to project and task request responses --- common/models/Project.php | 20 +++++ common/models/ProjectTask.php | 80 +++++-------------- common/services/TaskService.php | 4 +- .../api/controllers/ProjectController.php | 6 +- .../api/controllers/TaskController.php | 12 +-- frontend/modules/api/models/Project.php | 2 +- frontend/modules/api/models/ProjectTask.php | 58 ++++++++++++++ 7 files changed, 111 insertions(+), 71 deletions(-) diff --git a/common/models/Project.php b/common/models/Project.php index 6069da8..21a56e8 100755 --- a/common/models/Project.php +++ b/common/models/Project.php @@ -24,6 +24,8 @@ use yii\helpers\ArrayHelper; * @property FieldsValue[] $fieldsValues * @property Company $company * @property ProjectUser[] $projectUsers + * @property Mark[] $mark + * @property MarkEntity[] $markEntity */ class Project extends \yii\db\ActiveRecord { @@ -135,6 +137,24 @@ class Project extends \yii\db\ActiveRecord return $this->hasMany(ProjectUser::class, ['project_id' => 'id']); } + /** + * @return \yii\db\ActiveQuery + */ + public function getMark() + { + return $this->hasMany(Mark::class, ['id' => 'mark_id']) + ->via('markEntity'); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getMarkEntity() + { + return $this->hasMany(MarkEntity::class, ['entity_id' => 'id']) + ->where(['entity_type' => Entity::ENTITY_TYPE_PROJECT]); + } + /** * @return array */ diff --git a/common/models/ProjectTask.php b/common/models/ProjectTask.php index ca54fec..be19aac 100644 --- a/common/models/ProjectTask.php +++ b/common/models/ProjectTask.php @@ -25,8 +25,11 @@ use yii\helpers\ArrayHelper; * @property string $dead_line * * @property Project $project + * @property User $user * @property UserCard $card * @property UserCard $cardIdCreator + * @property Mark[] $mark + * @property MarkEntity[] $markEntity * @property ProjectTaskUser[] $taskUsers */ class ProjectTask extends ActiveRecord @@ -94,65 +97,6 @@ class ProjectTask extends ActiveRecord ]; } - /** - * @return string[] - */ - public function fields(): array - { - return [ - 'id', - 'project_id', - 'project_name' => function () { - return $this->project->name ?? null; - }, - 'title', - 'created_at', - 'updated_at', - 'dead_line', - 'description', - 'status', - 'column_id', - 'user_id', - 'user' => function () { - return [ - "fio" => $this->user->userCard->fio ?? $this->user->username, - "avatar" => $this->user->userCard->photo ?? '', - ]; - }, - 'executor_id', - 'priority', - 'executor' => function () { - if ($this->executor) { - return [ - "fio" => $this->executor->userCard->fio ?? $this->executor->username, - "avatar" => $this->executor->userCard->photo ?? '', - ]; - } - - return null; - }, - 'comment_count' => function () { - return Comment::find()->where(['entity_id' => $this->id, 'entity_type' => 2, 'status' => Comment::STATUS_ACTIVE])->count(); - }, - 'taskUsers', - ]; - } - - /** - * @return string[] - */ - public function extraFields(): array - { - return [ - 'timers', - 'column' => function () { - return [ - 'column_title' => $this->column->title ?? null - ]; - } - ]; - } - /** * @return string[] */ @@ -217,6 +161,24 @@ class ProjectTask extends ActiveRecord return $this->hasMany(Timer::class, ['entity_id' => 'id'])->where(['status' => Timer::STATUS_ACTIVE]); } + /** + * @return \yii\db\ActiveQuery + */ + public function getMark() + { + return $this->hasMany(Mark::class, ['id' => 'mark_id']) + ->via('markEntity'); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getMarkEntity() + { + return $this->hasMany(MarkEntity::class, ['entity_id' => 'id']) + ->where(['entity_type' => Entity::ENTITY_TYPE_TASK]); + } + public static function usersByTaskArr($task_id): array { return ArrayHelper::map( diff --git a/common/services/TaskService.php b/common/services/TaskService.php index e9fc814..c2a9b92 100644 --- a/common/services/TaskService.php +++ b/common/services/TaskService.php @@ -2,10 +2,8 @@ namespace common\services; -use common\classes\Debug; -use common\models\ProjectTask; use common\models\ProjectTaskUser; -use common\models\ProjectUser; +use frontend\modules\api\models\ProjectTask; class TaskService { diff --git a/frontend/modules/api/controllers/ProjectController.php b/frontend/modules/api/controllers/ProjectController.php index 0707066..25ab4c3 100644 --- a/frontend/modules/api/controllers/ProjectController.php +++ b/frontend/modules/api/controllers/ProjectController.php @@ -66,8 +66,9 @@ class ProjectController extends ApiController * @OA\Parameter( * name="expand", * in="query", + * example="column,mark", * required=false, - * description="В этом параметре по необходимости передаются поля, которые нужно добавить в ответ сервера, сейчас доступно только поле columns", + * description="В этом параметре по необходимости передаются поля, которые нужно добавить в ответ сервера, сейчас доступно только поле columns и mark", * @OA\Schema( * type="string", * ) @@ -114,8 +115,9 @@ class ProjectController extends ApiController * @OA\Parameter( * name="expand", * in="query", + * example="column,mark", * required=false, - * description="В этом параметре по необходимости передаются поля, которые нужно добавить в ответ сервера, сейчас доступно только поле columns", + * description="В этом параметре по необходимости передаются поля, которые нужно добавить в ответ сервера, сейчас доступно только поле columns и mark", * @OA\Schema( * type="string", * ) diff --git a/frontend/modules/api/controllers/TaskController.php b/frontend/modules/api/controllers/TaskController.php index 3c7ca1e..75db62d 100644 --- a/frontend/modules/api/controllers/TaskController.php +++ b/frontend/modules/api/controllers/TaskController.php @@ -140,8 +140,8 @@ class TaskController extends ApiController * @OA\Parameter( * name="expand", * in="query", - * example="column,timers", - * description="В этом параметре по необходимости передаются поля, которые нужно добавить в ответ сервера, сейчас доступно только поля column, timers", + * example="column,timers,mark", + * description="В этом параметре по необходимости передаются поля, которые нужно добавить в ответ сервера, сейчас доступно только поля column, timers и mark", * @OA\Schema( * type="string", * ) @@ -196,8 +196,8 @@ class TaskController extends ApiController * @OA\Parameter( * name="expand", * in="query", - * example="column,timers", - * description="В этом параметре по необходимости передаются поля, которые нужно добавить в ответ сервера, сейчас доступно только поля column, timers", + * example="column,timers,mark", + * description="В этом параметре по необходимости передаются поля, которые нужно добавить в ответ сервера, сейчас доступно только поля column, timers и mark", * @OA\Schema( * type="string", * ) @@ -254,8 +254,8 @@ class TaskController extends ApiController * @OA\Parameter( * name="expand", * in="query", - * example="column,timers", - * description="В этом параметре по необходимости передаются поля, которые нужно добавить в ответ сервера, сейчас доступно только поля column, timers", + * example="column,timers,mark", + * description="В этом параметре по необходимости передаются поля, которые нужно добавить в ответ сервера, сейчас доступно только поля column, timers и mark", * @OA\Schema( * type="string", * ) diff --git a/frontend/modules/api/models/Project.php b/frontend/modules/api/models/Project.php index 7b28818..34ce13f 100644 --- a/frontend/modules/api/models/Project.php +++ b/frontend/modules/api/models/Project.php @@ -124,7 +124,7 @@ class Project extends \common\models\Project */ public function extraFields(): array { - return ['columns',]; + return ['columns', 'mark']; } /** diff --git a/frontend/modules/api/models/ProjectTask.php b/frontend/modules/api/models/ProjectTask.php index 78d6de0..ed80fd9 100644 --- a/frontend/modules/api/models/ProjectTask.php +++ b/frontend/modules/api/models/ProjectTask.php @@ -152,5 +152,63 @@ namespace frontend\modules\api\models; */ class ProjectTask extends \common\models\ProjectTask { + /** + * @return string[] + */ + public function fields(): array + { + return [ + 'id', + 'project_id', + 'project_name' => function () { + return $this->project->name ?? null; + }, + 'title', + 'created_at', + 'updated_at', + 'dead_line', + 'description', + 'status', + 'column_id', + 'user_id', + 'user' => function () { + return [ + "fio" => $this->user->userCard->fio ?? $this->user->id, + "avatar" => $this->user->userCard->photo ?? '', + ]; + }, + 'executor_id', + 'priority', + 'executor' => function () { + if ($this->executor) { + return [ + "fio" => $this->executor->userCard->fio ?? $this->executor->username, + "avatar" => $this->executor->userCard->photo ?? '', + ]; + } + return null; + }, + 'comment_count' => function () { + return Comment::find()->where(['entity_id' => $this->id, 'entity_type' => 2, 'status' => Comment::STATUS_ACTIVE])->count(); + }, + 'taskUsers', + ]; + } + + /** + * @return string[] + */ + public function extraFields(): array + { + return [ + 'timers', + 'column' => function () { + return [ + 'column_title' => $this->column->title ?? null + ]; + }, + 'mark' + ]; + } } \ No newline at end of file