add column description to questionnaire table
This commit is contained in:
@ -2,7 +2,8 @@
|
||||
|
||||
namespace frontend\modules\api\controllers;
|
||||
|
||||
use common\services\UserQuestionnaireService;
|
||||
use frontend\modules\api\models\UserQuestionnaire;
|
||||
use frontend\modules\api\services\UserQuestionnaireService;
|
||||
use yii\helpers\ArrayHelper;
|
||||
use yii\web\NotFoundHttpException;
|
||||
use yii\web\ServerErrorHttpException;
|
||||
@ -99,7 +100,7 @@ class UserQuestionnaireController extends ApiController
|
||||
* @throws NotFoundHttpException
|
||||
* @throws ServerErrorHttpException
|
||||
*/
|
||||
public function actionQuestionnaireCompleted($user_questionnaire_uuid)
|
||||
public function actionQuestionnaireCompleted($user_questionnaire_uuid): UserQuestionnaire
|
||||
{
|
||||
$userQuestionnaireModel = UserQuestionnaireService::calculateScore($user_questionnaire_uuid);
|
||||
if ($userQuestionnaireModel->errors) {
|
||||
@ -142,7 +143,7 @@ class UserQuestionnaireController extends ApiController
|
||||
* )
|
||||
* @throws ServerErrorHttpException
|
||||
*/
|
||||
public function actionGetPointsNumber($user_questionnaire_uuid)
|
||||
public function actionGetPointsNumber($user_questionnaire_uuid): array
|
||||
{
|
||||
$questionPointsNumber = UserQuestionnaireService::getPointsNumber($user_questionnaire_uuid);
|
||||
if (empty($questionPointsNumber)) {
|
||||
@ -185,7 +186,7 @@ class UserQuestionnaireController extends ApiController
|
||||
* )
|
||||
* @throws ServerErrorHttpException
|
||||
*/
|
||||
public function actionGetQuestionNumber($user_questionnaire_uuid)
|
||||
public function actionGetQuestionNumber($user_questionnaire_uuid): array
|
||||
{
|
||||
$questionNumber = UserQuestionnaireService::getQuestionNumber($user_questionnaire_uuid);
|
||||
if (empty($questionNumber)) {
|
||||
|
@ -99,5 +99,29 @@ namespace frontend\modules\api\models;
|
||||
*/
|
||||
class UserQuestionnaire extends \common\models\UserQuestionnaire
|
||||
{
|
||||
public function fields(): array
|
||||
{
|
||||
return [
|
||||
'user_id',
|
||||
'uuid',
|
||||
'score',
|
||||
'status',
|
||||
'percent_correct_answers',
|
||||
'testing_date',
|
||||
'questionnaire_title' => function() {
|
||||
return $this->questionnaire->title;
|
||||
},
|
||||
'description' => function() {
|
||||
return $this->questionnaire->description;
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[]
|
||||
*/
|
||||
public function extraFields(): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
70
frontend/modules/api/services/UserQuestionnaireService.php
Normal file
70
frontend/modules/api/services/UserQuestionnaireService.php
Normal file
@ -0,0 +1,70 @@
|
||||
<?php
|
||||
|
||||
namespace frontend\modules\api\services;
|
||||
|
||||
use common\models\Question;
|
||||
use common\services\ScoreCalculatorService;
|
||||
use frontend\modules\api\models\UserQuestionnaire;
|
||||
use yii\base\InvalidConfigException;
|
||||
use yii\web\NotFoundHttpException;
|
||||
use yii\web\ServerErrorHttpException;
|
||||
|
||||
class UserQuestionnaireService
|
||||
{
|
||||
public static function getQuestionnaireList($user_id): array
|
||||
{
|
||||
return UserQuestionnaire::findActiveUserQuestionnaires($user_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws NotFoundHttpException
|
||||
* @throws InvalidConfigException
|
||||
*/
|
||||
public static function calculateScore($user_questionnaire_uuid): UserQuestionnaire
|
||||
{
|
||||
$userQuestionnaireModel = UserQuestionnaire::findOne(['uuid' => $user_questionnaire_uuid]);
|
||||
if (empty($userQuestionnaireModel)) {
|
||||
throw new NotFoundHttpException('The questionnaire with this uuid does not exist');
|
||||
}
|
||||
ScoreCalculatorService::rateResponses($userQuestionnaireModel);
|
||||
if (ScoreCalculatorService::checkAnswerFlagsForNull($userQuestionnaireModel)) {
|
||||
ScoreCalculatorService::calculateScore($userQuestionnaireModel);
|
||||
} else {
|
||||
$userQuestionnaireModel->status = 3;
|
||||
$userQuestionnaireModel->save();
|
||||
}
|
||||
return $userQuestionnaireModel;
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws ServerErrorHttpException
|
||||
*/
|
||||
public static function getQuestionNumber($user_questionnaire_uuid): array
|
||||
{
|
||||
$userQuestionnaireModel = UserQuestionnaire::findOne(['uuid' => $user_questionnaire_uuid]);
|
||||
if (empty($userQuestionnaireModel)) {
|
||||
throw new ServerErrorHttpException('Not found UserQuestionnaire');
|
||||
}
|
||||
$count = Question::find()
|
||||
->where(['questionnaire_id' => $userQuestionnaireModel->questionnaire_id])
|
||||
->andWhere(['status' => 1])
|
||||
->count();
|
||||
return array('question_number' => $count);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws ServerErrorHttpException
|
||||
*/
|
||||
public static function getPointsNumber($user_questionnaire_uuid)
|
||||
{
|
||||
$userQuestionnaireModel = UserQuestionnaire::findOne(['uuid' => $user_questionnaire_uuid]);
|
||||
if (empty($userQuestionnaireModel)) {
|
||||
throw new ServerErrorHttpException('Not found UserQuestionnaire');
|
||||
}
|
||||
$pointSum = Question::find()
|
||||
->where(['questionnaire_id' => $userQuestionnaireModel->questionnaire_id])
|
||||
->andWhere(['status' => 1])
|
||||
->sum('score');
|
||||
return array('sum_point' => $pointSum);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user