add api for project

This commit is contained in:
iIronside 2023-01-24 17:32:46 +03:00
parent 8a1f99c707
commit 78aaef28df
8 changed files with 1154 additions and 523 deletions

View File

@ -52,6 +52,7 @@ class Project extends \yii\db\ActiveRecord
public function rules() public function rules()
{ {
return [ return [
['name', 'unique'],
[['name', 'status'], 'required'], [['name', 'status'], 'required'],
[['description'], 'string'], [['description'], 'string'],
[['created_at', 'updated_at'], 'safe'], [['created_at', 'updated_at'], 'safe'],

View File

@ -0,0 +1,993 @@
## Проекты
## Методы
<table>
<tr>
<th>
Метод
</th>
<th>
Описание
</th>
</tr>
<tr>
<td>
project
</td>
<td>
Получить проект
</td>
</tr>
<tr>
<td>
project-list
</td>
<td>
Получить список проектов
</td>
</tr>
<tr>
<td>
status-list
</td>
<td>
Получить список статусов для проекта
</td>
</tr>
<tr>
<td>
create
</td>
<td>
Создать проект
</td>
</tr>
<tr>
<td>
update
</td>
<td>
Изменить проект
</td>
</tr>
</table>
### Получить проект
`https://guild.craft-group.xyz/api/project/get-project`
<p>
Для получения проекта необходимо отправить <b>GET</b> запрос на URL https://guild.craft-group.xyz/api/project/get-project
</p>
<p>
Требуемые параметры:
</p>
<table>
<tr>
<th>
Параметры
</th>
<th>
Значение
</th>
</tr>
<tr>
<td>
project_id
</td>
<td>
ID проекта
</td>
</tr>
</table>
<p>
Пример запроса:
</p>
`https://guild.craft-group.xyz/api/project/get-project?project_id=1`
<p>
Возвращает объект проекта имеющий такой вид:
</p>
```json5
{
"id": 1,
"name": "проект название",
"budget": "333",
"status": 5,
"hh_id": {
"id": 1,
"hh_id": null,
"url": "knkjsefnejkdbvjfdbv",
"title": null,
"dt_add": null,
"photo": null
},
"company": {
"id": 1,
"name": "Рога и копыта",
"description": "Живодёрня"
},
"_links": {
"self": {
"href": "http://guild.loc/api/project/index?project_id=1"
}
}
}
```
### Получить список проектов
`https://guild.craft-group.xyz/api/project/project-list`
<p>
Для получения списка проектов необходимо отправить <b>GET</b> запрос на URL https://guild.craft-group.xyz/api/project/project-list
</p>
<p>
Параметры:
</p>
<table>
<tr>
<th>
Параметры
</th>
<th>
Значение
</th>
</tr>
<tr>
<td>
card_id
</td>
<td>
ID профиля пользователя (При передаче этого параметра будет возвращён список проектов в которых задействован конкретный пользователь, без него будет возвращён список всех проектов)
</td>
</tr>
</table>
<p>
Пример запроса:
</p>
`https://guild.craft-group.xyz/api/project/project-list?card_id=1`
<p>
Возвращает массив объектов проект имеющий такой вид:
</p>
```json5
{
"projects": [
{
"id": 1,
"name": "проект название",
"budget": "333",
"status": 5,
"hh_id": {
"id": 1,
"hh_id": null,
"url": "knkjsefnejkdbvjfdbv",
"title": null,
"dt_add": null,
"photo": null
},
"company": {
"id": 1,
"name": "Рога и копыта",
"description": "Живодёрня"
},
"_links": {
"self": {
"href": "http://guild.loc/api/project/index?project_id=1"
}
}
},
{
"id": 3,
"name": "тестовый проект",
"budget": "333",
"status": 5,
"hh_id": {
"id": 1,
"hh_id": null,
"url": "knkjsefnejkdbvjfdbv",
"title": null,
"dt_add": null,
"photo": null
},
"company": null,
"_links": {
"self": {
"href": "http://guild.loc/api/project/index?project_id=3"
}
}
}
],
"_links": {
"self": {
"href": "http://guild.loc/api/project/project-list?card_id=1&page=1"
},
"first": {
"href": "http://guild.loc/api/project/project-list?card_id=1&page=1"
},
"last": {
"href": "http://guild.loc/api/project/project-list?card_id=1&page=1"
}
},
"_meta": {
"totalCount": 2,
"pageCount": 1,
"currentPage": 1,
"perPage": 20
}
}
```
### Получить список статусов для проекта
`https://guild.craft-group.xyz/api/project/status-list`
<p>
Для получения списка статусов проекта необходимо отправить <b>GET</b> запрос на URL https://guild.craft-group.xyz/api/project/status-list
</p>
<p>
Требуемые параметры: не требуются
</p>
<p>
Пример запроса:
</p>
`https://guild.craft-group.xyz/api/project/status-list`
<p>
Возвращает массив объектов статус имеющий такой вид:
</p>
```json5
[
{
"id": 5,
"name": "проект"
},
{
"id": 6,
"name": "проект статус 2"
}
]
```
### Создать проект
`https://guild.craft-group.xyz/api/project/create`
<p>
Для создания нового проекта необходимо отправить <b>POST</b> запрос на URL https://guild.craft-group.xyz/api/project/create
</p>
<p>
Параметры:
</p>
* - обязательные параметры
<table>
<tr>
<th>
Параметры
</th>
<th>
Значение
</th>
</tr>
<tr>
<td>
* name
</td>
<td>
название проекта
</td>
</tr>
<tr>
<td>
* status
</td>
<td>
статус проекта
</td>
</tr>
<tr>
<td>
description
</td>
<td>
описание проекта
</td>
</tr>
<tr>
<td>
budget
</td>
<td>
бюджет проекта
</td>
</tr>
<tr>
<td>
company_id
</td>
<td>
ID компании
</td>
</tr><tr>
<td>
$hh_id
</td>
<td>
ID hh
</td>
</tr>
</table>
<p>
Пример запроса:
</p>
`https://guild.craft-group.xyz/api/project/create`
<p>
Возвращает массив объектов статус имеющий такой вид:
</p>
```json5
{
"id": 10,
"name": "test",
"budget": "333",
"status": "5",
"hh_id": null,
"company": null,
"_links": {
"self": {
"href": "http://guild.loc/api/project/index?project_id=10"
}
}
}
```
### Обновить проект
`https://guild.craft-group.xyz/api/project/update`
<p>
Для создания нового проекта необходимо отправить <b>POST</b> запрос на URL https://guild.craft-group.xyz/api/project/update
</p>
<p>
Параметры:
</p>
* - обязательные параметры
<table>
<tr>
<th>
Параметры
</th>
<th>
Значение
</th>
</tr>
<tr>
<td>
* project_id
</td>
<td>
ID проекта
</td>
</tr>
<tr>
<td>
status
</td>
<td>
статус проекта
</td>
</tr>
<tr>
<td>
name
</td>
<td>
название
</td>
</tr>
<tr>
<td>
description
</td>
<td>
описание проекта
</td>
</tr>
<tr>
<td>
budget
</td>
<td>
бюджет проекта
</td>
</tr>
<tr>
<td>
company_id
</td>
<td>
ID компании
</td>
</tr>
<tr>
<td>
hh_id
</td>
<td>
ID hh
</td>
</tr>
</table>
<p>
Пример запроса:
</p>
`https://guild.craft-group.xyz/api/project/update`
<p>
Возвращает массив объектов статус имеющий такой вид:
</p>
```json5
{
"id": 7,
"name": "777nnknkfg666",
"budget": "333",
"status": "5",
"hh_id": {
"id": 1,
"hh_id": null,
"url": "knkjsefnejkdbvjfdbv",
"title": null,
"dt_add": null,
"photo": null
},
"company": {
"id": 1,
"name": "Рога и копыта",
"description": "Живодёрня"
},
"_links": {
"self": {
"href": "http://guild.loc/api/project/index?project_id=7"
}
}
}
```
# Задачи
## Методы
<table>
<tr>
<th>
Метод
</th>
<th>
Описание
</th>
</tr>
<tr>
<td>
get-task-list
</td>
<td>
Возвращает список задач
</td>
</tr>
<tr>
<td>
get-task
</td>
<td>
Возвращает задачу
</td>
</tr>
<tr>
<td>
create-task
</td>
<td>
Создаёт задачу
</td>
</tr>
<tr>
<td>
update
</td>
<td>
Обновить задачу
</td>
</tr>
</table>
## Список задач
`https://guild.craft-group.xyz/api/task/get-task-list?project_id=1`
<p>
Параметры:
</p>
<table>
<tr>
<th>
Параметры
</th>
<th>
Значение
</th>
</tr>
<tr>
<td>
project_id
</td>
<td>
Id проекта
</td>
</tr>
</table>
<p>
Без передачи параметра возвращает массив объектов <b>Задача</b> . С параметром <b>project_id</b>,
метод возвращает объекты <b>Задача</b> определённого проекта.
</p>
<p>
Возвращает <b>массив</b> объектов <b>Задача</b>. <br>
Каждый объект <b>Задача</b> имеет такой вид:
</p>
```json5
[
{
"id": "6",
"project_id": "74",
"title": "Название задачи",
"status": "1",
"created_at": "2021-12-20 16:29:39",
"updated_at": "2021-12-20 17:35:04",
"description": "Описание задачи",
"card_id_creator": "1",
"card_id": "3"
},
'...'
]
```
## Получить документ
`https://guild.craft-group.xyz/api/task/get-task?task_id=15`
<p>
Параметры:
</p>
<table>
<tr>
<th>
Параметры
</th>
<th>
Значение
</th>
</tr>
<tr>
<td>
task_id
</td>
<td>
Id задачи
</td>
</tr>
</table>
<p>
Возвращает объект <b>Задача</b>. <br>
Каждый объект <b>Задача</b> имеет такой вид:
</p>
```json5
{
"id": 15,
"project_id": 74,
"title": "4324238888",
"status": 1,
"created_at": "2022-01-05 17:37:37",
"updated_at": "2022-01-05 17:46:10",
"description": "888",
"card_id_creator": 1,
"card_id": null
}
```
<p>
Пример ошибки:
</p>
```json5
{
"name": "Not Found",
"message": "The task does not exist",
"code": 0,
"status": 404,
"type": "yii\\web\\NotFoundHttpException"
}
```
## Создать документ
`https://guild.craft-group.xyz/api/document/create-document`
<p>
Параметры:
</p>
<table>
<tr>
<th>
Параметры
</th>
<th>
Значение
</th>
</tr>
<tr>
<td>
title
</td>
<td>
Название задачи
</td>
</tr>
<tr>
<td>
project_id
</td>
<td>
Id проекта
</td>
</tr>
<tr>
<td>
status
</td>
<td>
статус задачи
</td>
</tr>
<tr>
<td>
card_id_creator
</td>
<td>
Id профиля создателя
</td>
</tr>
<tr>
<td>
card_id
</td>
<td>
Id профиля наблюдателя(не обязательный параметр)
</td>
</tr>
<tr>
<td>
description
</td>
<td>
Описание
</td>
</tr>
</table>
<p>
Создаёт <b>Задача</b>. Требует передачи <b>POST</b> запроса с соответствующими
параметрами
</p>
<p>
В случае указания не верных параметров буде возвращена соответствующая ошибка. Пример ошибки:
</p>
```json5
{
"name": "Internal Server Error",
"message": "{\"project_id\":[\"\П\р\о\е\к\т is invalid.\"]}",
"code": 0,
"status": 500,
"type": "yii\\web\\ServerErrorHttpException"
}
```
## Обновить задачу
`https://guild.craft-group.xyz/api/task/update`
<p>
Параметры:
</p>
<table>
<tr>
<th>
Параметры
</th>
<th>
Значение
</th>
</tr>
<tr>
<td>
title
</td>
<td>
Название задачи
</td>
</tr>
<tr>
<td>
project_id
</td>
<td>
Id проекта
</td>
</tr>
<tr>
<td>
status
</td>
<td>
статус задачи
</td>
</tr>
<tr>
<td>
card_id_creator
</td>
<td>
Id профиля создателя
</td>
</tr>
<tr>
<td>
card_id
</td>
<td>
Id профиля наблюдателя(не обязательный параметр)
</td>
</tr>
<tr>
<td>
description
</td>
<td>
Описание
</td>
</tr>
</table>
<p>
Обновляет объект <b>Задача</b>. Требует передачи <b>POST</b> запроса с соответствующими
параметрами
</p>
<p>
В случае указания не верных параметров буде возвращена соответствующая ошибка. Пример ошибки:
</p>
```json5
{
"name": "Not Found",
"message": "The task does not exist",
"code": 0,
"status": 404,
"type": "yii\\web\\NotFoundHttpException"
}
```
## Исполнители задачи
## Методы
<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"
}
```

View File

@ -1,200 +0,0 @@
## Исполнители задачи
## Методы
<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"
}
```

View File

@ -1,321 +0,0 @@
# Задачи
## Методы
<table>
<tr>
<th>
Метод
</th>
<th>
Описание
</th>
</tr>
<tr>
<td>
get-task-list
</td>
<td>
Возвращает список задач
</td>
</tr>
<tr>
<td>
get-task
</td>
<td>
Возвращает задачу
</td>
</tr>
<tr>
<td>
create-task
</td>
<td>
Создаёт задачу
</td>
</tr>
<tr>
<td>
update
</td>
<td>
Обновить задачу
</td>
</tr>
</table>
## Список задач
`https://guild.craft-group.xyz/api/task/get-task-list?project_id=1`
<p>
Параметры:
</p>
<table>
<tr>
<th>
Параметры
</th>
<th>
Значение
</th>
</tr>
<tr>
<td>
project_id
</td>
<td>
Id проекта
</td>
</tr>
</table>
<p>
Без передачи параметра возвращает массив объектов <b>Задача</b> . С параметром <b>project_id</b>,
метод возвращает объекты <b>Задача</b> определённого проекта.
</p>
<p>
Возвращает <b>массив</b> объектов <b>Задача</b>. <br>
Каждый объект <b>Задача</b> имеет такой вид:
</p>
```json5
[
{
"id": "6",
"project_id": "74",
"title": "Название задачи",
"status": "1",
"created_at": "2021-12-20 16:29:39",
"updated_at": "2021-12-20 17:35:04",
"description": "Описание задачи",
"card_id_creator": "1",
"card_id": "3"
},
'...'
]
```
## Получить документ
`https://guild.craft-group.xyz/api/task/get-task?task_id=15`
<p>
Параметры:
</p>
<table>
<tr>
<th>
Параметры
</th>
<th>
Значение
</th>
</tr>
<tr>
<td>
task_id
</td>
<td>
Id задачи
</td>
</tr>
</table>
<p>
Возвращает объект <b>Задача</b>. <br>
Каждый объект <b>Задача</b> имеет такой вид:
</p>
```json5
{
"id": 15,
"project_id": 74,
"title": "4324238888",
"status": 1,
"created_at": "2022-01-05 17:37:37",
"updated_at": "2022-01-05 17:46:10",
"description": "888",
"card_id_creator": 1,
"card_id": null
}
```
<p>
Пример ошибки:
</p>
```json5
{
"name": "Not Found",
"message": "The task does not exist",
"code": 0,
"status": 404,
"type": "yii\\web\\NotFoundHttpException"
}
```
## Создать документ
`https://guild.craft-group.xyz/api/document/create-document`
<p>
Параметры:
</p>
<table>
<tr>
<th>
Параметры
</th>
<th>
Значение
</th>
</tr>
<tr>
<td>
title
</td>
<td>
Название задачи
</td>
</tr>
<tr>
<td>
project_id
</td>
<td>
Id проекта
</td>
</tr>
<tr>
<td>
status
</td>
<td>
статус задачи
</td>
</tr>
<tr>
<td>
card_id_creator
</td>
<td>
Id профиля создателя
</td>
</tr>
<tr>
<td>
card_id
</td>
<td>
Id профиля наблюдателя(не обязательный параметр)
</td>
</tr>
<tr>
<td>
description
</td>
<td>
Описание
</td>
</tr>
</table>
<p>
Создаёт <b>Задача</b>. Требует передачи <b>POST</b> запроса с соответствующими
параметрами
</p>
<p>
В случае указания не верных параметров буде возвращена соответствующая ошибка. Пример ошибки:
</p>
```json5
{
"name": "Internal Server Error",
"message": "{\"project_id\":[\"\П\р\о\е\к\т is invalid.\"]}",
"code": 0,
"status": 500,
"type": "yii\\web\\ServerErrorHttpException"
}
```
## Обновить задачу
`https://guild.craft-group.xyz/api/task/update`
<p>
Параметры:
</p>
<table>
<tr>
<th>
Параметры
</th>
<th>
Значение
</th>
</tr>
<tr>
<td>
title
</td>
<td>
Название задачи
</td>
</tr>
<tr>
<td>
project_id
</td>
<td>
Id проекта
</td>
</tr>
<tr>
<td>
status
</td>
<td>
статус задачи
</td>
</tr>
<tr>
<td>
card_id_creator
</td>
<td>
Id профиля создателя
</td>
</tr>
<tr>
<td>
card_id
</td>
<td>
Id профиля наблюдателя(не обязательный параметр)
</td>
</tr>
<tr>
<td>
description
</td>
<td>
Описание
</td>
</tr>
</table>
<p>
Обновляет объект <b>Задача</b>. Требует передачи <b>POST</b> запроса с соответствующими
параметрами
</p>
<p>
В случае указания не верных параметров буде возвращена соответствующая ошибка. Пример ошибки:
</p>
```json5
{
"name": "Not Found",
"message": "The task does not exist",
"code": 0,
"status": 404,
"type": "yii\\web\\NotFoundHttpException"
}
```

View File

@ -18,7 +18,5 @@ class Api extends \yii\base\Module
public function init() public function init()
{ {
parent::init(); parent::init();
// custom initialization code goes here
} }
} }

View File

@ -0,0 +1,96 @@
<?php
namespace frontend\modules\api\controllers;
use common\models\ProjectUser;
use common\models\Status;
use common\models\UseStatus;
use frontend\modules\api\models\Project;
use Yii;
use yii\data\ActiveDataProvider;
use yii\helpers\ArrayHelper;
use yii\web\NotFoundHttpException;
class ProjectController extends ApiController
{
public $modelClass = 'frontend\modules\api\models\Project';
public $serializer = [
'class' => 'yii\rest\Serializer',
'collectionEnvelope' => 'projects',
];
public function behaviors(): array
{
return ArrayHelper::merge(parent::behaviors(), [
'verbs' => [
'class' => \yii\filters\VerbFilter::class,
'actions' => [
'get-project' => ['GET', 'OPTIONS'],
'project-list' => ['GET', 'OPTIONS'],
'status-list' => ['GET', 'OPTIONS'],
'create' => ['POST', 'OPTIONS'],
'update' => ['POST', 'OPTIONS']
],
]
]);
}
public function actionGetProject($project_id): ?Project
{
return Project::findOne($project_id);
}
public function actionProjectList($card_id = null): ActiveDataProvider
{
if (!empty($card_id)) {
$projectIdList = ProjectUser::find()->where(['card_id' => $card_id])->select('project_id')->column();
$query = Project::find()->where([ 'IN', 'id', $projectIdList]);
} else {
$query = Project::find();
}
return new ActiveDataProvider([
'query' => $query,
]);
}
public function actionStatusList(): array
{
return Status::find()
->joinWith('useStatuses')
->where(['`use_status`.`use`' => UseStatus::USE_PROJECT])->all();
}
public function actionCreate()
{
$project = new Project();
$project->attributes = \yii::$app->request->post();
if($project->validate()) {
$project->save(false);
return $project;
}
return $project->errors;
}
/**
* @throws \Throwable
* @throws \yii\base\InvalidConfigException
* @throws \yii\db\StaleObjectException
* @throws NotFoundHttpException
*/
public function actionUpdate()
{
$project = Project::findOne(Yii::$app->request->post('project_id'));
if(empty($project)) {
throw new NotFoundHttpException('The project not found');
}
$project->load(Yii::$app->request->getBodyParams(), '');
if (!$project->update()) {
return $project->errors;
}
return $project;
}
}

View File

@ -0,0 +1,20 @@
<?php
namespace frontend\modules\api\models;
class Company extends \common\models\Company
{
public function fields()
{
return [
'id',
'name',
'description',
];
}
public function extraFields(): array
{
return [];
}
}

View File

@ -0,0 +1,44 @@
<?php
namespace frontend\modules\api\models;
use yii\db\ActiveQuery;
use yii\helpers\Url;
use yii\web\Link;
use yii\web\Linkable;
class Project extends \common\models\Project implements Linkable
{
public function fields(): array
{
return [
'id',
'name',
'budget',
'status',
'hh_id' => function() {
return $this->hh;
},
'company' => function() {
return $this->company;
}
];
}
public function extraFields(): array
{
return [];
}
public function getLinks(): array
{
return [
Link::REL_SELF => Url::to(['index', 'project_id' => $this->id], true),
];
}
public function getCompany(): ActiveQuery
{
return $this->hasOne(Company::className(), ['id' => 'company_id']);
}
}