80 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace frontend\modules\api\controllers;
 | |
| 
 | |
| 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;
 | |
| use Yii;
 | |
| use yii\web\BadRequestHttpException;
 | |
| 
 | |
| class QuestionController extends ApiController
 | |
| {
 | |
|     private UserQuestionnaireService $userQuestionnaireService;
 | |
| 
 | |
|     public function __construct(
 | |
|         $id,
 | |
|         $module,
 | |
|         UserQuestionnaireService $userQuestionnaireService,
 | |
|         $config = []
 | |
|     )
 | |
|     {
 | |
|         $this->userQuestionnaireService = $userQuestionnaireService;
 | |
|         parent::__construct($id, $module, $config);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @OA\Get(path="/question/get-questions",
 | |
|      *   summary="Список вопросов",
 | |
|      *   description="Получение списка вопросов и возможные варианты ответа. Сохраняет временную метку начала тестирования,
 | |
|          от которой будет отсчитываться временной интервал на выполнение теста. При наличии лимита времени на выполнение теста.
 | |
|          При превышении лимита времени на выполнение будет возвращена ошибка: Time's up!",
 | |
|      *   security={
 | |
|      *     {"bearerAuth": {}}
 | |
|      *   },
 | |
|      *   tags={"Tests"},
 | |
|      *   @OA\Parameter(
 | |
|      *      name="uuid",
 | |
|      *      in="query",
 | |
|      *      required=true,
 | |
|      *     description="UUID анкеты назначеной пользователю",
 | |
|      *      @OA\Schema(
 | |
|      *        type="string",
 | |
|      *      )
 | |
|      *   ),
 | |
|      *   @OA\Response(
 | |
|      *     response=200,
 | |
|      *     description="Возвращает масив вопросов",
 | |
|      *     @OA\MediaType(
 | |
|      *         mediaType="application/json",
 | |
|      *         @OA\Schema(ref="#/components/schemas/QuestionExampleArr"),
 | |
|      *     ),
 | |
|      *
 | |
|      *   ),
 | |
|      * )
 | |
|      *
 | |
|      * @throws BadRequestHttpException
 | |
|      * @throws Exception
 | |
|      */
 | |
|     public function actionGetQuestions(): array
 | |
|     {
 | |
|         $form = new QuestionnaireUuidForm();
 | |
| 
 | |
|         if ($form->load(Yii::$app->request->get()) && !$form->validate()) {
 | |
|             $errors = $form->errors;
 | |
|             throw new BadRequestHttpException(array_shift($errors)[0]);
 | |
|         }
 | |
| 
 | |
|         $userQuestionnaire = UserQuestionnaire::findOne(['uuid' => $form->uuid]);
 | |
| 
 | |
|         if (!$this->userQuestionnaireService->checkTimeLimit($userQuestionnaire)) {
 | |
|             UserQuestionnaireService::calculateScore($userQuestionnaire->uuid);
 | |
|             throw new BadRequestHttpException("Time's up!");
 | |
|         }
 | |
| 
 | |
|         return Question::activeQuestions($userQuestionnaire->questionnaire_id);
 | |
|     }
 | |
| }
 | 
