# Документация API ## Навыки ### Популярные навыки `https://guild.craft-group.xyz/api/skills/skills-on-main-page`

Чтобы получить популярные навыки нужно сделать GET запрос на URL https://guild.craft-group.xyz/api/skills/skills-on-main-page

## Отчет ### Список `https://guild.craft-group.xyz/api/reports`

Для получения списка отчетов необходимо отправить GET запрос на URL https://guild.craft-group.xyz/api/reports

Возможные параметры:

Параметры Значение
fromDate* Дата (yyyy-mm-dd) начала поиска отчетов.
toDate Дата (yyyy-mm-dd) окончания поиска отчетов.
limit Количество отчетов, которое вернет сервер при запросе (по умолчанию 10).
offset Количество записей на которое нужно отступить в списке отчетов.
user_id Идентификатор карточки пользователя отчета.

Пример запроса:

`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}`

Для получения отчета необходимо отправить GET запрос на URL https://guild.craft-group.xyz/api/reports/{id}

Параметры:

Параметры Значение
id* ID отчета.

Пример запроса на просмотр отчета с ID 13:

`https://guild.craft-group.xyz/api/reports/13` ### Отчёт по дате `https://guild.craft-group.xyz/api/reports/find-by-date`

Для получения отчета необходимо отправить GET запрос на URL https://guild.craft-group.xyz/api/reports/find-by-date

Требуемые параметры:

Параметры Значение
user_card_id* ID профиля пользователя
date* Дата в формате: Y-m-d

Пример запроса :

`https://guild.craft-group.xyz/api/reports/find-by-date?user_card_id=17&date=2022-02-14`

Пример ответа:

```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`

Для того, отправить приглашение профилю на собеседование, необходимо сделать POST запрос на URL https://guild.craft-group.xyz/api/reports/create

Возможные параметры:

Параметры Значение
created_at* Дата (yyyy-mm-dd) создания.
user_card_id* Идентификатор карточки пользователя.
tasks* JSON массив содержащий объекты задач
[{ 
    "task" : "Рефакторинг",
    "created_at": 1638260728,
    "status": 1,
    "minutes_spent": 26,
    "hours_spent" : 3
}]
difficulties Сложности.
tomorrow Планы на завтра.
status Номер статуса.
### Удалить отчет `https://guild.craft-group.xyz/api/reports/delete`

Для удаления отчета необходимо отправить GET запрос на URL https://guild.craft-group.xyz/api/reports/delete

Возможные параметры:

Параметры Значение
id* Идентификатор отчета.

Пример запроса:

`https://guild.craft-group.xyz/api/reports/delete?id=17` ### Обновить отчет `https://guild.craft-group.xyz/api/reports/update`

Для удаления отчета необходимо отправить GET запрос на URL https://guild.craft-group.xyz/api/reports/update

Возможные параметры:

Параметры Значение
id* Идентификатор отчета.
created_at Дата (yyyy-mm-dd) создания.
today Сделанное сегодня.
difficulties Сложности.
tomorrow Планы на завтра.
status Номер статуса.

Пример запроса:

`https://guild.craft-group.xyz/api/reports/update?id=18&created_at=2021-09-17&today=0&difficulties=diff&tomorrow=new task&status=1` ## Анкеты ###Список анкет `https://guild.craft-group.xyz/api/user-questionnaire/questionnaires-list`

Для получения списка анкет необходимо отправить GET запрос на URL https://guild.craft-group.xyz/api/user-questionnaire/questionnaires-list

Требуемые параметры запроса:

Параметры Значение
user_id ID пользователя(int)

Пример запроса:

`https://guild.craft-group.xyz/api/user-questionnaire/questionnaires-list?user_id=1`

Возвращает массив объектов записи Назначенная анкета.
Каждый объектимеет такой вид:

```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 активна" } ```

Возвращаемые параметры объекта анкета:

Параметры Значение
user_id ID пользователя(int)
uuid uuid анкеты пользователя
score Полученные балы(int)
status Статус: 0 - не активен; 1 - активен; 2 - завершён; 3 - на проверке;
percent_correct_answers Процент правильных ответов(float)
testing_date Дата тестирования
questionnaire_title Название анкеты

