['get'], 'get-request-list' => ['get'], 'create-request' => ['post'], 'update-request' => ['put', 'patch'], ]; } /** * @OA\Get(path="/request/get-request", * summary="Получить запрос", * description="Получения запроса по идентификатору", * security={ * {"bearerAuth": {}} * }, * tags={"Requests"}, * @OA\Parameter( * name="request_id", * in="query", * required=true, * @OA\Schema( * type="integer", * ) * ), * @OA\Parameter( * name="search_depth", * in="query", * required=false, * @OA\Schema( * type="integer", * default=3 * ) * ), * @OA\Response( * response=200, * description="Возвращает объект Запроса", * @OA\MediaType( * mediaType="application/json", * @OA\Schema(ref="#/components/schemas/Request"), * ), * * ), * ) */ public function actionGetRequest(int $request_id, int $search_depth = 3): Request { if (empty($request_id) or !is_numeric($request_id)) { throw new NotFoundHttpException('Incorrect request ID'); } $requestService = RequestService::run($request_id); $model = $requestService->getById(); if (empty($model)) { throw new NotFoundHttpException('The request does not exist'); } $model->result_count = $requestService->search($search_depth)->count(); $model->result_profiles = $requestService->all(); return $model; } /** * * @OA\Get(path="/request/get-request-list", * summary="Получить список запросов", * description="Метод для получения списка запросов, если параметр user_id не передан, то запрос создается от имени текущего пользователя.", * security={ * {"bearerAuth": {}} * }, * tags={"Requests"}, * @OA\Parameter( * name="user_id", * in="query", * required=false, * @OA\Schema( * type="integer", * default=null * ) * ), * @OA\Parameter( * name="search_depth", * in="query", * required=false, * @OA\Schema( * type="integer", * default=3 * ) * ), * @OA\Response( * response=200, * description="Возвращает массив объектов Запроса", * @OA\MediaType( * mediaType="application/json", * @OA\Schema(ref="#/components/schemas/RequestsExample"), * ), * ), * ) * * @param int|null $user_id * @return array|\yii\db\ActiveRecord[] */ public function actionGetRequestList(int $user_id = null, int $search_depth = 3): array { if (!$user_id) { $user_id = \Yii::$app->user->id; } $requests = RequestService::run()->getByUserId($user_id); foreach ($requests as $request) { $requestService = RequestService::run($request->id); $request->result_count = $requestService->search($search_depth)->count(); $request->result_profiles = $requestService->all(); } return $requests; } /** * * @OA\Post(path="/request/create-request", * summary="Добавить запрос", * description="Метод для создания запроса, если не передан параметр user_id, то будет получен список текущего пользователя", * security={ * {"bearerAuth": {}} * }, * tags={"Requests"}, * * @OA\RequestBody( * @OA\MediaType( * mediaType="multipart/form-data", * @OA\Schema( * required={"position_id", "title", "status"}, * @OA\Property( * property="user_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 * @throws BadRequestHttpException */ public function actionCreateRequest(): Request { $user_id = \Yii::$app->user->id; if (!$user_id) { throw new BadRequestHttpException(json_encode(['Пользователь не найден'])); } $requestService = RequestService::run() ->setUserId($user_id) ->load(\Yii::$app->request->post(), '') ->save(); 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)); } return $requestService->getModel(); } }