This commit is contained in:
2024-05-14 11:39:33 +03:00
commit 2762ac794a
26 changed files with 1506 additions and 0 deletions

95
BACKEND/COMMENTS.md Normal file
View File

@@ -0,0 +1,95 @@
## Модели
1. **Comment**:
- **`author`** (ForeignKey): Связывает поле с моделью пользователя, который создал комментарий.
- **`content`** (TextField): Текст комментария.
- **`created`** (DateTimeField): Дата и время создания комментария (автоматически добавляется).
- **`updated`** (DateTimeField): Дата и время последнего обновления комментария (автоматически).
2. **CommentArticles**:
- **`article`** (ForeignKey): Связь с моделью статьи (Article).
1. **CommentTodos**:
- **`todo`** (ForeignKey): Связь с моделью задачи (Todo).
1. **CommentTenant**:
- **`tenant`** (ForeignKey): Связь с моделью арендатора (Tenant).
1. **CommentGoods**:
- `**goods**` (ForeignKey): Связь с моделью имущества (Goods).
1. **CommentPropertyObject**:
- **`object`** (ForeignKey): Связь с моделью объекта (Object).
1. **CommentMaintenanceHistories**:
- `**maintenancehistory**` (ForeignKey): Связь с моделью истории обслуживания (MaintenanceHistory).
1. **CommentContract**:
- **`contract`** (ForeignKey): Связь с моделью контракта (Contract).
## Сериализатор
1. **CommentSerializer:**
- **`author`:** SerializerMethodField, который вызывает метод `get_author` для получения сериализованных данных об авторе комментария.
- **`createdAt`:** DateTimeField с форматированием даты и времени в ISO 8601.
- `**updatedAt`:** DateTimeField с форматированием даты и времени в ISO 8601.
- **`body`:** CharField, который использует поле content модели Comment.
- **Методы:**
- **`get_author`:** Получает сериализованные данные об авторе комментария.
- **`create`:** Создает новый комментарий с указанными данными, включая автора и связанный объект (article).
2. **CommentTodosSerializer:**
- `**author`:** SerializerMethodField, который вызывает метод `get_author` для получения сериализованных данных об авторе комментария.
- **`createdAt`:** DateTimeField с форматированием даты и времени в ISO 8601.
- **`updatedAt`:** DateTimeField с форматированием даты и времени в ISO 8601.
- **`body`:** CharField, который использует поле content модели CommentTodos.
- **Методы:**
- **`get_author`:** Получает сериализованные данные об авторе комментария.
- `**create`:** Создает новый комментарий для задачи с указанными данными, включая автора и связанную задачу (todo).
## Маршрутизатор
1. **comment-article:** URL для создания и получения комментариев к статьям.
- `articles/<str:slug>/comments`
- `views.CommentView.as_view()`
- `name='comment-article'`
1. **comment-delete:** URL для удаления комментариев к статьям по их идентификатору.
- `articles/<str:slug>/comments/<int:id>`
- `views.DeleteCommentView.as_view()`
- `name='comment-delete'`
1. **comment-todo-article:** URL для создания и получения комментариев к задачам.
- `todos/<int:id>/comments`
- `views.CommentTodoView.as_view()`
- `name='comment-todo-article'`
1. **comment-todo-delete:** URL для удаления комментариев к задачам по их идентификатору.
- `todos/<int:todo_id>/comments/<int:comment_id>/`
- `views.DeleteCommentTodoView.as_view()`
- `name='comment-todo-delete'`
## Контроллер
1. **CommentView:**
- Это представление позволяет создавать и получать комментарии к статьям.
- `generics.ListCreateAPIView`: Для списка и создания комментариев.
- `get_permissions`: Проверка прав доступа.
- `post`: Создание комментария.
- `list`: Получение списка комментариев.
- `DestroyAPIView` не используется здесь, поэтому удаление комментариев не поддерживается.
2. **DeleteCommentView:**
- Это представление предназначено для удаления комментариев к статьям.
- `generics.DestroyAPIView`: Для удаления комментариев.
- `destroy`: Удаление комментария по его идентификатору и слагу статьи.
3. **CommentTodoView:**
- Это представление позволяет создавать и получать комментарии к задачам.
- `generics.ListCreateAPIView`: Для списка и создания комментариев.
- `get_permissions`: Проверка прав доступа.
- `post`: Создание комментария.
- `list`: Получение списка комментариев.
- `DestroyAPIView` не используется здесь, поэтому удаление комментариев не поддерживается.
4. **DeleteCommentTodoView:**
- Это представление предназначено для удаления комментариев к задачам.
- `generics.DestroyAPIView`: Для удаления комментариев.
- `destroy`: Удаление комментария по его идентификатору и идентификатору задачи.