Передаваемые параметры объекта вопроса:

Параметры Значение
user_id ID пользователя(int)
score Полученные балы(int)
percent_correct_answers Процент правильных ответов(float)

Если пользователь не найден или у пользователя нет активных анкет будет отправлено следующее сообщение:

```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`

Для выполнения проверки анкеты необходимо отправить GET запрос на URL https://guild.craft-group.xyz/api/user-questionnaire/questionnaire-completed

Требуемые параметры запроса:

Параметры Значение
user_questionnaire_uuid UUID анкеты назначеной пользователю

Пример запроса:

`https://guild.craft-group.xyz/api/user-questionnaire/questionnaire-completed?user_questionnaire_uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5`

Возвращает массив объектов Вопросов.
Каждый объект Вопрос имеет такой вид:

```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`

Для максимального числа балов в анкеты необходимо отправить GET запрос на URL https://guild.craft-group.xyz/api/user-questionnaire/get-points-number

Требуемые параметры запроса:

Параметры Значение
user_questionnaire_uuid UUID анкеты назначеной пользователю

Пример запроса:

`https://guild.craft-group.xyz/api/user-questionnaire/get-points-number?user_questionnaire_uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5`

Возвращает максимально возможное число балов за анкету b>.
Объект Ответа имеет такой вид:

```json5 { "sum_point": "61" } ``` ### Число вопросов в анкете `https://guild.craft-group.xyz/api/user-questionnaire/get-question-number?user_questionnaire_uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5`

Для числа вопросов в анкете необходимо отправить GET запрос на URL https://guild.craft-group.xyz/api/user-questionnaire/get-question-number

Требуемые параметры запроса:

Параметры Значение
user_questionnaire_uuid UUID анкеты назначеной пользователю

Пример запроса:

`https://guild.craft-group.xyz/api/user-questionnaire/get-question-number?user_questionnaire_uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5`

Возвращает число вопросов в анкете b>.
Объект Ответа имеет такой вид:

```json5 { "question_number": "7" } ``` ### Вопросы анкеты `https://guild.craft-group.xyz/api/question/get-questions`

Для получения вопросов анкеты необходимо отправить GET запрос на URL https://guild.craft-group.xyz/api/question/get-questions

Требуемые параметры запроса:

Параметры Значение
uuid UUID анкеты назначеной пользователю

Пример запроса:

`https://guild.craft-group.xyz/api/question/get-questions?uuid=d222f858-60fd-47fb-8731-dc9d5fc384c5`

Возвращает массив объектов Вопросов.
Каждый объект Вопрос имеет такой вид:

```json5 { "id": "4", "question_type_id": "2", "question_body": "Один ответ1", "question_priority": null, "next_question": null, "time_limit": "00:22:00" } ```

Передаваемые параметры объекта вопроса:

Параметры Значение
id ID вопроса(int)
question_type_id ID типа вопроса(int)
question_body Вопрос(string)
question_priority Приоритет вопроса(int)(не используется)
next_question Следующий вопрос(int)(не используется)
time_limit Ограничение времени на ответ(time)

Если вопрос не найден или не предпологает передачу ответов будет отправлено следующее сообщение:

```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`

Для получения вариантов ответов на вопрос анкеты нужно сделать GET запрос на URL https://guild.craft-group.xyz/api/answer/get-answers

Требуемые параметры:

Параметры Значение
question_id ID вопроса

Пример запроса:

`https://guild.craft-group.xyz/api/answer/get-answers?question_id=7`

Возвращает массив объектов Ответов.
Каждый объект Ответа имеет такой вид:

```json5 [ { "id": "12", "question_id": "7", "answer_body": "Неск вар1 отв1 истина" }, ] ```

Передаваемые параметры объекта вопроса:

Параметры Значение
id ID вопроса(int)
question_id ID вопроса(int)
answer_body Ответ(string)

Если ответы не найдены или вопрос не предпологает их наличие(открытый вопрос) будет отправлено следующее сообщение:

```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`

Для добавления ответа на вопрос от пользователя необходимо сделать POST запрос на URL https://guild.craft-group.xyz/api/user-response/set-response

