Add marks to project and task request responses

This commit is contained in:
iIronside 2023-10-12 11:34:47 +03:00
parent f9e22f2d2e
commit 16309e5e4f
7 changed files with 111 additions and 71 deletions

View File

@ -24,6 +24,8 @@ use yii\helpers\ArrayHelper;
* @property FieldsValue[] $fieldsValues * @property FieldsValue[] $fieldsValues
* @property Company $company * @property Company $company
* @property ProjectUser[] $projectUsers * @property ProjectUser[] $projectUsers
* @property Mark[] $mark
* @property MarkEntity[] $markEntity
*/ */
class Project extends \yii\db\ActiveRecord 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 $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 * @return array
*/ */

View File

@ -25,8 +25,11 @@ use yii\helpers\ArrayHelper;
* @property string $dead_line * @property string $dead_line
* *
* @property Project $project * @property Project $project
* @property User $user
* @property UserCard $card * @property UserCard $card
* @property UserCard $cardIdCreator * @property UserCard $cardIdCreator
* @property Mark[] $mark
* @property MarkEntity[] $markEntity
* @property ProjectTaskUser[] $taskUsers * @property ProjectTaskUser[] $taskUsers
*/ */
class ProjectTask extends ActiveRecord 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[] * @return string[]
*/ */
@ -217,6 +161,24 @@ class ProjectTask extends ActiveRecord
return $this->hasMany(Timer::class, ['entity_id' => 'id'])->where(['status' => Timer::STATUS_ACTIVE]); 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 public static function usersByTaskArr($task_id): array
{ {
return ArrayHelper::map( return ArrayHelper::map(

View File

@ -2,10 +2,8 @@
namespace common\services; namespace common\services;
use common\classes\Debug;
use common\models\ProjectTask;
use common\models\ProjectTaskUser; use common\models\ProjectTaskUser;
use common\models\ProjectUser; use frontend\modules\api\models\ProjectTask;
class TaskService class TaskService
{ {

View File

@ -66,8 +66,9 @@ class ProjectController extends ApiController
* @OA\Parameter( * @OA\Parameter(
* name="expand", * name="expand",
* in="query", * in="query",
* example="column,mark",
* required=false, * required=false,
* description="В этом параметре по необходимости передаются поля, которые нужно добавить в ответ сервера, сейчас доступно только поле <b>columns</b>", * description="В этом параметре по необходимости передаются поля, которые нужно добавить в ответ сервера, сейчас доступно только поле <b>columns</b> и <b>mark</b>",
* @OA\Schema( * @OA\Schema(
* type="string", * type="string",
* ) * )
@ -114,8 +115,9 @@ class ProjectController extends ApiController
* @OA\Parameter( * @OA\Parameter(
* name="expand", * name="expand",
* in="query", * in="query",
* example="column,mark",
* required=false, * required=false,
* description="В этом параметре по необходимости передаются поля, которые нужно добавить в ответ сервера, сейчас доступно только поле <b>columns</b>", * description="В этом параметре по необходимости передаются поля, которые нужно добавить в ответ сервера, сейчас доступно только поле <b>columns</b> и <b>mark</b>",
* @OA\Schema( * @OA\Schema(
* type="string", * type="string",
* ) * )

View File

@ -140,8 +140,8 @@ class TaskController extends ApiController
* @OA\Parameter( * @OA\Parameter(
* name="expand", * name="expand",
* in="query", * in="query",
* example="column,timers", * example="column,timers,mark",
* description="В этом параметре по необходимости передаются поля, которые нужно добавить в ответ сервера, сейчас доступно только поля <b>column</b>, <b>timers</b>", * description="В этом параметре по необходимости передаются поля, которые нужно добавить в ответ сервера, сейчас доступно только поля <b>column</b>, <b>timers</b> и <b>mark</b>",
* @OA\Schema( * @OA\Schema(
* type="string", * type="string",
* ) * )
@ -196,8 +196,8 @@ class TaskController extends ApiController
* @OA\Parameter( * @OA\Parameter(
* name="expand", * name="expand",
* in="query", * in="query",
* example="column,timers", * example="column,timers,mark",
* description="В этом параметре по необходимости передаются поля, которые нужно добавить в ответ сервера, сейчас доступно только поля <b>column</b>, <b>timers</b>", * description="В этом параметре по необходимости передаются поля, которые нужно добавить в ответ сервера, сейчас доступно только поля <b>column</b>, <b>timers</b> и <b>mark</b>",
* @OA\Schema( * @OA\Schema(
* type="string", * type="string",
* ) * )
@ -254,8 +254,8 @@ class TaskController extends ApiController
* @OA\Parameter( * @OA\Parameter(
* name="expand", * name="expand",
* in="query", * in="query",
* example="column,timers", * example="column,timers,mark",
* description="В этом параметре по необходимости передаются поля, которые нужно добавить в ответ сервера, сейчас доступно только поля <b>column</b>, <b>timers</b>", * description="В этом параметре по необходимости передаются поля, которые нужно добавить в ответ сервера, сейчас доступно только поля <b>column</b>, <b>timers</b> и <b>mark</b>",
* @OA\Schema( * @OA\Schema(
* type="string", * type="string",
* ) * )

View File

@ -124,7 +124,7 @@ class Project extends \common\models\Project
*/ */
public function extraFields(): array public function extraFields(): array
{ {
return ['columns',]; return ['columns', 'mark'];
} }
/** /**

View File

@ -152,5 +152,63 @@ namespace frontend\modules\api\models;
*/ */
class ProjectTask extends \common\models\ProjectTask 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'
];
}
} }