Files
we_pro_dock/BACKEND/TODOS.md
2024-05-14 16:58:27 +03:00

85 lines
7.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
### Кортежи статуса задачи
TASK_STATUS = (
('New', 'Новая'),
('Deleted', 'Удалено'),
('Waiting', 'Ожидание'),
('Done', 'Выполнена'),
)
### Кортеж уровня важности
PRIORITY = (
('Low', 'Низкий'),
('Medium', 'Средний'),
('High', 'Высокий'),
)
## Модель задачи
1. **`author`** (ForeignKey): Ссылка на пользователя, который создал задачу.
2. **`title`** (CharField): Название задачи (до 150 символов).
3. **`summary`** (TextField): Краткое описание задачи.
4. **`content`** (TextField): Подробное описание задачи.
5. **`is_active`** (BooleanField): Флаг, указывающий на активность задачи.
6. **`is_deleted`** (BooleanField): Флаг, указывающий на удаление задачи.
7. **`priority`** (CharField): Приоритет задачи (выбор из предустановленных значений).
8. **`status`** (CharField): Статус задачи (выбор из предустановленных значений).
9. **`is_complete`** (BooleanField): Флаг, указывающий на завершение задачи.
10. `**start_time**` (DateTimeField): Дата и время начала задачи.
11. **`end_time`** (DateTimeField): Крайний срок выполнения задачи.
12. **`created`** (DateTimeField): Время создания задачи (автоматически заполняется при создании).
13. **`updated`** (DateTimeField): Время последнего обновления задачи (автоматически обновляется при изменениях).
14. **`substacles`** (ManyToManyField): Связь между задачами, представляющая подзадачи текущей задачи.
15. `**favorites**` (ManyToManyField): Пользователи, которые добавили задачу в избранное.
16. **`suppliers`** (ManyToManyField): Пользователи, ответственные за выполнение задачи.
17. **`supporters`** (ManyToManyField): Соисполнители задачи.
18. **`observers`** (ManyToManyField): Пользователи, наблюдающие за выполнением задачи.
19. `**`tags** (TaggableManager): Теги, связанные с задачей для удобной классификации.
## Сериализатор
1. **TodoSerializer**:
- `id` (IntegerField): Идентификатор задачи.
- `title` (CharField): Заголовок задачи.
- `description` (CharField): Описание задачи.
- `body` (CharField): Текст задачи.
- `tagList` (ListField): Список тегов задачи.
- `is_complete` (BooleanField): Завершена ли задача.
- `status` (CharField): Статус задачи.
- `priority` (CharField): Приоритет задачи.
- `is_deleted` (BooleanField): Удалена ли задача.
- `is_active` (BooleanField): Активна ли задача.
- `createdAt` (DateTimeField): Дата и время создания задачи.
- `updatedAt` (DateTimeField): Дата и время последнего обновления задачи.
- `startTimedAt` (DateTimeField): Дата и время начала задачи.
- `endTimedAt` (DateTimeField): Дата и время завершения задачи.
- `author` (AuthorSerializer): Сериализатор автора задачи.
- `substacles` (ListField): Список препятствий задачи.
- `favorited` (BooleanField): Понравилась ли задача.
- `favoritesCount` (IntegerField): Количество пользователей, отметивших задачу как понравившуюся.
- `supplierd` (IntegerField): Идентификатор поставщика.
- `suppliersCount` (IntegerField): Количество поставщиков.
- `supporterd` (IntegerField): Идентификатор поддержки.
- `supportersCount` (IntegerField): Количество поддерживающих.
- `observerd` (IntegerField): Идентификатор наблюдателя.
- `observersCount` (IntegerField): Количество наблюдателей.
## Маршрутизатор
- `DefaultRouter` из библиотеки `rest_framework.routers` автоматически создает маршруты для представлений на основе их названий и методов (например, GET, POST, PUT, DELETE). За вас обрабатывается большая часть создания URL-путей, что делает код более модульным и менее подверженным ошибкам.
- `todo_router.register('todos', views.TodoView, basename='todos')` регистрирует представление `TodoView` для работы с задачами. Аргументы `basename='todos'` используются для создания имени маршрута, которое будет использоваться в генерации URL (например, `todos-list`, `todos-detail`, `todos-create` `todos-edit` `todos-delete`.).
- `todo_router.register('tags', views.TagView)` регистрирует представление `TagView` для работы с тегами. Аналогично создаются маршруты для работы с тегами (`tags-list`, `tags-detail`, `tags-create` `tags-edit` `tags-delete`).
## Контроллер
1. **TodoView**:
- Представление для работы с задачами (todos).
- Использует `ModelViewSet`, который предоставляет CRUD-функциональность и многое другое.
- Включает методы `list`, `create`, `retrieve`, `update`, `destroy` для обработки соответствующих HTTP-запросов.
- Содержит дополнительные действия (`favorite`, `feed`) с использованием декоратора `@action`.
## Права доступа
1. **IsOwnerOrCollaborator**:
- Позволяет редактирование задач только владельцу задачи или соисполнителям.
- Метод `has_object_permission` проверяет, что запросы на изменение (методы, отличные от GET, HEAD и OPTIONS) выполняются только для владельца задачи или соисполнителей.
1. **CanViewTodoDetail**:
- Позволяет просмотр деталей задачи автору, соисполнителям, поставщикам, наблюдателям и избранным.
- Метод `has_object_permission` проверяет, что пользователь является автором задачи, соисполнителем, поставщиком, наблюдателем или избранным.