Тело запроса содержит:

Параметры Значение
user_id ID пользователя
question_id ID вопроса(int)
response_body Ответ пользователя(string 255)
user_questionnaire_uuid UUID анкеты назначенной пользователю(string 36)

Пример тела запроса:

```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`

Возвращает объект Ответа.
Объект Ответа имеет такой вид:

```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 } ```

Ответ содержит:

Параметры Значение
user_id ID пользователя
question_id ID вопроса(int)
response_body Ответ пользователя(string 255)
user_questionnaire_uuid UUID анкеты назначенной пользователю(string 36)
answer_flag Флаг ответа(1 - верно, 0 - ложно). Если отправлен ответ на открытый вопрос, флаг ответа не будет возвращаться до момента проверки в админ панели.

В случаии ошибки в запросе будет отправлено сообщение следующего вида:

```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`

Для добавления массива ответов на вопросы от пользователя необходимо сделать POST запрос на URL https://guild.craft-group.xyz/api/user-response/set-responses

Тело запроса содержит JSON c массивом ответов со следующими параметрами:

Параметры Значение
user_id ID пользователя
question_id ID вопроса(int)
response_body Ответ пользователя(string 255)
user_questionnaire_uuid UUID анкеты назначенной пользователю(string 36)

Пример тела запроса:

```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" } ] } ```

Возвращает массив объектов ОтветПользователя.
Пример:

```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 } ] ```

Ответ содержит:

Параметры Значение
user_id ID пользователя
question_id ID вопроса(int)
response_body Ответ пользователя(string 255)
user_questionnaire_uuid UUID анкеты назначенной пользователю(string 36)
answer_flag Флаг ответа(1 - верно, 0 - ложно)

В случаии ошибки в запросе будет отправлено сообщение следующего вида:

```json5 { "name": "Bad Request", "message": "{\"question_id\":[\"\В\о\п\р\о\с is invalid.\"]}", "code": 0, "status": 400, "type": "yii\\web\\BadRequestHttpException" } ``` ## Менеджер ### Список менеджеров `https://guild.craft-group.xyz/api/manager/get-manager-list`

Для получения списка менеджеров необходимо отправить GET запрос на URL https://guild.craft-group.xyz/api/manager/get-manager-list

Пример запроса:

`https://guild.craft-group.xyz/api/manager/get-manager?manager_id=1`

Возвращает список объектов Менеджера.
Пример ответа:

```json5 [ { "fio": "testUser", "id": 1, "email": "admin@admin.com" }, { "fio": "workerTest22", "id": 2, "email": "awdsdse@njbhj.com" } ] ```

Передаваемые параметры объекта Менеджер:

Параметры Значение
id ID менеджера(int)
fio ФИО пользователя(varchar(255))
email Почтовый адрес(string)

Если менеджеры не найдены будет отправлено следующее сообщение:

```json5 { "name": "Not Found", "message": "Managers are not assigned", "code": 0, "status": 404, "type": "yii\\web\\NotFoundHttpException" } ``` ### Список работников менеджера `https://guild.craft-group.xyz/api/manager/get-employees-manager`

Для получения списка сотрудников менеджера необходимо отправить GET запрос на URL https://guild.craft-group.xyz/api/manager/get-employees-manager

Требуемые параметры:

Параметры Значение
manager_id ID менеджера

Пример запроса:

`https://guild.craft-group.xyz/api/manager/get-employees-manager?manager_id=3`

Возвращает список объектов Пользователь.
Ответ имеет такой вид:

```json5 [ { "id": 2, "fio": "workerTest", "email": "testUseweewer@testUser.com", }, { "id": 4, "fio": "worker1", "email": "sdfsdvdworker2", }, ] ```

Передаваемые параметры объекта Менеджер:

Параметры Значение
id ID пользователя(работника) у менеджера(int)
fio ФИО сотрудника(varchar(255))
email Почтовый адрес(string)

Если менеджер не найден или у него нет сотрудников будет отправлено следующее сообщение:

