diff --git a/common/services/ProfileService.php b/common/services/ProfileService.php index 96a21d5..95a7b51 100644 --- a/common/services/ProfileService.php +++ b/common/services/ProfileService.php @@ -4,6 +4,7 @@ namespace common\services; use common\models\Manager; use common\models\ManagerEmployee; +use common\models\Position; use common\models\UserCard; use common\models\UserCardPortfolioProjects; use frontend\modules\api\models\ProfileSearchForm; @@ -84,6 +85,14 @@ class ProfileService throw new ServerErrorHttpException('There is no user with this id'); } + /** + * @return array|\yii\db\ActiveRecord[] + */ + public static function getPositionsList() + { + return Position::find()->all(); + } + private static function addPermission(&$profile, $user_card_id) { $searcherCardID = self::getSearcherCardID(Yii::$app->user->getId()); diff --git a/common/services/RequestService.php b/common/services/RequestService.php index d97ceb0..55852f6 100644 --- a/common/services/RequestService.php +++ b/common/services/RequestService.php @@ -146,7 +146,7 @@ class RequestService */ public function getByUserId($user_id) { - return $this->model->find()->where(['user_id' => $user_id])->all(); + return $this->model->find()->where(['user_id' => $user_id, 'status' => 1])->all(); } /** @@ -160,6 +160,19 @@ class RequestService return $this; } + /** + * @param int $userId + * @return bool + */ + public function validateUser(int $userId): bool + { + if ($this->model->user_id == $userId){ + return true; + } + + return false; + } + /** * @return array|int */ diff --git a/frontend/modules/api/controllers/ProfileController.php b/frontend/modules/api/controllers/ProfileController.php index cd0b7e7..62acad1 100755 --- a/frontend/modules/api/controllers/ProfileController.php +++ b/frontend/modules/api/controllers/ProfileController.php @@ -20,7 +20,8 @@ class ProfileController extends ApiController 'actions' => [ '' => ['GET', 'HEAD', 'OPTIONS'], 'profile-with-report-permission' => ['post', 'patch'], - 'get-main-data' => ['get'] + 'get-main-data' => ['get'], + 'positions-list' => ['get'], ], ] ]); @@ -31,7 +32,7 @@ class ProfileController extends ApiController */ public function actionIndex($id = null): ?array { - return ProfileService::getProfile($id, \Yii::$app->request->get()); + return ProfileService::getProfile($id, \Yii::$app->request->get()); } /** @@ -54,4 +55,31 @@ class ProfileController extends ApiController { return ProfileService::getPortfolioProjects($card_id); } + + /** + * + * @OA\Get(path="/profile/positions-list", + * summary="Список позиций", + * description="Получить список всех возможных позиций", + * tags={"Profile"}, + * security={ + * {"bearerAuth": {}} + * }, + * @OA\Response( + * response=200, + * description="Возвращает массив позиций", + * @OA\MediaType( + * mediaType="application/json", + * @OA\Schema(ref="#/components/schemas/PositionsExample"), + * ), + * + * ), + * ) + * + * @return array + */ + public function actionPositionsList(): array + { + return ProfileService::getPositionsList(); + } } \ No newline at end of file diff --git a/frontend/modules/api/controllers/RequestController.php b/frontend/modules/api/controllers/RequestController.php index 93a2ac6..3ff5e8b 100644 --- a/frontend/modules/api/controllers/RequestController.php +++ b/frontend/modules/api/controllers/RequestController.php @@ -5,6 +5,7 @@ namespace frontend\modules\api\controllers; use common\classes\Debug; use common\models\Request; use common\services\RequestService; +use yii\base\InvalidConfigException; use yii\web\BadRequestHttpException; use yii\web\NotFoundHttpException; @@ -18,7 +19,7 @@ class RequestController extends ApiController 'get-request' => ['get'], 'get-request-list' => ['get'], 'create-request' => ['post'], -// 'update-task' => ['put', 'patch'], + 'update-request' => ['put', 'patch'], ]; } @@ -115,7 +116,7 @@ class RequestController extends ApiController * @param int|null $user_id * @return array|\yii\db\ActiveRecord[] */ - public function actionGetList(int $user_id = null, int $search_depth = 3): array + public function actionGetRequestList(int $user_id = null, int $search_depth = 3): array { if (!$user_id) { $user_id = \Yii::$app->user->id; @@ -133,8 +134,8 @@ class RequestController extends ApiController /** * * @OA\Post(path="/request/create-request", - * summary="Получить список запросов", - * description="Метод для оздания запроса, если не передан параметр user_id, то будет получен список текущего пользователя", + * summary="Добавить запрос", + * description="Метод для создания запроса, если не передан параметр user_id, то будет получен список текущего пользователя", * security={ * {"bearerAuth": {}} * }, @@ -177,7 +178,7 @@ class RequestController extends ApiController * ), * @OA\Property( * property="descr", - * type=" string", + * type="string", * description="Описание запроса", * ), * @OA\Property( @@ -204,10 +205,10 @@ class RequestController extends ApiController * @return Request * @throws BadRequestHttpException */ - public function actionCreateRequest() + public function actionCreateRequest(): Request { $user_id = \Yii::$app->user->id; - if (!$user_id){ + if (!$user_id) { throw new BadRequestHttpException(json_encode(['Пользователь не найден'])); } @@ -216,7 +217,118 @@ class RequestController extends ApiController ->load(\Yii::$app->request->post(), '') ->save(); - if (!$requestService->isSave){ + if (!$requestService->isSave) { + throw new BadRequestHttpException(json_encode($requestService->errors)); + } + + return $requestService->getModel(); + } + + /** + * + * @OA\Put(path="/request/update-request", + * summary="Редактировать запрос", + * description="Метод для редактирования запроса, если не передан параметр user_id, то будет получен список текущего пользователя", + * security={ + * {"bearerAuth": {}} + * }, + * tags={"Requests"}, + * + * @OA\RequestBody( + * @OA\MediaType( + * mediaType="application/x-www-form-urlencoded", + * @OA\Schema( + * required={"request_id"}, + * @OA\Property( + * property="user_id", + * type="integer", + * description="Идентификатор пользователя", + * nullable=false, + * ), + * @OA\Property( + * property="request_id", + * type="integer", + * description="Идентификатор запросв", + * ), + * @OA\Property( + * property="title", + * type="string", + * description="Заголовок запроса", + * ), + * @OA\Property( + * property="position_id", + * type="integer", + * description="Позиция", + * ), + * @OA\Property( + * property="knowledge_level_id", + * type="integer", + * description="Уровень", + * ), + * @OA\Property( + * property="specialist_count", + * type="integer", + * description="Количество специалистов", + * ), + * @OA\Property( + * property="status", + * type="integer", + * description="Статус запроса", + * ), + * @OA\Property( + * property="descr", + * type="string", + * description="Описание запроса", + * ), + * @OA\Property( + * property="skill_ids", + * type="array", + * description="Навыки", + * @OA\Items( + * type="integer", + * ), + * ), + * ), + * ), + * ), + * @OA\Response( + * response=200, + * description="Возвращает объект Запроса", + * @OA\MediaType( + * mediaType="application/json", + * @OA\Schema(ref="#/components/schemas/Request"), + * ), + * ), + * ) + * + * @return Request|null + * @throws BadRequestHttpException + * @throws InvalidConfigException + */ + public function actionUpdateRequest(): Request + { + $user_id = \Yii::$app->user->id; + if (!$user_id) { + throw new BadRequestHttpException(json_encode(['User not found'])); + } + + $request_id = \Yii::$app->request->getBodyParam('request_id'); + if (!$request_id) { + throw new BadRequestHttpException(json_encode(['Request not found'])); + } + + $requestService = RequestService::run($request_id); + + if (!$requestService->validateUser($user_id)){ + throw new BadRequestHttpException(json_encode(['The user does not have the right to edit the request'], true)); + } + + $put = array_diff(\Yii::$app->request->getBodyParams(), [null, '']); + + $requestService->load($put, '') + ->save(); + + if (!$requestService->isSave) { throw new BadRequestHttpException(json_encode($requestService->errors)); } diff --git a/frontend/modules/api/controllers/SkillsController.php b/frontend/modules/api/controllers/SkillsController.php index 45a7780..dd1cf13 100755 --- a/frontend/modules/api/controllers/SkillsController.php +++ b/frontend/modules/api/controllers/SkillsController.php @@ -4,6 +4,7 @@ namespace frontend\modules\api\controllers; use common\behaviors\GsCors; use common\models\Options; +use common\models\Skill; use yii\filters\AccessControl; use yii\filters\auth\CompositeAuth; use yii\filters\auth\HttpBearerAuth; @@ -34,11 +35,40 @@ class SkillsController extends ApiController return array_merge($parent, $b); } + public function verbs(): array + { + return [ + 'skills-on-main-page' => ['get'], + 'get-skills-list' => ['get'], + ]; + } + public function actionIndex() { return ['some' => 'rrr']; } + /** + * + * @OA\Get(path="/skills/skills-on-main-page", + * summary="Получить список навыков для отображения на главной", + * description="Получить список навыков на главной странице", + * tags={"Skills"}, + * security={ + * {"bearerAuth": {}} + * }, + * @OA\Response( + * response=200, + * description="Возвращает массив навыков", + * @OA\MediaType( + * mediaType="application/json", + * ), + * + * ), + * ) + * + * @return array|mixed + */ public function actionSkillsOnMainPage() { $data = \common\models\Options::getValue('skills_on_main_page_to_front'); @@ -48,4 +78,31 @@ class SkillsController extends ApiController return $data; } + /** + * + * @OA\Get(path="/skills/get-skills-list", + * summary="Получить список навыков", + * description="Получить список навыков", + * tags={"Skills"}, + * security={ + * {"bearerAuth": {}} + * }, + * @OA\Response( + * response=200, + * description="Возвращает массив навыков", + * @OA\MediaType( + * mediaType="application/json", + * @OA\Schema(ref="#/components/schemas/SkillsExample"), + * ), + * + * ), + * ) + * + * @return array|\yii\db\ActiveRecord[] + */ + public function actionGetSkillsList(): array + { + return Skill::find()->all(); + } + } diff --git a/frontend/modules/api/models/Position.php b/frontend/modules/api/models/Position.php index 5c8ddbb..f516f6b 100644 --- a/frontend/modules/api/models/Position.php +++ b/frontend/modules/api/models/Position.php @@ -18,6 +18,23 @@ namespace frontend\modules\api\models; * description="Название позиции" * ), *) + * + * @OA\Schema( + * schema="PositionsExample", + * type="array", + * example={{"id": 1, "name": "Back end - разработчик"}, {"id": 2, "name": "Front end - разработчик"}}, + * @OA\Items( + * type="object", + * @OA\Property( + * property="id", + * type="integer", + * ), + * @OA\Property( + * property="name", + * type="string", + * ), + * ), + *) */ class Position extends \common\models\Position {