Files
we_pro_dock/BACKEND/TODOS.md
2024-05-14 11:39:33 +03:00

7.9 KiB
Raw Blame History

Описание приложения

Кортежи статуса задачи

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. AuthorSerializer:
    • Сериализатор для пользователя (автора задачи).
    • Содержит поля: username, bio, image, following.
    • Поле following определяется методом get_following, который проверяет, подписан ли текущий пользователь на автора задачи.
  2. TodoSerializer:
    • Основной сериализатор для модели Todo.
    • Поля:
      • id, title, description, body, tagList, is_complete, status, priority, is_deleted, is_active, createdAt, updatedAt, startTimedAt, endTimedAt, author, substacles, favorited, favoritesCount, supplierd, suppliersCount, supporterd, supportersCount, observerd, observersCount.
    • Некоторые поля (description, body, tagList, createdAt, updatedAt, startTimedAt, endTimedAt, favorited, favoritesCount, supplierd, suppliersCount, supporterd, supportersCount, observerd, observersCount) имеют методы get_*, которые определяют поведение для сериализации.
    • Методы create и update определяют, как создавать и обновлять объекты Todo.
  3. TagSerializer:
    • Сериализатор для добавления тегов.
    • Содержит единственное поле tags, которое является списком строк.

Маршрутизатор

todo_router = DefaultRouter(trailing_slash=False)
todo_router.register('todos', views.TodoView, basename='todos') todo_router.register('tags', views.TagView)

Теперь давайте подробнее разберем каждую часть:

  • 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.
  2. TagView:
    • Представление для работы с тегами.
    • Использует GenericViewSet и ListModelMixin для обработки только GET-запросов.
    • Включает метод list для получения списка тегов.
class TodoView(viewsets.ModelViewSet):
	queryset = Todo.objects.all()
	serializer_class = TodoSerializer
	permission_classes = [CanViewTodoDetail]
	lookup_field = 'id'
	filterset_class = TodoFilter
	http_method_names = ['get', 'post', 'put', 'delete']
class TagView(viewsets.GenericViewSet, mixins.ListModelMixin):
	queryset = Tag.objects.all()
	serializer_class = TagSerializer
	http_method_names = ['get',]

Права доступа

  1. IsOwnerOrCollaborator:
    • Позволяет редактирование задач только владельцу задачи или соисполнителям.
    • Метод has_object_permission проверяет, что запросы на изменение (методы, отличные от GET, HEAD и OPTIONS) выполняются только для владельца задачи или соисполнителей.
  2. CanViewTodoDetail:
    • Позволяет просмотр деталей задачи автору, соисполнителям, поставщикам, наблюдателям и избранным.
    • Метод has_object_permission проверяет, что пользователь является автором задачи, соисполнителем, поставщиком, наблюдателем или избранным.