```json5 { "name": "Not Found", "message": "Managers are not assigned or employees are not assigned to him", "code": 0, "status": 404, "type": "yii\\web\\NotFoundHttpException" } ``` ### Данные менеджера `https://guild.craft-group.xyz/api/manager/get-manager`

Для получения данных менеджера необходимо отправить GET запрос на URL https://guild.craft-group.xyz/api/manager/get-manager

Требуемые параметры:

Параметры Значение
manager_id ID менеджера

Пример запроса:

`https://guild.craft-group.xyz/api/manager/get-manager?manager_id=1`

Возвращает объект Менеджера.
Каждый объект Менеджер имеет такой вид:

```json5 [ { "id": 5, "fio": "Иванов Иван Иванович", "email": "testmail@mail.com", "photo": "", "gender": 0 } ] ```

Передаваемые параметры объекта Менеджер:

Параметры Значение
id ID пользователя(работника) у менеджера(int)
fio ФИО сотрудника(varchar(255))
email Почтовый адрес(string)

Если менеджер не найден будет отправлено следующее сообщение:

```json5 { "name": "Not Found", "message": "Incorrect manager ID", "code": 0, "status": 404, "type": "yii\\web\\NotFoundHttpException" } ``` ## Задачи ### Задача `https://guild.craft-group.xyz/api/task/get-task`

Для получения данных задачи необходимо отправить GET запрос на URL https://guild.craft-group.xyz/task/get-task

Требуемые параметры:

Параметры Значение
task_id ID менеджера

Пример запроса:

`https://guild.craft-group.xyz/api/task/get-task?task_id=3`

Возвращает объект Задачи.
Каждый объект Задачи имеет такой вид:

```json5 { "id": 14, "project_id": 2, "title": "Пробная 2", "status": 0, "created_at": "2021-12-03 17:22:15", "updated_at": "2021-12-03 17:22:15", "user_id": null, "description": "смасмс", "user_id_creator": 1 } ```

Передаваемые параметры объекта Задача:

Параметры Значение
id ID задачи(int)
project_id ID проекта(int)
title Название задачи(string)
status Статус(int)
created_at Дата создания(string)
updated_at Дата изменения(string)
user_id ID наблюдателя проекта(int)
description Описание задачи(string)
user_id_creator ID создателя задачи(int)

Если задача не найдена будет отправлено следующее сообщение:

```json5 { "name": "Not Found", "message": "The task does not exist", "code": 0, "status": 404, "type": "yii\\web\\NotFoundHttpException" } ``` ### Список задач `https://guild.craft-group.xyz/api/task/get-task-list`

Для получения списка данных задач необходимо отправить GET запрос на URL https://guild.craft-group.xyz/task/get-task-list

Требуемые параметры:

Параметры Значение
project_id ID проекта

Пример запроса:

`https://guild.craft-group.xyz/api/task/get-task-list?project_id=2`

Возвращает массив объектов Задачи.
Каждый объект Задачи имеет такой вид:

```json5 [ { "id": 3, "project_id": 2, "title": "polkjhgbfv task", "status": 1, "created_at": "2021-11-24 11:53:11", "updated_at": "2021-11-24 11:53:11", "user_id_creator": 1, "user_id": null, "description": "dfvdfvfdvfd" }, { "id": 7, "project_id": 2, "title": "polkjhgbfv taskdfsdfsd", "status": 1, "created_at": "2021-11-24 14:55:01", "updated_at": "2021-11-24 14:55:01", "user_id_creator": 1, "user_id": null, "description": "dfvdfvfdvfdsddsfds" } ] ```

Передаваемые параметры объекта Задача:

Параметры Значение
id ID задачи(int)
project_id ID проекта(int)
title Название задачи(string)
status Статус(int)
created_at Дата создания(string)
updated_at Дата изменения(string)
user_id_creator ID создателя задачи(int)
user_id ID наблюдателя(int)
description Описание задачи(string)

Если задачи не найдена будет отправлено следующее сообщение:

```json5 { "name": "Not Found", "message": "The project does not exist or there are no tasks for it", "code": 0, "status": 404, "type": "yii\\web\\NotFoundHttpException" } ``` ### Создать задачу `https://guild.craft-group.xyz/api/task/create-task`

