Merge pull request #94 from apuc/refactoring_api/ProfileController
Refactoring api/profile controller
This commit is contained in:
commit
c4f6ce195e
27
common/services/InterviewRequestService.php
Normal file
27
common/services/InterviewRequestService.php
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace common\services;
|
||||||
|
|
||||||
|
use common\models\InterviewRequest;
|
||||||
|
use Yii;
|
||||||
|
|
||||||
|
class InterviewRequestService
|
||||||
|
{
|
||||||
|
public static function createInterviewRequest($interviewRequestParams)
|
||||||
|
{
|
||||||
|
$interviewRequest = new InterviewRequest();
|
||||||
|
$attributes = $interviewRequestParams;
|
||||||
|
|
||||||
|
$interviewRequest->attributes = $attributes;
|
||||||
|
|
||||||
|
$interviewRequest->created_at = time();
|
||||||
|
$interviewRequest->user_id = \Yii::$app->user->id;
|
||||||
|
|
||||||
|
if ($interviewRequest->save()) {
|
||||||
|
\Yii::$app->telegram_bot->sendRenderedMessage('interview_request', $attributes);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $interviewRequest;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -4,59 +4,120 @@ namespace common\services;
|
|||||||
|
|
||||||
use common\models\Manager;
|
use common\models\Manager;
|
||||||
use common\models\ManagerEmployee;
|
use common\models\ManagerEmployee;
|
||||||
|
use common\models\UserCard;
|
||||||
|
use frontend\modules\api\models\ProfileSearchForm;
|
||||||
|
use Yii;
|
||||||
|
use yii\web\BadRequestHttpException;
|
||||||
|
use yii\web\ServerErrorHttpException;
|
||||||
|
|
||||||
class ProfileService
|
class ProfileService
|
||||||
{
|
{
|
||||||
private $searcherID;
|
/**
|
||||||
private $id;
|
* @throws ServerErrorHttpException
|
||||||
|
*/
|
||||||
public function __construct($searcherID, $id)
|
public static function getMainData($user_id): array
|
||||||
{
|
{
|
||||||
$this->searcherID = $searcherID;
|
$userCard = UserCard::findOne(['id_user' => $user_id]);
|
||||||
$this->id = $id;
|
if (empty($userCard)) {
|
||||||
|
throw new ServerErrorHttpException(json_encode($userCard->errors));
|
||||||
|
}
|
||||||
|
return array('fio' => $userCard->fio,
|
||||||
|
'photo' => $userCard->photo,
|
||||||
|
'gender' => $userCard->gender,
|
||||||
|
'level' => $userCard->level,
|
||||||
|
'years_of_exp' => $userCard->years_of_exp,
|
||||||
|
'specification' => $userCard->specification,
|
||||||
|
'position_name' => $userCard->position->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function checkReportePermission()
|
/**
|
||||||
|
* @throws BadRequestHttpException
|
||||||
|
*/
|
||||||
|
public static function getProfile($id, $request)//: ?array
|
||||||
{
|
{
|
||||||
if ($this->isMyProfile() or $this->isMyEmployee()) {
|
$searchModel = new ProfileSearchForm();
|
||||||
|
$searchModel->attributes = $request;
|
||||||
|
|
||||||
|
if ($id) {
|
||||||
|
return $searchModel->byId();
|
||||||
|
}
|
||||||
|
return $searchModel->byParams();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws BadRequestHttpException
|
||||||
|
*/
|
||||||
|
public static function getProfileWithReportPermission($user_card_id): ?array
|
||||||
|
{
|
||||||
|
if (UserCard::find()->where(['id' => $user_card_id])->exists()) {
|
||||||
|
|
||||||
|
$searchModel = new ProfileSearchForm();
|
||||||
|
$searchModel->id = $user_card_id;
|
||||||
|
$profile = $searchModel->byId();
|
||||||
|
|
||||||
|
self::addPermission($profile, $user_card_id);
|
||||||
|
return $profile;
|
||||||
|
}
|
||||||
|
throw new BadRequestHttpException(json_encode('There is no user with this id'));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static function addPermission(&$profile, $user_card_id)
|
||||||
|
{
|
||||||
|
$searcherCardID = self::getSearcherCardID(Yii::$app->user->getId());
|
||||||
|
if (self::checkReportPermission($user_card_id, $searcherCardID)) {
|
||||||
|
$profile += ['report_permission' => '1'];
|
||||||
|
} else {
|
||||||
|
$profile += ['report_permission' => '0'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static function getSearcherCardID($user_id): int
|
||||||
|
{
|
||||||
|
return UserCard::findOne(['id_user' => $user_id])->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static function checkReportPermission($user_card_id, $searcherCardID): bool
|
||||||
|
{
|
||||||
|
if (self::isMyProfile($user_card_id, $searcherCardID)
|
||||||
|
or self::isMyEmployee($user_card_id, $searcherCardID)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function isMyProfile()
|
private static function isMyProfile($user_card_id, $searcherCardID): bool
|
||||||
{
|
{
|
||||||
if ($this->id == $this->searcherID) {
|
if ($user_card_id == $searcherCardID) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function isMyEmployee()
|
private static function isMyEmployee($user_card_id, $searcherCardID): bool
|
||||||
{
|
{
|
||||||
if (!$this->amIManager()) {
|
if (!self::amIManager($searcherCardID)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->isMyEmploee()) {
|
if (self::isMyEmployer($user_card_id, $searcherCardID)) {
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function amIManager()
|
|
||||||
{
|
|
||||||
if (Manager::find()->where(['user_card_id' => $this->searcherID])->exists()) {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function isMyEmploee()
|
private static function amIManager($searcherCardID): bool
|
||||||
{
|
{
|
||||||
$manager = Manager::find()->where(['user_card_id' => $this->searcherID])->one();
|
if (Manager::find()->where(['user_card_id' => $searcherCardID])->exists()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static function isMyEmployer($user_card_id, $searcherCardID): bool
|
||||||
|
{
|
||||||
|
$manager = Manager::find()->where(['user_card_id' => $searcherCardID])->one();
|
||||||
$exist = ManagerEmployee::find()
|
$exist = ManagerEmployee::find()
|
||||||
->where(['manager_id' => $manager->id, 'user_card_id' => $this->id])
|
->where(['manager_id' => $manager->id, 'user_card_id' => $user_card_id])
|
||||||
->exists();
|
->exists();
|
||||||
|
|
||||||
if ($exist) {
|
if ($exist) {
|
||||||
@ -64,7 +125,4 @@ class ProfileService
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
@ -1,27 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace common\services;
|
|
||||||
|
|
||||||
use common\models\UserCard;
|
|
||||||
use yii\web\ServerErrorHttpException;
|
|
||||||
|
|
||||||
class UserCardService
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @throws ServerErrorHttpException
|
|
||||||
*/
|
|
||||||
public static function getUserCard($user_id): array
|
|
||||||
{
|
|
||||||
$userCard = UserCard::findOne(['id_user' => $user_id]);
|
|
||||||
if (empty($userCard)) {
|
|
||||||
throw new ServerErrorHttpException(json_encode($userCard->errors));
|
|
||||||
}
|
|
||||||
return array('fio' => $userCard->fio,
|
|
||||||
'photo' => $userCard->photo,
|
|
||||||
'gender' => $userCard->gender,
|
|
||||||
'level' => $userCard->level,
|
|
||||||
'years_of_exp' => $userCard->years_of_exp,
|
|
||||||
'specification' => $userCard->specification,
|
|
||||||
'position_name' => $userCard->position->name);
|
|
||||||
}
|
|
||||||
}
|
|
54
docs/api/interview.md
Normal file
54
docs/api/interview.md
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
## Интервью
|
||||||
|
### Пригласить на собеседование
|
||||||
|
`https://guild.craft-group.xyz/api/interview-request/create-interview-request`
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Для того, отправить приглашение профилю на собеседование, необходимо сделать
|
||||||
|
<b>POST</b> запрос на URL https://guild.craft-group.xyz/api/interview-request/create-interview-request
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Возможные параметры:
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Параметры
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Значение
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
email*
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Почта пользователя, который хочет пригласить на собеседование.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
profile_id*
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Идентификатор профиля.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
phone
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Телефон.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
comment
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Дополнительные пожелания по собеседованию.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
187
docs/api/main.md
187
docs/api/main.md
@ -7,191 +7,6 @@
|
|||||||
Чтобы получить популярные навыки нужно сделать <b>GET</b> запрос на URL https://guild.craft-group.xyz/api/skills/skills-on-main-page
|
Чтобы получить популярные навыки нужно сделать <b>GET</b> запрос на URL https://guild.craft-group.xyz/api/skills/skills-on-main-page
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
## Профиль
|
|
||||||
### Список
|
|
||||||
`https://guild.craft-group.xyz/api/profile`
|
|
||||||
<p>
|
|
||||||
Для получения списка профилей необходимо отправить <b>GET</b> запрос на URL https://guild.craft-group.xyz/api/profile
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Возможные параметры:
|
|
||||||
</p>
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<th>
|
|
||||||
Параметры
|
|
||||||
</th>
|
|
||||||
<th>
|
|
||||||
Значение
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
get-document-list
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
Количество профилей, которое вернет сервер при запросе.
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
offset
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
Количество записей на которое нужно отступить в списке профилей.
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
skills
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
Идентификаторы навыков по которым нужно отфильтровать профили.
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
<p>
|
|
||||||
Пример запроса:
|
|
||||||
</p>
|
|
||||||
|
|
||||||
`https://guild.craft-group.xyz/api/profile?limit=5&offset=5&skills=1,2`
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Возвращает <b>массив</b> объектов <b>Профилей</b>. <br>
|
|
||||||
Каждый объект <b>Профиля</b> имеет такой вид:
|
|
||||||
</p>
|
|
||||||
|
|
||||||
```json5
|
|
||||||
{
|
|
||||||
"id": "1",
|
|
||||||
"fio": "f23f",
|
|
||||||
"passport": "f23",
|
|
||||||
"photo": "''",
|
|
||||||
"email": "f",
|
|
||||||
"gender": "1",
|
|
||||||
"dob": "2021-09-17",
|
|
||||||
"status": "2",
|
|
||||||
"created_at": "2021-09-08 16:30:34",
|
|
||||||
"updated_at": "2021-09-09 08:41:02",
|
|
||||||
"resume": "",
|
|
||||||
"salary": "",
|
|
||||||
"position_id": "1",
|
|
||||||
"deleted_at": null,
|
|
||||||
"id_user": "1",
|
|
||||||
"city": "",
|
|
||||||
"link_vk": "",
|
|
||||||
"link_telegram": "",
|
|
||||||
"vc_text": "",
|
|
||||||
"level": "2", //
|
|
||||||
"vc_text_short": "",
|
|
||||||
"years_of_exp": "0",
|
|
||||||
"specification": "",
|
|
||||||
"skillValues": [ //Массив навыков привязанных к этому профилю
|
|
||||||
{
|
|
||||||
"id": "1",
|
|
||||||
"card_id": "1", //card_id из таблицы card_skill
|
|
||||||
"skill_id": "1",//skill_id из таблицы card_skill
|
|
||||||
"skill": {
|
|
||||||
"id": "1", //id из таблицы skill
|
|
||||||
"name": "SQL",
|
|
||||||
"category_id": "1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
//...
|
|
||||||
],
|
|
||||||
"achievements": [ //Массив достижений привязанных к этому профилю
|
|
||||||
{
|
|
||||||
"id": "7",
|
|
||||||
"user_card_id": "1",//user_card_id из таблицы achievement_user_card
|
|
||||||
"achievement_id": "1",//achievement_id из таблицы achievement_user_card
|
|
||||||
"achievement": {
|
|
||||||
"id": "1", //id из таблицы achievement
|
|
||||||
"slug": "newguy",
|
|
||||||
"title": "Новичок",
|
|
||||||
"img": "",
|
|
||||||
"description": "Ты начал у нас работу",
|
|
||||||
"status": "1" // 1 - Активно, 2 - Неактивно
|
|
||||||
}
|
|
||||||
},
|
|
||||||
//...
|
|
||||||
]
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
### Одна запись
|
|
||||||
`https://guild.craft-group.xyz/api/profile/{id}`
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Для того, чтобы получить данные одной записи необходимо отправить <b>GET</b> запрос
|
|
||||||
на URL https://guild.craft-group.xyz/api/profile/{id} , где <b>id</b> это идентификатор
|
|
||||||
профиля.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Пример запроса:
|
|
||||||
</p>
|
|
||||||
|
|
||||||
`https://guild.craft-group.xyz/api/profile/6`
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Возвращает объект <b>Профиля</b>. <br>
|
|
||||||
Как выглядит можно посмотреть выше.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
|
|
||||||
### Пригласить на собеседование
|
|
||||||
`https://guild.craft-group.xyz/api/profile/add-to-interview`
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Для того, отправить приглашение профилю на собеседование, необходимо сделать
|
|
||||||
<b>POST</b> запрос на URL https://guild.craft-group.xyz/api/profile/add-to-interview
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Возможные параметры:
|
|
||||||
</p>
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<th>
|
|
||||||
Параметры
|
|
||||||
</th>
|
|
||||||
<th>
|
|
||||||
Значение
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
email*
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
Почта пользователя, который хочет пригласить на собеседование.
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
profile_id*
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
Идентификатор профиля.
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
phone
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
Телефон.
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
comment
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
Дополнительные пожелания по собеседованию.
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
## Отчет
|
## Отчет
|
||||||
### Список
|
### Список
|
||||||
`https://guild.craft-group.xyz/api/reports`
|
`https://guild.craft-group.xyz/api/reports`
|
||||||
@ -2406,7 +2221,7 @@
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
### Назначить сотрудника на задачу
|
### Назначить сотрудника на задачу
|
||||||
`https://guild.craft-group.xyz/api/task-user/get-task-users`
|
`https://guild.craft-group.xyz/api/task-user/set-task-users`
|
||||||
<p>
|
<p>
|
||||||
Для назначения исполнителя необходимо отправить <b>POST</b> запрос на URL https://guild.craft-group.xyz/api/task-user/set-task-user
|
Для назначения исполнителя необходимо отправить <b>POST</b> запрос на URL https://guild.craft-group.xyz/api/task-user/set-task-user
|
||||||
</p>
|
</p>
|
||||||
|
308
docs/api/profile.md
Normal file
308
docs/api/profile.md
Normal file
@ -0,0 +1,308 @@
|
|||||||
|
# Профиль
|
||||||
|
## Методы
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Метод
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Описание
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
api/profile
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Возвращает список профилей
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
api/profile/{id}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Возвращает один профиль
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
profile/profile-with-report-permission
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Получить профиль с флагом прав на просмотр отчётов этого пользователя
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
profile/get-main-data
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Получить получить основные данные профиля
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
### Список
|
||||||
|
`https://guild.craft-group.xyz/api/profile`
|
||||||
|
<p>
|
||||||
|
Для получения списка профилей необходимо отправить <b>GET</b> запрос на URL https://guild.craft-group.xyz/api/profile
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Возможные параметры:
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Параметры
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Значение
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
get-document-list
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Количество профилей, которое вернет сервер при запросе.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
offset
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Количество записей на которое нужно отступить в списке профилей.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
skills
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Идентификаторы навыков по которым нужно отфильтровать профили.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<p>
|
||||||
|
Пример запроса:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
`https://guild.craft-group.xyz/api/profile?limit=5&offset=5&skills=1,2`
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Возвращает <b>массив</b> объектов <b>Профилей</b>. <br>
|
||||||
|
Каждый объект <b>Профиля</b> имеет такой вид:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
```json5
|
||||||
|
{
|
||||||
|
"id": "1",
|
||||||
|
"fio": "f23f",
|
||||||
|
"passport": "f23",
|
||||||
|
"photo": "''",
|
||||||
|
"email": "f",
|
||||||
|
"gender": "1",
|
||||||
|
"dob": "2021-09-17",
|
||||||
|
"status": "2",
|
||||||
|
"created_at": "2021-09-08 16:30:34",
|
||||||
|
"updated_at": "2021-09-09 08:41:02",
|
||||||
|
"resume": "",
|
||||||
|
"salary": "",
|
||||||
|
"position_id": "1",
|
||||||
|
"deleted_at": null,
|
||||||
|
"id_user": "1",
|
||||||
|
"city": "",
|
||||||
|
"link_vk": "",
|
||||||
|
"link_telegram": "",
|
||||||
|
"vc_text": "",
|
||||||
|
"level": "2", //
|
||||||
|
"vc_text_short": "",
|
||||||
|
"years_of_exp": "0",
|
||||||
|
"specification": "",
|
||||||
|
"skillValues": [ //Массив навыков привязанных к этому профилю
|
||||||
|
{
|
||||||
|
"id": "1",
|
||||||
|
"card_id": "1", //card_id из таблицы card_skill
|
||||||
|
"skill_id": "1",//skill_id из таблицы card_skill
|
||||||
|
"skill": {
|
||||||
|
"id": "1", //id из таблицы skill
|
||||||
|
"name": "SQL",
|
||||||
|
"category_id": "1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//...
|
||||||
|
],
|
||||||
|
"achievements": [ //Массив достижений привязанных к этому профилю
|
||||||
|
{
|
||||||
|
"id": "7",
|
||||||
|
"user_card_id": "1",//user_card_id из таблицы achievement_user_card
|
||||||
|
"achievement_id": "1",//achievement_id из таблицы achievement_user_card
|
||||||
|
"achievement": {
|
||||||
|
"id": "1", //id из таблицы achievement
|
||||||
|
"slug": "newguy",
|
||||||
|
"title": "Новичок",
|
||||||
|
"img": "",
|
||||||
|
"description": "Ты начал у нас работу",
|
||||||
|
"status": "1" // 1 - Активно, 2 - Неактивно
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//...
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### Одна запись
|
||||||
|
`https://guild.craft-group.xyz/api/profile/{id}`
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Для того, чтобы получить данные одной записи необходимо отправить <b>GET</b> запрос
|
||||||
|
на URL https://guild.craft-group.xyz/api/profile/{id} , где <b>id</b> это идентификатор
|
||||||
|
профиля.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Пример запроса:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
`https://guild.craft-group.xyz/api/profile/6`
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Возвращает объект <b>Профиля</b>. <br>
|
||||||
|
Как выглядит можно посмотреть выше.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
### Получить профиль с флагом прав на просмотр отчётов этого пользователя
|
||||||
|
`https://guild.craft-group.xyz/api/profile/profile-with-report-permission`
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Для получения профиля пользователя с флагом прав на просмотр отчётов этого пользователя, необходимо сделать
|
||||||
|
<b>GET</b> запрос на URL https://guild.craft-group.xyz/api/profile/add-to-interview
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Возможные параметры:
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Параметры
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Значение
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
id
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
ID профиля пользователя
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
## Основные данные пользователя
|
||||||
|
|
||||||
|
`https://guild.craft-group.xyz/api/profile/get-main-data?user_id=1`
|
||||||
|
<p>
|
||||||
|
Требуемые параметры:
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Параметры
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Значение
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
user_id
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Id профиля пользователя
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Возвращает объект <b>Пользователь</b>. <br>
|
||||||
|
Каждый объект <b>Пользователь</b> имеет такой вид:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
```json5
|
||||||
|
{
|
||||||
|
"fio": "Тест менеджер для апи запроса",
|
||||||
|
"photo": null,
|
||||||
|
"gender": 1,
|
||||||
|
"level": 2,
|
||||||
|
"years_of_exp": null,
|
||||||
|
"specification": null,
|
||||||
|
"position_name": "Должность 1"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Возвращаемые параметры:
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Параметры
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Значение
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
fio
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
ФИО
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
photo
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Ссылка на фото
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
gender
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Пол
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
level
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Уровень
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
years_of_exp
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Лет опыта
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
position_name
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Должность
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
975
docs/api/questionnaire.md
Normal file
975
docs/api/questionnaire.md
Normal file
@ -0,0 +1,975 @@
|
|||||||
|
## Анкеты
|
||||||
|
|
||||||
|
## Методы
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Метод
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Описание
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
questionnaire/questionnaires-list
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Возвращает список анкет
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
questionnaire/questionnaire-completed
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Завершение прохождение анкеты, проверка ответов
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
questionnaire/get-points-number
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Число балов в анкете
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
questionnaire/get-question-number
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Число вопросов в анкете
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
question/get-questions
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Вопросы анкеты
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
answer/get-answers
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Список возможных ответов на вопрос
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
user-response/set-response
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Сохранить ответ пользователя
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
user-response/set-responses
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Сохранить массив ответов пользователя
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
get
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Возвращает менеджера
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
### Список анкет
|
||||||
|
|
||||||
|
`https://guild.craft-group.xyz/api/user-questionnaire/questionnaires-list`
|
||||||
|
<p>
|
||||||
|
Для получения списка анкет необходимо отправить <b>GET</b> запрос на URL https://guild.craft-group.xyz/api/user-questionnaire/questionnaires-list
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Требуемые параметры запроса:
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Параметры
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Значение
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
user_id
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
ID пользователя(int)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<p>
|
||||||
|
Пример запроса:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
`https://guild.craft-group.xyz/api/user-questionnaire/questionnaires-list?user_id=1`
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Возвращает <b>массив</b> объектов записи <b>Назначенная анкета</b>. <br>
|
||||||
|
Каждый объектимеет такой вид:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
```json5
|
||||||
|
{
|
||||||
|
"user_id": 1,
|
||||||
|
"uuid": "d222f858-60fd-47fb-8731-dc9d5fc384c5",
|
||||||
|
"score": 11,
|
||||||
|
"status": 2,
|
||||||
|
"percent_correct_answers": 0.25,
|
||||||
|
"testing_date": "2022-03-17 11:14:22",
|
||||||
|
"questionnaire_title": "Кат1 Анкета 1 активна"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Возвращаемые параметры объекта анкета:
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Параметры
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Значение
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
user_id
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
ID пользователя(int)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
uuid
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
uuid анкеты пользователя
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
score
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Полученные балы(int)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
status
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Статус: 0 - не активен; 1 - активен; 2 - завершён; 3 - на проверке;
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
percent_correct_answers
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Процент правильных ответов(float)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
testing_date
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Дата тестирования
|
||||||
|
</td>
|
||||||
|
</tr><tr>
|
||||||
|
<td>
|
||||||
|
questionnaire_title
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Название анкеты
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Передаваемые параметры объекта вопроса:
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Параметры
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Значение
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
user_id
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
ID пользователя(int)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
score
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Полученные балы(int)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
percent_correct_answers
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Процент правильных ответов(float)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<p>
|
||||||
|
Если пользователь не найден или у пользователя нет активных анкет будет отправлено следующее сообщение:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
```json5
|
||||||
|
{
|
||||||
|
"name": "Not Found",
|
||||||
|
"message": "Active questionnaire not found",
|
||||||
|
"code": 0,
|
||||||
|
"status": 404,
|
||||||
|
"type": "yii\\web\\NotFoundHttpException"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Проверить ответы в анкете
|
||||||
|
|
||||||
|
`https://guild.craft-group.xyz/api/user-questionnaire/questionnaire-completed`
|
||||||
|
<p>
|
||||||
|
Для выполнения проверки анкеты необходимо отправить <b>GET</b> запрос на URL https://guild.craft-group.xyz/api/user-questionnaire/questionnaire-completed
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Требуемые параметры запроса:
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Параметры
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Значение
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
user_questionnaire_uuid
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
UUID анкеты назначеной пользователю
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<p>
|
||||||
|
Пример запроса:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
`https://guild.craft-group.xyz/api/user-questionnaire/questionnaire-completed?user_questionnaire_uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5`
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Возвращает <b>массив</b> объектов <b>Вопросов</b>. <br>
|
||||||
|
Каждый объект <b>Вопрос</b> имеет такой вид:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
```json5
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"questionnaire_id": 1,
|
||||||
|
"user_id": 1,
|
||||||
|
"uuid": "d222f858-60fd-47fb-8731-dc9d5fc384c5",
|
||||||
|
"created_at": "2021-10-20 13:06:12",
|
||||||
|
"updated_at": {
|
||||||
|
"expression": "NOW()",
|
||||||
|
"params": []
|
||||||
|
},
|
||||||
|
"score": 4,
|
||||||
|
"status": 1,
|
||||||
|
"percent_correct_answers": 0.5,
|
||||||
|
"testing_date": null
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Число балов в анкете
|
||||||
|
|
||||||
|
`https://guild.craft-group.xyz/api/user-questionnaire/get-points-number?user_questionnaire_uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5`
|
||||||
|
<p>
|
||||||
|
Для максимального числа балов в анкеты необходимо отправить <b>GET</b> запрос на URL https://guild.craft-group.xyz/api/user-questionnaire/get-points-number
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Требуемые параметры запроса:
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Параметры
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Значение
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
user_questionnaire_uuid
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
UUID анкеты назначеной пользователю
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<p>
|
||||||
|
Пример запроса:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
`https://guild.craft-group.xyz/api/user-questionnaire/get-points-number?user_questionnaire_uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5`
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Возвращает максимально возможное число балов за анкету b>. <br>
|
||||||
|
Объект <b>Ответа</b> имеет такой вид:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
```json5
|
||||||
|
{
|
||||||
|
"sum_point": "61"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Число вопросов в анкете
|
||||||
|
|
||||||
|
`https://guild.craft-group.xyz/api/user-questionnaire/get-question-number?user_questionnaire_uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5`
|
||||||
|
<p>
|
||||||
|
Для числа вопросов в анкете необходимо отправить <b>GET</b> запрос на URL https://guild.craft-group.xyz/api/user-questionnaire/get-question-number
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Требуемые параметры запроса:
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Параметры
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Значение
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
user_questionnaire_uuid
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
UUID анкеты назначеной пользователю
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<p>
|
||||||
|
Пример запроса:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
`https://guild.craft-group.xyz/api/user-questionnaire/get-question-number?user_questionnaire_uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5`
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Возвращает число вопросов в анкете b>. <br>
|
||||||
|
Объект <b>Ответа</b> имеет такой вид:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
```json5
|
||||||
|
{
|
||||||
|
"question_number": "7"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Вопросы анкеты
|
||||||
|
|
||||||
|
`https://guild.craft-group.xyz/api/question/get-questions`
|
||||||
|
<p>
|
||||||
|
Для получения вопросов анкеты необходимо отправить <b>GET</b> запрос на URL https://guild.craft-group.xyz/api/question/get-questions
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Требуемые параметры запроса:
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Параметры
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Значение
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
uuid
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
UUID анкеты назначеной пользователю
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<p>
|
||||||
|
Пример запроса:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
`https://guild.craft-group.xyz/api/question/get-questions?uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5`
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Возвращает <b>массив</b> объектов <b>Вопросов</b>. <br>
|
||||||
|
Каждый объект <b>Вопрос</b> имеет такой вид:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
```json5
|
||||||
|
{
|
||||||
|
"id": "4",
|
||||||
|
"question_type_id": "2",
|
||||||
|
"question_body": "Один ответ1",
|
||||||
|
"question_priority": null,
|
||||||
|
"next_question": null,
|
||||||
|
"time_limit": "00:22:00"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Передаваемые параметры объекта вопроса:
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Параметры
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Значение
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
id
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
ID вопроса(int)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
question_type_id
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
ID типа вопроса(int)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
question_body
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Вопрос(string)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
question_priority
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Приоритет вопроса(int)(не используется)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
next_question
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Следующий вопрос(int)(не используется)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
time_limit
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Ограничение времени на ответ(time)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<p>
|
||||||
|
Если вопрос не найден или не предпологает передачу ответов будет отправлено следующее сообщение:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
```json5
|
||||||
|
{
|
||||||
|
"name": "Not Found",
|
||||||
|
"message": "Questions not found",
|
||||||
|
"code": 0,
|
||||||
|
"status": 404,
|
||||||
|
"type": "yii\\web\\NotFoundHttpException"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Ответы на вопрос
|
||||||
|
|
||||||
|
`https://guild.craft-group.xyz/api/answer/get-answers`
|
||||||
|
<p>
|
||||||
|
Для получения вариантов ответов на вопрос анкеты нужно сделать <b>GET</b> запрос на URL https://guild.craft-group.xyz/api/answer/get-answers
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Требуемые параметры:
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Параметры
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Значение
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
question_id
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
ID вопроса
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
</table>
|
||||||
|
<p>
|
||||||
|
Пример запроса:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
`https://guild.craft-group.xyz/api/answer/get-answers?question_id=7`
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Возвращает <b>массив</b> объектов <b>Ответов</b>. <br>
|
||||||
|
Каждый объект <b>Ответа</b> имеет такой вид:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
```json5
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"id": "12",
|
||||||
|
"question_id": "7",
|
||||||
|
"answer_body": "Неск вар1 отв1 истина"
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Передаваемые параметры объекта вопроса:
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Параметры
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Значение
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
id
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
ID вопроса(int)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
question_id
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
ID вопроса(int)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
answer_body
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Ответ(string)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
</table>
|
||||||
|
<p>
|
||||||
|
Если ответы не найдены или вопрос не предпологает их наличие(открытый вопрос) будет отправлено следующее сообщение:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
```json5
|
||||||
|
{
|
||||||
|
"name": "Not Found",
|
||||||
|
"message": "Answer not found or question inactive",
|
||||||
|
"code": 0,
|
||||||
|
"status": 404,
|
||||||
|
"type": "yii\\web\\NotFoundHttpException"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Один ответ пользователя
|
||||||
|
|
||||||
|
`https://guild.craft-group.xyz/api/user-response/set-response`
|
||||||
|
<p>
|
||||||
|
Для добавления ответа на вопрос от пользователя необходимо сделать <b>POST</b> запрос на URL https://guild.craft-group.xyz/api/user-response/set-response
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Тело запроса содержит:
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Параметры
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Значение
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
user_id
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
ID пользователя
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
question_id
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
ID вопроса(int)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
response_body
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Ответ пользователя(string 255)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
user_questionnaire_uuid
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
UUID анкеты назначенной пользователю(string 36)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<p>
|
||||||
|
Пример тела запроса:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
```json5
|
||||||
|
{
|
||||||
|
"user_id": "1",
|
||||||
|
"question_id": "7",
|
||||||
|
"response_body": "oooooooooooo111111111",
|
||||||
|
"user_questionnaire_uuid": "d222f858-60fd-47fb-8731-dc9d5fc384c5"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
`https://guild.craft-group.xyz/api/user-response/set-response`
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Возвращает объект <b>Ответа</b>. <br>
|
||||||
|
Объект <b>Ответа</b> имеет такой вид:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
```json5
|
||||||
|
{
|
||||||
|
"user_id": "1",
|
||||||
|
"question_id": "7",
|
||||||
|
"response_body": "oooooooooooo111111111",
|
||||||
|
"user_questionnaire_uuid": "d222f858-60fd-47fb-8731-dc9d5fc384c5",
|
||||||
|
"created_at": {
|
||||||
|
"expression": "NOW()",
|
||||||
|
"params": []
|
||||||
|
},
|
||||||
|
"updated_at": {
|
||||||
|
"expression": "NOW()",
|
||||||
|
"params": []
|
||||||
|
},
|
||||||
|
"id": 191,
|
||||||
|
"answer_flag": 0
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Ответ содержит:
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Параметры
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Значение
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
user_id
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
ID пользователя
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
question_id
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
ID вопроса(int)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
response_body
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Ответ пользователя(string 255)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
user_questionnaire_uuid
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
UUID анкеты назначенной пользователю(string 36)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
answer_flag
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Флаг ответа(1 - верно, 0 - ложно). Если отправлен ответ на открытый вопрос, флаг ответа не будет возвращаться до момента проверки в админ панели.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
В случаии ошибки в запросе будет отправлено сообщение следующего вида:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
```json5
|
||||||
|
{
|
||||||
|
"name": "Bad Request",
|
||||||
|
"message": "{\"question_id\":[\"\В\о\п\р\о\с is invalid.\"]}",
|
||||||
|
"code": 0,
|
||||||
|
"status": 400,
|
||||||
|
"type": "yii\\web\\BadRequestHttpException"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Массив ответов пользователя
|
||||||
|
|
||||||
|
`https://guild.craft-group.xyz/api/user-response/set-responses`
|
||||||
|
<p>
|
||||||
|
Для добавления массива ответов на вопросы от пользователя необходимо сделать <b>POST</b> запрос на URL https://guild.craft-group.xyz/api/user-response/set-responses
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Тело запроса содержит JSON c массивом ответов со следующими параметрами:
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Параметры
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Значение
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
user_id
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
ID пользователя
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
question_id
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
ID вопроса(int)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
response_body
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Ответ пользователя(string 255)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
user_questionnaire_uuid
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
UUID анкеты назначенной пользователю(string 36)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<p>
|
||||||
|
Пример тела запроса:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
```json5
|
||||||
|
{
|
||||||
|
"userResponses": [
|
||||||
|
{
|
||||||
|
"user_id": "1",
|
||||||
|
"question_id": "7",
|
||||||
|
"response_body": "oooooooooooo111111111",
|
||||||
|
"user_questionnaire_uuid": "d222f858-60fd-47fb-8731-dc9d5fc384c5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"user_id": "1",
|
||||||
|
"question_id": "4",
|
||||||
|
"response_body": "oooooooooooo2222222",
|
||||||
|
"user_questionnaire_uuid": "d222f858-60fd-47fb-8731-dc9d5fc384c5"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Возвращает массив объектов <b>ОтветПользователя</b>. <br>
|
||||||
|
Пример:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
```json5
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"user_id": "1",
|
||||||
|
"question_id": "7",
|
||||||
|
"response_body": "oooooooooooo111111111",
|
||||||
|
"user_questionnaire_uuid": "d222f858-60fd-47fb-8731-dc9d5fc384c5",
|
||||||
|
"created_at": {
|
||||||
|
"expression": "NOW()",
|
||||||
|
"params": []
|
||||||
|
},
|
||||||
|
"updated_at": {
|
||||||
|
"expression": "NOW()",
|
||||||
|
"params": []
|
||||||
|
},
|
||||||
|
"id": 192,
|
||||||
|
"answer_flag": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"user_id": "1",
|
||||||
|
"question_id": "7",
|
||||||
|
"response_body": "oooooooooooo111111111",
|
||||||
|
"user_questionnaire_uuid": "d222f858-60fd-47fb-8731-dc9d5fc384c5",
|
||||||
|
"created_at": {
|
||||||
|
"expression": "NOW()",
|
||||||
|
"params": []
|
||||||
|
},
|
||||||
|
"updated_at": {
|
||||||
|
"expression": "NOW()",
|
||||||
|
"params": []
|
||||||
|
},
|
||||||
|
"id": 193,
|
||||||
|
"answer_flag": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Ответ содержит:
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Параметры
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Значение
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
user_id
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
ID пользователя
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
question_id
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
ID вопроса(int)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
response_body
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Ответ пользователя(string 255)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
user_questionnaire_uuid
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
UUID анкеты назначенной пользователю(string 36)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
answer_flag
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Флаг ответа(1 - верно, 0 - ложно)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<p>
|
||||||
|
В случаии ошибки в запросе будет отправлено сообщение следующего вида:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
```json5
|
||||||
|
{
|
||||||
|
"name": "Bad Request",
|
||||||
|
"message": "{\"question_id\":[\"\В\о\п\р\о\с is invalid.\"]}",
|
||||||
|
"code": 0,
|
||||||
|
"status": 400,
|
||||||
|
"type": "yii\\web\\BadRequestHttpException"
|
||||||
|
}
|
||||||
|
```
|
434
docs/api/reports.md
Normal file
434
docs/api/reports.md
Normal file
@ -0,0 +1,434 @@
|
|||||||
|
## Отчеты
|
||||||
|
## Методы
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Метод
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Описание
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
api/reports
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Список отчётов
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
api/reports/{id}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Один отчёт
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
find-by-date
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Отчёт по дате
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
create
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Создать отчёт
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
delete
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Удалить отчёт
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
update
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Изменить отчёт
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
### Список
|
||||||
|
`https://guild.craft-group.xyz/api/reports`
|
||||||
|
<p>
|
||||||
|
Для получения списка отчетов необходимо отправить <b>GET</b> запрос на URL https://guild.craft-group.xyz/api/reports
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Возможные параметры:
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Параметры
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Значение
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
fromDate*
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Дата (yyyy-mm-dd) начала поиска отчетов.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
toDate
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Дата (yyyy-mm-dd) окончания поиска отчетов.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
limit
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Количество отчетов, которое вернет сервер при запросе (по умолчанию 10).
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
offset
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Количество записей на которое нужно отступить в списке отчетов.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
user_id
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Идентификатор карточки пользователя отчета.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<p>
|
||||||
|
Пример запроса:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
`https://guild.craft-group.xyz/api/reports/index?fromDate=2021-08-01&toDate=2021-08-31&user_id=2&limit=3&offset=2`
|
||||||
|
|
||||||
|
### Один отчет
|
||||||
|
`https://guild.craft-group.xyz/api/reports/{id}`
|
||||||
|
<p>
|
||||||
|
Для получения отчета необходимо отправить <b>GET</b> запрос на URL https://guild.craft-group.xyz/api/reports/{id}
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Параметры:
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Параметры
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Значение
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
id*
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
ID отчета.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<p>
|
||||||
|
Пример запроса на просмотр отчета с ID 13:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
`https://guild.craft-group.xyz/api/reports/13`
|
||||||
|
|
||||||
|
### Отчёт по дате
|
||||||
|
`https://guild.craft-group.xyz/api/reports/find-by-date`
|
||||||
|
<p>
|
||||||
|
Для получения отчета необходимо отправить <b>GET</b> запрос на URL https://guild.craft-group.xyz/api/reports/find-by-date
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Требуемые параметры:
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Параметры
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Значение
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
user_card_id*
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
ID профиля пользователя
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
date*
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Дата в формате: Y-m-d
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<p>
|
||||||
|
Пример запроса :
|
||||||
|
</p>
|
||||||
|
|
||||||
|
`https://guild.craft-group.xyz/api/reports/find-by-date?user_card_id=17&date=2022-02-14`
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Пример ответа:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
```json5
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"id": "1",
|
||||||
|
"created_at": "2022-02-14",
|
||||||
|
"today": null,
|
||||||
|
"difficulties": "",
|
||||||
|
"tomorrow": "",
|
||||||
|
"status": null,
|
||||||
|
"user_card_id": "17",
|
||||||
|
"task": [
|
||||||
|
{
|
||||||
|
"id": "1",
|
||||||
|
"report_id": "1",
|
||||||
|
"task": "dfghjkl",
|
||||||
|
"hours_spent": "2",
|
||||||
|
"created_at": "1644842433",
|
||||||
|
"status": "1",
|
||||||
|
"minutes_spent": "4"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "2",
|
||||||
|
"created_at": "2022-02-14",
|
||||||
|
"today": "dxvxv",
|
||||||
|
"difficulties": "сложности возникли",
|
||||||
|
"tomorrow": "завтра",
|
||||||
|
"status": null,
|
||||||
|
"user_card_id": "17",
|
||||||
|
"task": [
|
||||||
|
{
|
||||||
|
"id": "2",
|
||||||
|
"report_id": "2",
|
||||||
|
"task": "54651513",
|
||||||
|
"hours_spent": "4",
|
||||||
|
"created_at": "1644842630",
|
||||||
|
"status": "1",
|
||||||
|
"minutes_spent": "2"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Создать отчет
|
||||||
|
`https://guild.craft-group.xyz/api/reports/create`
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Для того, отправить приглашение профилю на собеседование, необходимо сделать
|
||||||
|
<b>POST</b> запрос на URL https://guild.craft-group.xyz/api/reports/create
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Возможные параметры:
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Параметры
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Значение
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
created_at*
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Дата (yyyy-mm-dd) создания.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
user_card_id*
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Идентификатор карточки пользователя.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
tasks*
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
JSON массив содержащий объекты задач
|
||||||
|
<pre>
|
||||||
|
[{
|
||||||
|
"task" : "Рефакторинг",
|
||||||
|
"created_at": 1638260728,
|
||||||
|
"status": 1,
|
||||||
|
"minutes_spent": 26,
|
||||||
|
"hours_spent" : 3
|
||||||
|
}]
|
||||||
|
</pre>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
difficulties
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Сложности.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
tomorrow
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Планы на завтра.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
status
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Номер статуса.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
### Удалить отчет
|
||||||
|
`https://guild.craft-group.xyz/api/reports/delete`
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Для удаления отчета необходимо отправить <b>GET</b> запрос на URL https://guild.craft-group.xyz/api/reports/delete
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Возможные параметры:
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Параметры
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Значение
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
id*
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Идентификатор отчета.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<p>
|
||||||
|
Пример запроса:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
`https://guild.craft-group.xyz/api/reports/delete?id=17`
|
||||||
|
### Обновить отчет
|
||||||
|
|
||||||
|
`https://guild.craft-group.xyz/api/reports/update`
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Для удаления отчета необходимо отправить <b>GET</b> запрос на URL https://guild.craft-group.xyz/api/reports/update
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Возможные параметры:
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Параметры
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Значение
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
id*
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Идентификатор отчета.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
created_at
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Дата (yyyy-mm-dd) создания.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
today
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Сделанное сегодня.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
difficulties
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Сложности.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
tomorrow
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Планы на завтра.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
status
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Номер статуса.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<p>
|
||||||
|
Пример запроса:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
`https://guild.craft-group.xyz/api/reports/update?id=18&created_at=2021-09-17&today=0&difficulties=diff&tomorrow=new task&status=1`
|
6
docs/api/skills.md
Normal file
6
docs/api/skills.md
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
## Навыки
|
||||||
|
### Популярные навыки
|
||||||
|
`https://guild.craft-group.xyz/api/skills/skills-on-main-page`
|
||||||
|
<p>
|
||||||
|
Чтобы получить популярные навыки нужно сделать <b>GET</b> запрос на URL https://guild.craft-group.xyz/api/skills/skills-on-main-page
|
||||||
|
</p>
|
200
docs/api/task-user.md
Normal file
200
docs/api/task-user.md
Normal file
@ -0,0 +1,200 @@
|
|||||||
|
## Исполнители задачи
|
||||||
|
## Методы
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Метод
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Описание
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
get-task-users
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Список исплнителей задачи
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
set-task-users
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Назначить исполнителя на задачу
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
### Список исполнителей задачи
|
||||||
|
`https://guild.craft-group.xyz/api/task-user/get-task-users`
|
||||||
|
<p>
|
||||||
|
Для получения списка исполнителей необходимо отправить <b>GET</b> запрос на URL https://guild.craft-group.xyz/api/task-user/get-task-users
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Требуемые параметры:
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Параметры
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Значение
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
task_id
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
ID задачи
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Пример запроса:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
`https://guild.craft-group.xyz/api/task-user/get-task-users?task_id=10`
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Возвращает массив сотрудников проекта закреплённых за задачей. <br>
|
||||||
|
Каждый ответ имеет такой вид:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
```json5
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"id": 5,
|
||||||
|
"task_id": 10,
|
||||||
|
"project_user_id": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 7,
|
||||||
|
"task_id": 10,
|
||||||
|
"project_user_id": 5
|
||||||
|
}
|
||||||
|
]
|
||||||
|
```
|
||||||
|
<p>
|
||||||
|
Параметры объекта <b>Исполнитель</b>:
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Параметры
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Значение
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
id
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
ID исполнителя задачи(int)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
task_id
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
ID задачи(int)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
project_user_id
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
ID сотрудника на проекте(int)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<p>
|
||||||
|
Если задача не найдена будет отправлено следующее сообщение:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
```json5
|
||||||
|
{
|
||||||
|
"name": "Not Found",
|
||||||
|
"message": "The task does not exist or there are no employees for it",
|
||||||
|
"code": 0,
|
||||||
|
"status": 404,
|
||||||
|
"type": "yii\\web\\NotFoundHttpException"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
### Назначить сотрудника на задачу
|
||||||
|
`https://guild.craft-group.xyz/api/task-user/set-task-users`
|
||||||
|
<p>
|
||||||
|
Для назначения исполнителя необходимо отправить <b>POST</b> запрос на URL https://guild.craft-group.xyz/api/task-user/set-task-user
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Требуемые параметры:
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Параметры
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Значение
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
task_id
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
ID задачи
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
project_user_id
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
ID сотрудника на проекте
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Пример запроса:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
`https://guild.craft-group.xyz/api/task-user/set-task-user`
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Возвращает объект <b>Исполнителя задачи</b>.<br>
|
||||||
|
Каждый ответ имеет такой вид:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
```json5
|
||||||
|
{
|
||||||
|
"task_id": "10",
|
||||||
|
"project_user_id": "5",
|
||||||
|
"id": 8
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Если задача не найдена будет отправлено следующее сообщение:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
```json5
|
||||||
|
{
|
||||||
|
"name": "Bad Request",
|
||||||
|
"message": "{\"task_id\":[\"\З\а\д\а\ч\а is invalid.\"]}",
|
||||||
|
"code": 0,
|
||||||
|
"status": 400,
|
||||||
|
"type": "yii\\web\\BadRequestHttpException"
|
||||||
|
}
|
||||||
|
```
|
@ -236,7 +236,7 @@
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Обновить документ
|
## Обновить задачу
|
||||||
|
|
||||||
`https://guild.craft-group.xyz/api/task/update`
|
`https://guild.craft-group.xyz/api/task/update`
|
||||||
<p>
|
<p>
|
||||||
|
@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace frontend\modules\api\controllers;
|
||||||
|
|
||||||
|
use common\models\InterviewRequest;
|
||||||
|
use common\services\InterviewRequestService;
|
||||||
|
use Yii;
|
||||||
|
use yii\base\InvalidConfigException;
|
||||||
|
use yii\web\ServerErrorHttpException;
|
||||||
|
|
||||||
|
|
||||||
|
class InterviewRequestController extends ApiController
|
||||||
|
{
|
||||||
|
public function verbs(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'create-interview-request' => ['post']
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws InvalidConfigException
|
||||||
|
* @throws ServerErrorHttpException
|
||||||
|
*/
|
||||||
|
public function actionCreateInterviewRequest(): InterviewRequest
|
||||||
|
{
|
||||||
|
$InterviewRequestModel = InterviewRequestService::createInterviewRequest(Yii::$app->getRequest()->getBodyParams());
|
||||||
|
if ($InterviewRequestModel->errors) {
|
||||||
|
throw new ServerErrorHttpException(json_encode($InterviewRequestModel->errors));
|
||||||
|
}
|
||||||
|
return $InterviewRequestModel;
|
||||||
|
}
|
||||||
|
}
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
namespace frontend\modules\api\controllers;
|
namespace frontend\modules\api\controllers;
|
||||||
|
|
||||||
|
|
||||||
use common\services\ManagerService;
|
use common\services\ManagerService;
|
||||||
use yii\web\NotFoundHttpException;
|
use yii\web\NotFoundHttpException;
|
||||||
|
|
||||||
@ -24,7 +23,7 @@ class ManagerController extends ApiController
|
|||||||
{
|
{
|
||||||
$managers = ManagerService::getManagerList();
|
$managers = ManagerService::getManagerList();
|
||||||
|
|
||||||
if(empty($managers)) {
|
if (empty($managers)) {
|
||||||
throw new NotFoundHttpException('Managers are not assigned');
|
throw new NotFoundHttpException('Managers are not assigned');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -36,14 +35,13 @@ class ManagerController extends ApiController
|
|||||||
*/
|
*/
|
||||||
public function actionGetManagerEmployeesList($manager_id): array
|
public function actionGetManagerEmployeesList($manager_id): array
|
||||||
{
|
{
|
||||||
if(empty($manager_id) or !is_numeric($manager_id))
|
if (empty($manager_id) or !is_numeric($manager_id)) {
|
||||||
{
|
|
||||||
throw new NotFoundHttpException('Incorrect manager ID');
|
throw new NotFoundHttpException('Incorrect manager ID');
|
||||||
}
|
}
|
||||||
|
|
||||||
$managerEmployeesList = ManagerService::getManagerEmployeesList($manager_id);
|
$managerEmployeesList = ManagerService::getManagerEmployeesList($manager_id);
|
||||||
|
|
||||||
if(empty($managerEmployeesList)) {
|
if (empty($managerEmployeesList)) {
|
||||||
throw new NotFoundHttpException('Managers are not assigned or employees are not assigned to him');
|
throw new NotFoundHttpException('Managers are not assigned or employees are not assigned to him');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -55,14 +53,13 @@ class ManagerController extends ApiController
|
|||||||
*/
|
*/
|
||||||
public function actionGetManager($manager_id): array
|
public function actionGetManager($manager_id): array
|
||||||
{
|
{
|
||||||
if(empty($manager_id) or !is_numeric($manager_id))
|
if (empty($manager_id) or !is_numeric($manager_id)) {
|
||||||
{
|
|
||||||
throw new NotFoundHttpException('Incorrect manager ID');
|
throw new NotFoundHttpException('Incorrect manager ID');
|
||||||
}
|
}
|
||||||
|
|
||||||
$manager = ManagerService::getManager($manager_id);
|
$manager = ManagerService::getManager($manager_id);
|
||||||
|
|
||||||
if(empty($manager)) {
|
if (empty($manager)) {
|
||||||
throw new NotFoundHttpException('There is no such manager');
|
throw new NotFoundHttpException('There is no such manager');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,117 +2,38 @@
|
|||||||
|
|
||||||
namespace frontend\modules\api\controllers;
|
namespace frontend\modules\api\controllers;
|
||||||
|
|
||||||
use common\behaviors\GsCors;
|
|
||||||
use common\classes\Debug;
|
|
||||||
use common\models\InterviewRequest;
|
|
||||||
use common\models\User;
|
|
||||||
use common\models\UserCard;
|
|
||||||
use common\services\ProfileService;
|
use common\services\ProfileService;
|
||||||
use frontend\modules\api\models\ProfileSearchForm;
|
|
||||||
use kavalar\BotNotificationTemplateProcessor;
|
|
||||||
use kavalar\TelegramBotService;
|
|
||||||
use Yii;
|
|
||||||
use yii\filters\auth\CompositeAuth;
|
|
||||||
use yii\filters\auth\HttpBearerAuth;
|
|
||||||
use yii\filters\auth\QueryParamAuth;
|
|
||||||
use yii\filters\ContentNegotiator;
|
|
||||||
use yii\helpers\ArrayHelper;
|
|
||||||
use yii\web\BadRequestHttpException;
|
use yii\web\BadRequestHttpException;
|
||||||
use yii\web\Response;
|
use yii\web\ServerErrorHttpException;
|
||||||
|
|
||||||
|
|
||||||
class ProfileController extends ApiController
|
class ProfileController extends ApiController
|
||||||
{
|
{
|
||||||
|
public function verbs(): array
|
||||||
public function behaviors()
|
|
||||||
{
|
{
|
||||||
$parent = parent::behaviors();
|
return [
|
||||||
$b = [
|
'' => ['get'],
|
||||||
[
|
'profile-with-report-permission' => ['post', 'patch']
|
||||||
'class' => ContentNegotiator::className(),
|
|
||||||
'formats' => [
|
|
||||||
'application/json' => Response::FORMAT_JSON,
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'authenticator' => [
|
|
||||||
'class' => CompositeAuth::class,
|
|
||||||
'authMethods' => [
|
|
||||||
HttpBearerAuth::class,
|
|
||||||
],
|
|
||||||
]
|
|
||||||
];
|
];
|
||||||
|
|
||||||
return array_merge($parent, $b);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function actionIndex($id = null)
|
public function actionIndex($id = null): ?array
|
||||||
{
|
{
|
||||||
$searchModel = new ProfileSearchForm();
|
return ProfileService::getProfile($id, \Yii::$app->request->get());
|
||||||
$searchModel->attributes = \Yii::$app->request->get();
|
|
||||||
|
|
||||||
if ($id) {
|
|
||||||
return $searchModel->byId();
|
|
||||||
}
|
|
||||||
|
|
||||||
return $searchModel->byParams();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function actionProfileWithReportPermission($id)
|
/**
|
||||||
|
* @throws BadRequestHttpException
|
||||||
|
*/
|
||||||
|
public function actionProfileWithReportPermission($id): ?array
|
||||||
{
|
{
|
||||||
$searchModel = new ProfileSearchForm();
|
return ProfileService::getProfileWithReportPermission($id);
|
||||||
$searchModel->attributes = \Yii::$app->request->get();
|
|
||||||
|
|
||||||
$searcherUser = Yii::$app->user->getId();
|
|
||||||
$searcherProfileId = UserCard::findOne($searcherUser)->id;
|
|
||||||
|
|
||||||
if ($id && $searcherProfileId) {
|
|
||||||
if(!UserCard::find()->where(['id' => $id])->exists())
|
|
||||||
{
|
|
||||||
throw new BadRequestHttpException(json_encode('There is no user with this id'));
|
|
||||||
}
|
|
||||||
$profile = $searchModel->byId();
|
|
||||||
|
|
||||||
$profileService = new ProfileService($searcherProfileId, $id);
|
|
||||||
|
|
||||||
if($profileService->checkReportePermission()) {
|
|
||||||
$profile += ['report_permission' => '1'];
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$profile += ['report_permission' => '0'];
|
|
||||||
}
|
|
||||||
return $profile;
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new BadRequestHttpException(json_encode('Missing required parameter'));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function actionAddToInterview()
|
/**
|
||||||
|
* @throws ServerErrorHttpException
|
||||||
|
*/
|
||||||
|
public function actionGetMainData($user_id): array
|
||||||
{
|
{
|
||||||
if (\Yii::$app->request->isPost) {
|
return ProfileService::getMainData($user_id);
|
||||||
$attributes = \Yii::$app->request->post();
|
|
||||||
|
|
||||||
$model = new InterviewRequest();
|
|
||||||
$model->attributes = $attributes;
|
|
||||||
$model->created_at = time();
|
|
||||||
$model->user_id = \Yii::$app->user->id;
|
|
||||||
if ($model->save()) {
|
|
||||||
\Yii::$app->telegram_bot->sendRenderedMessage('interview_request', $attributes);
|
|
||||||
return ['status' => 'success'];
|
|
||||||
}
|
|
||||||
|
|
||||||
\Yii::$app->response->statusCode = 400;
|
|
||||||
return ['status' => 'error', 'errors' => $model->errors];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
public function actionMe()
|
|
||||||
{
|
|
||||||
if(isset(\Yii::$app->user->id)){
|
|
||||||
$user = User::find()->with('userCard')->where(['id' => \Yii::$app->user->id])->one();
|
|
||||||
}
|
|
||||||
|
|
||||||
\Yii::$app->response->statusCode = 401;
|
|
||||||
return ['status' => 'error', 'errors' => 'No authorized'];
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -31,7 +31,6 @@ class TaskController extends ApiController
|
|||||||
if ($taskModel->errors) {
|
if ($taskModel->errors) {
|
||||||
throw new ServerErrorHttpException(json_encode($taskModel->errors));
|
throw new ServerErrorHttpException(json_encode($taskModel->errors));
|
||||||
}
|
}
|
||||||
|
|
||||||
return $taskModel;
|
return $taskModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -39,23 +38,19 @@ class TaskController extends ApiController
|
|||||||
/**
|
/**
|
||||||
* @throws NotFoundHttpException
|
* @throws NotFoundHttpException
|
||||||
*/
|
*/
|
||||||
public function actionGetTaskList($project_id = null): array
|
public function actionGetTaskList($project_id = null): array
|
||||||
{
|
{
|
||||||
$tasks = array();
|
$tasks = array();
|
||||||
if ($project_id)
|
if ($project_id) {
|
||||||
{
|
if (empty($project_id) or !is_numeric($project_id)) {
|
||||||
if(empty($project_id) or !is_numeric($project_id))
|
|
||||||
{
|
|
||||||
throw new NotFoundHttpException('Incorrect project ID');
|
throw new NotFoundHttpException('Incorrect project ID');
|
||||||
}
|
}
|
||||||
$tasks = TaskService::getTaskListByProject($project_id);
|
$tasks = TaskService::getTaskListByProject($project_id);
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
$tasks = TaskService::getTaskList($project_id);
|
$tasks = TaskService::getTaskList($project_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(empty($tasks)) {
|
if (empty($tasks)) {
|
||||||
throw new NotFoundHttpException('The project does not exist or there are no tasks for it');
|
throw new NotFoundHttpException('The project does not exist or there are no tasks for it');
|
||||||
}
|
}
|
||||||
return $tasks;
|
return $tasks;
|
||||||
@ -66,13 +61,12 @@ class TaskController extends ApiController
|
|||||||
*/
|
*/
|
||||||
public function actionGetTask($task_id): Task
|
public function actionGetTask($task_id): Task
|
||||||
{
|
{
|
||||||
if(empty($task_id) or !is_numeric($task_id))
|
if (empty($task_id) or !is_numeric($task_id)) {
|
||||||
{
|
|
||||||
throw new NotFoundHttpException('Incorrect task ID');
|
throw new NotFoundHttpException('Incorrect task ID');
|
||||||
}
|
}
|
||||||
|
|
||||||
$task = TaskService::getTask($task_id);
|
$task = TaskService::getTask($task_id);
|
||||||
if(empty($task)) {
|
if (empty($task)) {
|
||||||
throw new NotFoundHttpException('The task does not exist');
|
throw new NotFoundHttpException('The task does not exist');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,8 +81,7 @@ class TaskController extends ApiController
|
|||||||
public function actionUpdate(): ?Task
|
public function actionUpdate(): ?Task
|
||||||
{
|
{
|
||||||
$params = Yii::$app->request->getBodyParams();
|
$params = Yii::$app->request->getBodyParams();
|
||||||
if (empty ($params['task_id']) or !TaskService::taskExists($params['task_id']))
|
if (empty ($params['task_id']) or !TaskService::taskExists($params['task_id'])) {
|
||||||
{
|
|
||||||
throw new NotFoundHttpException('The task does not exist');
|
throw new NotFoundHttpException('The task does not exist');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,19 +9,8 @@ use yii\rest\Controller;
|
|||||||
use yii\web\BadRequestHttpException;
|
use yii\web\BadRequestHttpException;
|
||||||
use yii\web\NotFoundHttpException;
|
use yii\web\NotFoundHttpException;
|
||||||
|
|
||||||
class TaskUserController extends Controller
|
class TaskUserController extends ApiController
|
||||||
{
|
{
|
||||||
public function behaviors(): array
|
|
||||||
{
|
|
||||||
$behaviors = parent::behaviors();
|
|
||||||
|
|
||||||
$behaviors['authenticator']['authMethods'] = [
|
|
||||||
HttpBearerAuth::className(),
|
|
||||||
];
|
|
||||||
|
|
||||||
return $behaviors;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function verbs(): array
|
public function verbs(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
|
@ -1,24 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace frontend\modules\api\controllers;
|
|
||||||
|
|
||||||
use common\services\UserCardService;
|
|
||||||
use yii\web\ServerErrorHttpException;
|
|
||||||
|
|
||||||
class UserCardController extends ApiController
|
|
||||||
{
|
|
||||||
public function verbs(): array
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
'get-user-card' => ['get'],
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @throws ServerErrorHttpException
|
|
||||||
*/
|
|
||||||
public function actionGetUserCard($user_id): array
|
|
||||||
{
|
|
||||||
return UserCardService::getUserCard($user_id);
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user