guild/frontend/modules/api/controllers/QuestionController.php

80 lines
2.8 KiB
PHP
Raw Normal View History

2021-10-28 10:51:14 +03:00
<?php
namespace frontend\modules\api\controllers;
2023-11-16 11:55:49 +03:00
use Exception;
use frontend\modules\api\models\questionnaire\forms\QuestionnaireUuidForm;
use frontend\modules\api\models\questionnaire\Question;
use frontend\modules\api\models\questionnaire\UserQuestionnaire;
use frontend\modules\api\services\UserQuestionnaireService;
2021-10-28 10:51:14 +03:00
use Yii;
2023-11-16 11:55:49 +03:00
use yii\web\BadRequestHttpException;
2021-10-28 10:51:14 +03:00
2022-03-03 17:24:45 +03:00
class QuestionController extends ApiController
2021-10-28 10:51:14 +03:00
{
2023-11-16 11:55:49 +03:00
private UserQuestionnaireService $userQuestionnaireService;
2021-10-28 10:51:14 +03:00
2023-11-16 11:55:49 +03:00
public function __construct(
$id,
$module,
UserQuestionnaireService $userQuestionnaireService,
$config = []
)
2021-10-28 10:51:14 +03:00
{
2023-11-16 11:55:49 +03:00
$this->userQuestionnaireService = $userQuestionnaireService;
parent::__construct($id, $module, $config);
2021-10-28 10:51:14 +03:00
}
/**
2023-10-10 15:06:01 +03:00
* @OA\Get(path="/question/get-questions",
* summary="Список вопросов",
2023-11-16 11:55:49 +03:00
* description="Получение списка вопросов и возможные варианты ответа. Сохраняет временную метку начала тестирования,
от которой будет отсчитываться временной интервал на выполнение теста. При наличии лимита времени на выполнение теста.
При превышении лимита времени на выполнение будет возвращена ошибка: Time's up!",
2023-10-10 15:06:01 +03:00
* security={
* {"bearerAuth": {}}
* },
* tags={"Tests"},
* @OA\Parameter(
2023-10-26 09:55:39 +03:00
* name="uuid",
2023-10-10 15:06:01 +03:00
* in="query",
* required=true,
* description="UUID анкеты назначеной пользователю",
* @OA\Schema(
2023-10-26 09:55:39 +03:00
* type="string",
2023-10-10 15:06:01 +03:00
* )
* ),
* @OA\Response(
* response=200,
* description="Возвращает масив вопросов",
* @OA\MediaType(
* mediaType="application/json",
* @OA\Schema(ref="#/components/schemas/QuestionExampleArr"),
* ),
*
* ),
* )
*
2023-11-16 11:55:49 +03:00
* @throws BadRequestHttpException
* @throws Exception
2021-10-28 10:51:14 +03:00
*/
public function actionGetQuestions(): array
2021-10-28 10:51:14 +03:00
{
2023-11-16 11:55:49 +03:00
$form = new QuestionnaireUuidForm();
2021-10-28 10:51:14 +03:00
2023-11-16 11:55:49 +03:00
if ($form->load(Yii::$app->request->get()) && !$form->validate()) {
$errors = $form->errors;
throw new BadRequestHttpException(array_shift($errors)[0]);
2021-10-28 10:51:14 +03:00
}
2023-11-16 11:55:49 +03:00
$userQuestionnaire = UserQuestionnaire::findOne(['uuid' => $form->uuid]);
2023-11-16 11:55:49 +03:00
if (!$this->userQuestionnaireService->checkTimeLimit($userQuestionnaire)) {
UserQuestionnaireService::calculateScore($userQuestionnaire->uuid);
throw new BadRequestHttpException("Time's up!");
2021-10-28 10:51:14 +03:00
}
2023-11-16 11:55:49 +03:00
return Question::activeQuestions($userQuestionnaire->questionnaire_id);
2021-10-28 10:51:14 +03:00
}
}