## Групы пользователей
- В основном это нужно для назначения прав пользователям.
- Группами пользователей может управлять только администратор или выше.

### GROUP_STRUCT
```json
	{
		"id": 42,
		"alias": "home",
		"name": "Домашняя группа",
		"description": "Возможно написать короткое описание группы. Может пригодится например для описания правил или инструкции",
		"permissions": [
			{
				"type": "device", // "device" | "script"
				"id": 8, // Описывает право доступа к девайсу или скрипту с этим id 
				"access": "granted_at", // "granted" | "denied" | "granted_at"
				"granted_at": "05:00-18:30" // Если access = granted_at, то добавляется поле с указанием ренджа времени суток
			},
			//...
		],
		"update_at": "2025-07-29 19:45",
		"create_at": "2025-07-28 18:35"
	}
	```

---

### GET `/api/v1/groups/list`
Получить список существующих груп
- **Примечание:** Доступно лишь админу и выше.

#### Пример ответа
```json
	{
		"status": "ok",
		"groups": {
			"GROUP_STRUCT"
			// ...
		},
		"total": 6
	}
	```

#### Пример НЕ успешного ответа. Не хватает прав
```json
	{
		"status": "error",
		"message": "Permissions error" // "Permission error"
	}
	```

---

### POST `/api/v1/groups/new`
Добавить новую групу. 
- **Все права по умолчанию будут отключены.**
- Создавать группу может только админ или выше.

#### Пример запроса
```json
	{
		"alias": "home", // Required
		"name": "Домашняя группа", // Required
		"description": "Возможно написать короткое описание группы. Может пригодится например для описания правил или инструкции"
	}
	```

#### Пример ответа
```json
	{
		"status": "ok",
		"group": "GROUP_STRUCT"
	}
	```

#### Пример НЕ успешного ответа. Не хватает прав
```json
	{
		"status": "error",
		"message": "Permissions error" 
	}
	```

#### Пример НЕ успешного ответа. Невалидные поля
```json
	{
		"status": "error",
		"field": "alias", // alias | name
		"message": "Alias already exists"
	}
	```

---

### GET `/api/v1/groups/id/{{id}}` OR GET `/api/v1/groups/alias/{{alias}}`
Получить группу по id

#### Пример ответа
```json
	{
		"status": "ok",
		"group": "GROUP_STRUCT"
	}
	```

---

### POST `/api/v1/groups/id/{{id}}/add_user`
Добавить пользователя в группу
- **Доступно лишь админу и выше**

#### Пример запроса
```json
	{
		"user_id": 12
	}
	```

---

### GET `/api/v1/groups/id/{{id}}/users` OR GET `/api/v1/groups/alias/{{alias}}/users`
Получить список пользователей группы

#### Пример ответа
```json
	{
		"status": "ok",
		"users": [
			"USER_STRUCT"
			// ...
		],
		"total": 11
	}
	```

---

### GET `/api/v1/groups/id/{{id}}/remove`
Удалить группу, пользователи в этой группе должны стать безправными.
- **Доступно лишь админу и выше**

#### Пример ответа
```json
	{
		"status": "ok",
		"user": "USER_STRUCT"
	}
	```

#### Пример НЕ успешного ответа
```json
	{
		"status": "error",
		"message": "User not found" // | "Permission error"
	}
	```

---

### POST `/api/v1/groups/id/{{id}}/update`
Редактировать группу

#### Пример запроса
```json
	{
		"name": "Changed name",
		"description": "Something else"
	}
	```

#### Пример ответа
```json
	{
		"status": "ok",
		"group": "GROUP_STRUCT"
	}
	```

---

### POST `/api/v1/groups/id/{{id}}/permissions/update`
Редактировать флаги доступа к устройствам и скриптам

#### Пример запроса
```json
	{
		"permissions": {
			"id": 8, // Редактируем право доступа к девайсу или скрипту с этим id 
			"access": "granted_at", // устанавливаем "granted" | "denied" | "granted_at"
			"granted_at": "05:00-18:30" // Если access = granted_at, то добавляется поле с указанием ренджа времени суток
		}
	}
	```

#### Пример ответа
```json
	{
		"status": "ok",
		"group": "GROUP_STRUCT"
	}
	```

#### Пример НЕ успешного ответа
```json
	{
		"status": "error",
		"message": "Device or script not found" // | "Permission error"
	}
	```
