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
{