Для создания задачи необходимо отправить POST запрос на URL https://guild.craft-group.xyz/task/create-task

Требуемые параметры:

Параметры Значение
project_id ID проекта(int)
title Название задачи(string)
status Статус(int)
user_id_creator ID сотрудника, создатель задачи(int)
description Описание задачи(string)

Пример запроса:

`http://guild.loc/api/task/create-task`

Возвращает объект Задачи.
Каждый объект Задачи имеет такой вид:

```json5 { "project_id": "2", "title": "polkjhgbfv taskdfsdfsd", "status": "1", "user_id_creator": "1", "description": "dfvdfvfdvfdsddsfds", "created_at": { "expression": "NOW()", "params": [] }, "updated_at": { "expression": "NOW()", "params": [] }, "id": 12 } ```

Если требуемый параметр задачи не будет получен, будет отправлено сообщение следующего вида:

```json5 { "name": "Bad Request", "message": "{\"user_id_creator\":[\"\С\о\з\д\а\т\е\л\ь cannot be blank.\"]}", "code": 0, "status": 400, "type": "yii\\web\\BadRequestHttpException" } ``` ### Изменить задачу `https://guild.craft-group.xyz/api/task/update`

Для изменения задачи необходимо отправить POST запрос на URL https://guild.craft-group.xyz/task/update

Требуемые параметры:

Параметры Значение
task_id ID задачи

Пример запроса:

`https://guild.craft-group.xyz/api/task/update`

Возвращает объект Задачи.
Каждый объект Задачи имеет такой вид:

```json5 { "id": 11, "project_id": 2, "title": "432423", "status": 1, "created_at": "2021-11-24 14:40:25", "updated_at": "2021-11-25 11:44:30", "user_id_creator": 5, "user_id": 2, "description": "888" } ```

Параметры объекта Задача:

Параметры Значение
task_id ID задачи(int)
project_id ID проекта(int)
title Название задачи(string)
status Статус(int)
created_at Дата создания(string)
updated_at Дата изменения(string)
user_id_creator ID сотрудника, создатель задачи(int)
user_id ID сотрудника(int)
description Описание задачи(string)

Если задача не найдена будет отправлено следующее сообщение:

```json5 { "name": "Not Found", "message": "The task does not exist", "code": 0, "status": 404, "type": "yii\\web\\NotFoundHttpException" } ``` ## Исполнители задачи ### Список исполнителей задачи `https://guild.craft-group.xyz/api/task-user/get-task-users`

Для получения списка исполнителей необходимо отправить GET запрос на URL https://guild.craft-group.xyz/api/task-user/get-task-users

Требуемые параметры:

Параметры Значение
task_id ID задачи

Пример запроса:

`https://guild.craft-group.xyz/api/task-user/get-task-users?task_id=10`

Возвращает массив сотрудников проекта закреплённых за задачей.
Каждый ответ имеет такой вид:

```json5 [ { "id": 5, "task_id": 10, "project_user_id": 1 }, { "id": 7, "task_id": 10, "project_user_id": 5 } ] ```

Параметры объекта Исполнитель:

Параметры Значение
id ID исполнителя задачи(int)
task_id ID задачи(int)
project_user_id ID сотрудника на проекте(int)

Если задача не найдена будет отправлено следующее сообщение:

```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`

Для назначения исполнителя необходимо отправить POST запрос на URL https://guild.craft-group.xyz/api/task-user/set-task-user

Требуемые параметры:

Параметры Значение
task_id ID задачи
project_user_id ID сотрудника на проекте

Пример запроса:

`https://guild.craft-group.xyz/api/task-user/set-task-user`

Возвращает объект Исполнителя задачи.
Каждый ответ имеет такой вид:

```json5 { "task_id": "10", "project_user_id": "5", "id": 8 } ```

Если задача не найдена будет отправлено следующее сообщение:

```json5 { "name": "Bad Request", "message": "{\"task_id\":[\"\З\а\д\а\ч\а is invalid.\"]}", "code": 0, "status": 400, "type": "yii\\web\\BadRequestHttpException" } ```