From 7988103495de3e78fd8ca28146485ceddbb06ed7 Mon Sep 17 00:00:00 2001 From: krasi Date: Tue, 14 May 2024 16:58:27 +0300 Subject: [PATCH] 140501 --- BACKEND/ARTICLES.md | 12 +- BACKEND/COMMENTS.md | 42 ++--- BACKEND/CONTRACTS.md | 54 +++--- BACKEND/GOODS.md | 161 +++++++++--------- BACKEND/HISTORIES.md | 50 +++--- BACKEND/MEDIA.md | 43 +++-- BACKEND/PROPERTIES.md | 132 +++++++------- BACKEND/TEAMS.md | 74 ++++---- BACKEND/TENANTS.md | 64 ++++--- BACKEND/TODOS.md | 110 +++++------- ...тки для решения задач.md | 1 - BACKEND/Общие правила.md | 14 ++ FRONTEND/CONSTANTS.TS.md | 2 +- 13 files changed, 403 insertions(+), 356 deletions(-) diff --git a/BACKEND/ARTICLES.md b/BACKEND/ARTICLES.md index 6e6fd39..1ea5aa8 100644 --- a/BACKEND/ARTICLES.md +++ b/BACKEND/ARTICLES.md @@ -11,10 +11,14 @@ ## Сериализатор 1. **ArticleSerializer**: - - Сериализатор для модели статей (Article). - - Поля: `slug`, `title`, `description`, `body`, `tagList`, `createdAt`, `updatedAt`, `favorited`, `favoritesCount`, `author`. - - `TaggitSerializer`: Используется для сериализации тегов статьи. - - Методы: `get_author`, `get_favorited`, `get_favoritesCount`, `create`, `update`. + - **`slug`:** (SlugField), уникальный идентификатор для URL статьи. Здесь он настроен как только для чтения (read-only). + - **`description`:** (CharField), отображает описание статьи и использует поле summary модели. + - **`body`:** (CharField), содержит полное содержание статьи и использует поле content модели. + - **`tagList`:** (TagListSerializerField), отображает теги статьи и использует поле tags модели. Он также настроен как только для чтения. + - **`createdAt`**(DateTimeField): с форматированием даты и времени в ISO 8601. + - `**updatedAt`**(DateTimeField): с форматированием даты и времени в ISO 8601. + - **`favorited` и `favoritesCount`** (SerializerMethodField): используются для получения информации о том, добавлена ли статья в избранное пользователем и сколько пользователей добавили эту статью в избранное соответственно. + - **`author`** (SerializerMethodField): с атрибутом read_only=True, который вызывает метод `get_author` для получения сериализованных данных об авторе статьи. ## Маршрутизатор - **`article_router.register('articles', views.ArticleView, basename='articles')`**: Регистрация маршрута для представления `ArticleView` из `views.py` под именем 'articles'. `basename='articles'` указывает базовое имя для ссылок. diff --git a/BACKEND/COMMENTS.md b/BACKEND/COMMENTS.md index 5cb4af9..e992d01 100644 --- a/BACKEND/COMMENTS.md +++ b/BACKEND/COMMENTS.md @@ -7,41 +7,41 @@ - **`updated`** (DateTimeField): Дата и время последнего обновления комментария (автоматически). 2. **CommentArticles**: - - **`article`** (ForeignKey): Связь с моделью статьи (Article). + - **`article`**(ForeignKey): Связь с моделью статьи (Article). -1. **CommentTodos**: - - **`todo`** (ForeignKey): Связь с моделью задачи (Todo). +3. **CommentTodos**: + - **`todo`**(ForeignKey): Связь с моделью задачи (Todo). -1. **CommentTenant**: - - **`tenant`** (ForeignKey): Связь с моделью арендатора (Tenant). +4. **CommentTenant**: + - **`tenant`**(ForeignKey): Связь с моделью арендатора (Tenant). -1. **CommentGoods**: - - `**goods**` (ForeignKey): Связь с моделью имущества (Goods). +5. **CommentGoods**: + - `**goods**`(ForeignKey): Связь с моделью имущества (Goods). -1. **CommentPropertyObject**: - - **`object`** (ForeignKey): Связь с моделью объекта (Object). +6. **CommentPropertyObject**: + - **`object`**(ForeignKey): Связь с моделью объекта (Object). -1. **CommentMaintenanceHistories**: - - `**maintenancehistory**` (ForeignKey): Связь с моделью истории обслуживания (MaintenanceHistory). +7. **CommentMaintenanceHistories**: + - `**maintenancehistory**`(ForeignKey): Связь с моделью истории обслуживания (MaintenanceHistory). -1. **CommentContract**: - - **`contract`** (ForeignKey): Связь с моделью контракта (Contract). +8. **CommentContract**: + - **`contract`**(ForeignKey): Связь с моделью контракта (Contract). ## Сериализатор 1. **CommentSerializer:** - - **`author`:** SerializerMethodField, который вызывает метод `get_author` для получения сериализованных данных об авторе комментария. - - **`createdAt`:** DateTimeField с форматированием даты и времени в ISO 8601. - - `**updatedAt`:** DateTimeField с форматированием даты и времени в ISO 8601. - - **`body`:** CharField, который использует поле content модели Comment. + - **`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. + - `**author`**(SerializerMethodField):, который вызывает метод `get_author` для получения сериализованных данных об авторе комментария. + - **`createdAt`**(DateTimeField): с форматированием даты и времени в ISO 8601. + - **`updatedAt`**(DateTimeField): с форматированием даты и времени в ISO 8601. + - **`body`**(CharField): который использует поле content модели CommentTodos. - **Методы:** - **`get_author`:** Получает сериализованные данные об авторе комментария. - `**create`:** Создает новый комментарий для задачи с указанными данными, включая автора и связанную задачу (todo). diff --git a/BACKEND/CONTRACTS.md b/BACKEND/CONTRACTS.md index 722e1aa..c72a4dc 100644 --- a/BACKEND/CONTRACTS.md +++ b/BACKEND/CONTRACTS.md @@ -28,36 +28,36 @@ 1. **ContractSerializer:** - `id`: Идентификатор договора. - - `contractContractType`: Тип договора. - - `contractnumber`: Номер договора. - - `contractStartDate`: Дата начала договора. - - `contractEndDate`: Дата окончания договора. - - `contractEsignature`: Наличие ЭЦП в договоре. - - `contractEdo`: Наличие ЭДО в договоре. - - `tenant`: Внешний ключ на модель арендатора. - - `goods`: Множественный внешний ключ на модель имущества. - - `related_objects`: Множественный внешний ключ на модель объектов. - - `contractFile`: Файл договора. - - `contractPhotoPp`: Фотография при приеме-передаче недвижимости. - - `author`: Информация об авторе (использует `AuthorSerializer`). - - `createdAt`: Дата создания. - - `updatedAt`: Дата обновления. + - `contractContractType`(CharField): Тип договора. + - `contractnumber`(CharField): Номер договора. + - `contractStartDate`(DateField): Дата начала договора. + - `contractEndDate`(DateField): Дата окончания договора, может быть пустым. + - `contractEsignature`(BooleanField): Наличие ЭЦП в договоре. + - `contractEdo`(BooleanField): Наличие ЭДО в договоре. + - `tenant`(TenantSerializer): Внешний ключ на модель арендатора. + - `goods`(PrimaryKeyRelatedField): Множественный внешний ключ на модель имущества. + - `related_objects`(PrimaryKeyRelatedField): Множественный внешний ключ на модель объектов. + - `contractFile`(FileField): Файл договора. + - `contractPhotoPp`(FileField): Фотография при приеме-передаче недвижимости. + - `author`(PrimaryKeyRelatedField): Информация об авторе (использует `AuthorSerializer`). + - `createdAt`(DateTimeField): Дата создания. + - `updatedAt`(DateTimeField): Дата обновления. 2. **PaymentSerializer:** - `id`: Идентификатор платежа. - - `contract`: Внешний ключ на модель договора. - - `paymentFrequency`: Частота платежей. - - `paymentMethod`: Метод оплаты. - - `paymentType`: Тип оплаты. - - `paymentRentCost`: Стоимость аренды. - - `paymentRentRate`: Арендная ставка. - - `paymentCompensation`: Компенсация. - - `paymentSecurityDeposit`: Залог. - - `paymentPaymentDuration`: Дата окончания оплаты. - - `paymentIsPaid`: Оплачено ли. - - `author`: Информация об авторе (использует `AuthorSerializer`). - - `createdAt`: Дата создания. - - `updatedAt`: Дата обновления. + - `contract`(PrimaryKeyRelatedField): Внешний ключ на модель договора. + - `paymentFrequency`(CharField): Частота платежей. + - `paymentMethod`(CharField): Метод оплаты. + - `paymentType`(CharField): Тип оплаты. + - `paymentRentCost`(DecimalField): Стоимость аренды. + - `paymentRentRate`(DecimalField): Арендная ставка. + - `paymentCompensation`(CharField): Компенсация. + - `paymentSecurityDeposit`(DecimalField): Залог. + - `paymentPaymentDuration`(DateField): Дата окончания оплаты. + - `paymentIsPaid`(BooleanField): Оплачено ли. + - `author`(PrimaryKeyRelatedField): Информация об авторе (использует `AuthorSerializer`). + - `createdAt`(DateTimeField): Дата создания. + - `updatedAt`(DateTimeField): Дата обновления. ## Маршрутизатор 1. **URL для списка и деталей договоров:** diff --git a/BACKEND/GOODS.md b/BACKEND/GOODS.md index 30ccb34..a494f6a 100644 --- a/BACKEND/GOODS.md +++ b/BACKEND/GOODS.md @@ -1,76 +1,76 @@ ## Модель имущества 1. **GoodsType:** - - `name`: Название типа имущества. + - `name`(CharField): Название типа имущества. + 2. **ConsumableType:** - - `name`: Название типа расходуемых ТМЦ. + - `name`(CharField): Название типа расходуемых ТМЦ. + 3. **Goods:** - - `goods_type`: (ForeignKey) Связь с типом имущества (`GoodsType`). - - `goods_name`: (CharField) Название имущества. - - `inventory_number`: (CharField) Инвентарный номер имущества. - - `description`: (TextField) Описание имущества. - - `goods_photo`: (ManyToManyField) Фотографии имущества (связь с моделью `ImageGoods`). - - `condition_description`: (TextField) Описание состояния имущества. - - `damage_date_time`: (DateTimeField) Дата и время обнаружения порчи. - - `related_object`: (ForeignKey) Связь с объектом (`Object`), к которому относится имущество. - - `responsible_person`: (CharField) Ответственное лицо за имущество. - - `status`: (CharField) Статус состояния имущества (`good` - хорошее, `damaged` - поврежденное). + - **`goods_type`** (ForeignKey): Связь с типом имущества (`GoodsType`). + - **`goods_name`** (CharField): Название имущества. + - **`inventory_number`** (CharField): Инвентарный номер имущества. + - **`description`** (TextField): Описание имущества. + - **`goods_photo`** (ManyToManyField): Фотографии имущества (связь с моделью `ImageGoods`). + - **`condition_description`** (TextField): Описание состояния имущества. + - **`damage_date_time`** (DateTimeField): Дата и время обнаружения порчи. + - **`related_object`** (ForeignKey): Связь с объектом (`Object`), к которому относится имущество. + - **`responsible_person`** (CharField): Ответственное лицо за имущество. + - **`status`** (CharField): Статус состояния имущества (`good` - хорошее, `damaged` - поврежденное). + 4. **Consumable:** - - `consumable_type`: (ForeignKey) Связь с типом расходуемых ТМЦ (`ConsumableType`). - - `name`: (CharField) Название расходуемого товара. - - `description`: (TextField) Описание товара. - - `consumable_photo`: (ManyToManyField) Фотографии товара (связь с моделью `ImageGoods`). - - `quantity`: (PositiveIntegerField) Количество товара. - - `quantity_unit`: (CharField) Единица измерения количества (выбор из предопределенных вариантов, например, шт., кг, л и т. д.). - - `related_object`: (ForeignKey) Связь с объектом (`Object`), к которому относится товар. - - `responsible_person`: (CharField) Ответственное лицо за товар. + - **`consumable_type`** (ForeignKey): Связь с типом расходуемых ТМЦ (`ConsumableType`). + - **`name`** (CharField): Название расходуемого товара. + - **`description`** (TextField): Описание товара. + - **`consumable_photo`** (ManyToManyField): Фотографии товара (связь с моделью `ImageGoods`). + - **`quantity`** (PositiveIntegerField): Количество товара. + - **`quantity_unit`** (CharField): Единица измерения количества (выбор из предопределенных вариантов, например, шт., кг, л и т. д.). + - **`related_object`** (ForeignKey): Связь с объектом (`Object`), к которому относится товар. + - **`responsible_person`** (CharField): Ответственное лицо за товар. ## Сериализатор -1. **AuthorSerializer:** - - `username`: Имя пользователя. - - `bio`: Биография пользователя. - - `image`: Изображение пользователя. - - `following`: Подписка пользователя (булево значение). -2. **GoodsTypeSerializer:** - - `id`: Идентификатор типа имущества. - - `goodsTypeName`: Название типа имущества. - - `author`: Автор типа имущества (сериализатор `AuthorSerializer`). - - `createdAt`: Дата и время создания типа имущества. - - `updatedAt`: Дата и время последнего обновления типа имущества. -3. **ConsumableTypeSerializer:** - - `id`: Идентификатор типа расходуемых ТМЦ. - - `consumableTypeName`: Название типа расходуемых ТМЦ. - - `author`: Автор типа расходуемых ТМЦ (сериализатор `AuthorSerializer`). - - `createdAt`: Дата и время создания типа расходуемых ТМЦ. - - `updatedAt`: Дата и время последнего обновления типа расходуемых ТМЦ. -4. **GoodsSerializer:** - - `id`: Идентификатор имущества. - - `goods_type`: Тип имущества. - - `goodsName`: Название имущества. - - `goodsInventoryNumber`: Инвентарный номер имущества. - - `goodsDescription`: Описание имущества. - - `goodsPhoto`: Фотография имущества. - - `goodsConditionDescription`: Описание состояния имущества. - - `goodsDamageDateTime`: Дата и время обнаружения повреждения имущества. - - `goodsRelatedObject`: Объект, к которому относится имущество. - - `goodsResponsiblePerson`: Ответственное лицо за имущество. - - `goodsStatus`: Статус имущества. - - `author`: Автор имущества (сериализатор `AuthorSerializer`). - - `createdAt`: Дата и время создания имущества. - - `updatedAt`: Дата и время последнего обновления имущества. -5. **ConsumableSerializer:** - - `id`: Идентификатор расходуемого товара. - - `consumable_type`: Тип расходуемого товара. - - `consumableName`: Название расходуемого товара. - - `consumableDescription`: Описание расходуемого товара. - - `consumablePhoto`: Фотография расходуемого товара. - - `consumableQuantity`: Количество расходуемого товара. - - `consumableQuantityUnit`: Единица измерения количества товара. - - `consumableRelatedObject`: Объект, к которому относится товар. - - `consumableResponsiblePerson`: Ответственное лицо за товар. - - `author`: Автор расходуемого товара (сериализатор `AuthorSerializer`). - - `createdAt`: Дата и время создания расходуемого товара. - - `updatedAt`: Дата и время последнего обновления расходуемого товара. +1. **GoodsTypeSerializer:** + - `id` (IntegerField): Идентификатор типа имущества. + - `goodsTypeName` (CharField): Название типа имущества. + - `author` (SerializerMethodField): Автор типа имущества (сериализатор `AuthorSerializer`). + - `createdAt` (DateTimeField): Дата и время создания типа имущества. + - `updatedAt` (DateTimeField): Дата и время последнего обновления типа имущества. +2. **ConsumableTypeSerializer:** + - `id` (IntegerField): Идентификатор типа расходуемых ТМЦ. + - `consumableTypeName` (CharField): Название типа расходуемых ТМЦ. + - `author` (SerializerMethodField): Автор типа расходуемых ТМЦ (сериализатор `AuthorSerializer`). + - `createdAt` (DateTimeField): Дата и время создания типа расходуемых ТМЦ. + - `updatedAt` (DateTimeField): Дата и время последнего обновления типа расходуемых ТМЦ. + +3. **GoodsSerializer:** + - `id` (IntegerField): Идентификатор имущества. + - `goods_type` (GoodsTypeSerializer): Тип имущества. + - `goodsName` (CharField): Название имущества. + - `goodsInventoryNumber` (CharField): Инвентарный номер имущества. + - `goodsDescription` (TextField): Описание имущества. + - `goodsPhoto` (ManyToManyField): Фотография имущества. + - `goodsConditionDescription` (TextField): Описание состояния имущества. + - `goodsDamageDateTime` (DateTimeField): Дата и время обнаружения повреждения имущества. + - `goodsRelatedObject` (ForeignKey): Объект, к которому относится имущество. + - `goodsResponsiblePerson` (CharField): Ответственное лицо за имущество. + - `goodsStatus` (CharField): Статус имущества. + - `author` (SerializerMethodField): Автор имущества (сериализатор `AuthorSerializer`). + - `createdAt` (DateTimeField): Дата и время создания имущества. + - `updatedAt` (DateTimeField): Дата и время последнего обновления имущества. + +4. **ConsumableSerializer:** + - `id` (IntegerField): Идентификатор расходуемого товара. + - `consumable_type` (ConsumableTypeSerializer): Тип расходуемого товара. + - `consumableName` (CharField): Название расходуемого товара. + - `consumableDescription` (TextField): Описание расходуемого товара. + - `consumablePhoto` (ManyToManyField): Фотография расходуемого товара. + - `consumableQuantity` (PositiveIntegerField): Количество расходуемого товара. + - `consumableQuantityUnit` (CharField): Единица измерения количества товара. + - `consumableRelatedObject` (ForeignKey): Объект, к которому относится товар. + - `consumableResponsiblePerson` (CharField): Ответственное лицо за товар. + - `author` (SerializerMethodField): Автор расходуемого товара (сериализатор `AuthorSerializer`). + - `createdAt` (DateTimeField): Дата и время создания расходуемого товара. + - `updatedAt` (DateTimeField): Дата и время последнего обновления расходуемого товара. ## Маршрутизатор 1. `router.register('goods', GoodsView, basename='goods')`: Регистрация представления `GoodsView` в маршрутизаторе под именем `'goods'`, с указанием базового имени `'goods'`. Это создаст URL-адреса для операций CRUD (создание, чтение, обновление, удаление) имущества. @@ -86,30 +86,33 @@ 1. **GoodsView:** - **Описание:** Это представление, использующее `ModelViewSet`, обрабатывает операции CRUD для имущества. - **Методы:** - - **list:** Возвращает список имущества. - - **create:** Создает новое имущество. - - **retrieve:** Возвращает конкретное имущество по его идентификатору. - - **update:** Обновляет существующее имущество. - - **destroy:** Удаляет имущество. + - **`list`:** Возвращает список имущества. + - **`create`:** Создает новое имущество. + - **`retrieve`:** Возвращает конкретное имущество по его идентификатору. + - **`update`:** Обновляет существующее имущество. + - **`destroy`:** Удаляет имущество. - **Права доступа:** Только аутентифицированные пользователи имеют доступ к этим методам. + 2. **GoodsTypeView:** - **Описание:** Это представление, также использующее `ModelViewSet`, для операций CRUD с типами имущества. - **Методы:** - - **list:** Возвращает список типов имущества. - - **create:** Создает новый тип имущества. - - **destroy:** Удаляет тип имущества. + - **`list`:** Возвращает список типов имущества. + - **`create`:** Создает новый тип имущества. + - `**destroy`:** Удаляет тип имущества. - **Права доступа:** Только аутентифицированные пользователи могут выполнять действия с типами имущества. + 3. **ConsumableTypeView:** - **Описание:** Представление для операций CRUD с типами расходуемых товаров. - **Методы:** - - **list:** Возвращает список типов расходуемых товаров. - - **create:** Создает новый тип расходуемого товара. - - **destroy:** Удаляет тип расходуемого товара. + - **`list`:** Возвращает список типов расходуемых товаров. + - `**create`:** Создает новый тип расходуемого товара. + - **`destroy`:** Удаляет тип расходуемого товара. - **Права доступа:** Только аутентифицированные пользователи имеют доступ к этим методам. + 4. **ConsumableView:** - **Описание:** Представление для операций CRUD с расходуемыми товарами. - **Методы:** - - **list:** Возвращает список расходуемых товаров. - - **create:** Создает новый расходуемый товар. - - **destroy:** Удаляет расходуемый товар. + - **`list`:** Возвращает список расходуемых товаров. + - **`create`:** Создает новый расходуемый товар. + - **`destroy`:** Удаляет расходуемый товар. - **Права доступа:** Только аутентифицированные пользователи могут управлять расходуемыми товарами. \ No newline at end of file diff --git a/BACKEND/HISTORIES.md b/BACKEND/HISTORIES.md index f801482..4ab207b 100644 --- a/BACKEND/HISTORIES.md +++ b/BACKEND/HISTORIES.md @@ -1,27 +1,31 @@ ## Модель -1. **TimeStampedModel:** - - **created_at:** DateTimeField, автоматически устанавливает дату и время создания объекта. - - **updated_at:** DateTimeField, автоматически обновляется при каждом сохранении объекта. - - **author:** ForeignKey, связывает с моделью пользователя, который создал объект. -2. **MaintenanceHistory:** - - **object:** ForeignKey, связь с объектом, к которому относится история обслуживания. - - **start_time:** DateTimeField, дата начала обслуживания. - - **end_time:** DateTimeField, дата окончания обслуживания (может быть пустым). - - **maintenance_text:** TextField, текстовое описание обслуживания. - - **photo_history_maintenance:** ManyToManyField, связь с фотографиями отчета об обслуживании. -3. **TechnicalWorkHistory:** - - **object:** ForeignKey, связь с объектом, к которому относится история технических работ. - - **start_date:** DateField, дата начала технических работ. - - **end_date:** DateField, дата окончания технических работ. - - **description:** TextField, описание выполненных работ. - - **photo_history_technical_work:** ManyToManyField, связь с фотографиями отчета о технических работах. -4. **MeteringDevice:** - - **object:** ForeignKey, связь с объектом, к которому относится прибор учета. - - **start_time:** DateTimeField, дата начала обслуживания прибора учета. - - **end_time:** DateTimeField, дата окончания обслуживания прибора учета (может быть пустым). - - **maintenance_text:** TextField, текстовое описание обслуживания прибора учета. - - **[показания по различным видам учета]:** FloatField, поля для хранения показаний по различным видам учета. - - **photo_history_metering_device:** ManyToManyField, связь с фотографиями показаний прибора учета. +1. **MaintenanceHistory:** + - **`object`** (ForeignKey): Связь с объектом, к которому относится история обслуживания. + - **`start_time`** (DateTimeField): Дата начала обслуживания. + - **`end_time`** (DateTimeField): Дата окончания обслуживания (может быть пустым). + - **`maintenance_text`** (TextField): Текстовое описание обслуживания. + - **`photo_history_maintenance`** (ManyToManyField): Связь с фотографиями отчета об обслуживании. + +2. **TechnicalWorkHistory:** + - **`object`** (ForeignKey): Связь с объектом, к которому относится история технических работ. + - **`start_date`** (DateField): Дата начала технических работ. + - **`end_date`** (DateField): Дата окончания технических работ. + - **`description`** (TextField): Описание выполненных работ. + - **`photo_history_technical_work`** (ManyToManyField): Связь с фотографиями отчета о технических работах. + +3. **MeteringDevice:** + - **`object`** (ForeignKey): Связь с объектом, к которому относится история технических работ. + - **`start_time`** (DateTimeField): дата начала обслуживания прибора учета. + - **`end_time`** (DateTimeField): дата окончания обслуживания прибора учета (может быть пустым). + - **`maintenance_text`** (TextField): Текстовое описание проведенного обслуживания прибора учета. Здесь можно указать основные детали и результаты работ. + - **`electricity_reading`** (FloatField): Показание по электроэнергии, которое фиксируется при обслуживании прибора учета электроэнергии. + - **`water_reading`** (FloatField): Показание по воде, которое фиксируется при обслуживании прибора учета потребления воды. + - **`security_reading`** (FloatField): Показание по охране, которое фиксируется при обслуживании прибора учета системы безопасности. + - **`internet_reading`** (FloatField): Показание по интернету, которое фиксируется при обслуживании прибора учета интернет-трафика. + - **`gas_reading`** (FloatField): Показание по газу, которое фиксируется при обслуживании прибора учета газа. + - **`garbage_disposal_reading`** (FloatField): Показание по вывозу мусора, которое фиксируется при обслуживании прибора учета мусора. + - **`capital_repairs_reading`** (FloatField): Показание по капитальным ремонтам, которое фиксируется при обслуживании прибора учета капитальных ремонтов. + - **`photo_history_metering_device`** (ManyToManyField): Связь с фотографиями показаний прибора учета. Здесь можно хранить изображения или документацию о показаниях прибора учета. ## Сериализатор ## Маршрутизатор diff --git a/BACKEND/MEDIA.md b/BACKEND/MEDIA.md index 326beb8..0a8318b 100644 --- a/BACKEND/MEDIA.md +++ b/BACKEND/MEDIA.md @@ -1,29 +1,26 @@ ## Модель статьи 1. **TimeStampedModel:** - - Абстрактная базовая модель для добавления автора, полей времени создания и изменения к другим моделям. - - `created_at`: Дата и время создания объекта. - - `updated_at`: Дата и время последнего обновления объекта. - - `author`: Автор объекта. - - `file_name`: Имя файла объекта. - - Метод `save`: Переопределен для автоматической установки даты создания и обновления. - - Метод `generate_file_url`: Генерирует URL файла. -2. **Images:** - - Модель файлов изображений. - - `file`: Поле для загрузки изображения. - - `history`: Поле для хранения истории изменений. - - Метод `save`: Дополнительно устанавливает имя файла с префиксом "Image_". - - Метод `clean`: Проверяет допустимость формата изображения. -3. **Videos:** - - Модель файлов видео. - - `file`: Поле для загрузки видео. - - `history`: Поле для хранения истории изменений. - - Метод `save`: Дополнительно устанавливает имя файла с префиксом "Video_". -4. **OtherFiles:** - - Модель файлов всех типов документов. - - `file`: Поле для загрузки документа. - - `history`: Поле для хранения истории изменений. - - Метод `save`: Дополнительно устанавливает имя файла с префиксом "Document_". + Добавлены поля к стандартному набору модели. + - **`file_name`** (CharField): Имя файла объекта. + - **Метод `save`**: Переопределен для автоматической установки даты создания и обновления. + - **Метод `generate_file_url`**: Генерирует URL файла. +2. **Images:** + - Модель для файлов изображений. + - **`file`** (ImageField): Поле для загрузки изображения. + - **`history`** (HistoricalRecords): Поле для хранения истории изменений. + - **Метод `save`**: Дополнительно устанавливает имя файла с префиксом "Image_". + +3. **Videos:** + - Модель для файлов видео. + - **`file`** (FileField): Поле для загрузки видео. + - **`history`** (HistoricalRecords): Поле для хранения истории изменений. + - **Метод `save`**: Дополнительно устанавливает имя файла с префиксом "Video_". + +4. **OtherFiles:** + - **`file`** (FileField): Поле для загрузки видео. + - **`history`** (HistoricalRecords): Поле для хранения истории изменений. + - **Метод `save`**: Дополнительно устанавливает имя файла с префиксом "Document_". ## Валидатор данных 1. **validate_max_file_size:** diff --git a/BACKEND/PROPERTIES.md b/BACKEND/PROPERTIES.md index 7550ae5..61e61f8 100644 --- a/BACKEND/PROPERTIES.md +++ b/BACKEND/PROPERTIES.md @@ -51,71 +51,79 @@ - Имеет поля времени создания и обновления. ## Сериализатор 1. **ObjectTypeNewSerializer** - - objectType (CharField): Строковое представление типа объекта. - - nameObjectType (CharField): Название типа объекта. - - author (AuthorSerializer): Сериализатор для автора объекта. - - createdAt (DateTimeField): Дата и время создания объекта. - - updatedAt (DateTimeField): Дата и время последнего обновления объекта. + - `objectType` (CharField): Строковое представление типа объекта. + - `nameObjectType` (CharField): Название типа объекта. + - `author` (AuthorSerializer): Сериализатор для автора объекта. + - `createdAt` (DateTimeField): Дата и время создания объекта. + - `updatedAt` (DateTimeField): Дата и время последнего обновления объекта. + 2. **PurposePremisesSerializer** - - namePurposePremises (CharField): Название назначения помещения. - - author (AuthorSerializer): Сериализатор для автора назначения помещения. - - createdAt (DateTimeField): Дата и время создания назначения помещения. - - updatedAt (DateTimeField): Дата и время последнего обновления назначения помещения. + - `namePurposePremises` (CharField): Название назначения помещения. + - `author` (AuthorSerializer): Сериализатор для автора назначения помещения. + - `createdAt` (DateTimeField): Дата и время создания назначения помещения. + - `updatedAt` (DateTimeField): Дата и время последнего обновления назначения помещения. + 3. **RoomSerializer** - - roomNumber (CharField): Номер помещения. - - roomEntrance (CharField): Вход помещения. - - roomArea (CharField): Площадь помещения. - - author (AuthorSerializer): Сериализатор для автора помещения. - - createdAt (DateTimeField): Дата и время создания помещения. - - updatedAt (DateTimeField): Дата и время последнего обновления помещения. + - `roomNumber` (CharField): Номер помещения. + - `roomEntrance` (CharField): Вход помещения. + - `roomArea` (CharField): Площадь помещения. + - `author` (AuthorSerializer): Сериализатор для автора помещения. + - `createdAt` (DateTimeField): Дата и время создания помещения. + - `updatedAt` (DateTimeField): Дата и время последнего обновления помещения. + 4. **FloorSerializer** - - floorNumber (IntegerField): Номер этажа. - - floor_plan_image (ImagePropirtiesFloorPlanSerializer): Сериализатор для изображений плана этажа. - - author (AuthorSerializer): Сериализатор для автора этажа. - - createdAt (DateTimeField): Дата и время создания этажа. - - updatedAt (DateTimeField): Дата и время последнего обновления этажа. + - `floorNumber` (IntegerField): Номер этажа. + - `floor_plan_image` (ImagePropirtiesFloorPlanSerializer): Сериализатор для изображений плана этажа. + - `author` (AuthorSerializer): Сериализатор для автора этажа. + - `createdAt` (DateTimeField): Дата и время создания этажа. + - `updatedAt` (DateTimeField): Дата и время последнего обновления этажа. + 5. **EntranceSerializer** - - entranceNumber (IntegerField): Номер подъезда. - - entrancePlanImage (ImagePropirtiesEntrancePlanSerializer): Сериализатор для изображений плана подъезда. - - author (AuthorSerializer): Сериализатор для автора подъезда. - - createdAt (DateTimeField): Дата и время создания подъезда. - - updatedAt (DateTimeField): Дата и время последнего обновления подъезда. + - `entranceNumber` (IntegerField): Номер подъезда. + - `entrancePlanImage` (ImagePropirtiesEntrancePlanSerializer): Сериализатор для изображений плана подъезда. + - `author` (AuthorSerializer): Сериализатор для автора подъезда. + - `createdAt` (DateTimeField): Дата и время создания подъезда. + - `updatedAt` (DateTimeField): Дата и время последнего обновления подъезда. + 6. **BuildingSerializer** - - nombeBuilding (CharField): Номер здания. - - buildingName (CharField): Название здания. - - yearBuilt (CharField): Год постройки здания. - - author (AuthorSerializer): Сериализатор для автора здания. - - createdAt (DateTimeField): Дата и время создания здания. - - updatedAt (DateTimeField): Дата и время последнего обновления здания. + - `nombeBuilding` (CharField): Номер здания. + - `buildingName` (CharField): Название здания. + - `yearBuilt` (CharField): Год постройки здания. + - `author` (AuthorSerializer): Сериализатор для автора здания. + - `createdAt` (DateTimeField): Дата и время создания здания. + - `updatedAt` (DateTimeField): Дата и время последнего обновления здания. + 7. **TerritorySerializer** - - territoryDistrict (CharField): Район территории. - - territoryMicrodistrict (CharField): Микрорайон территории. - - author (AuthorSerializer): Сериализатор для автора территории. - - createdAt (DateTimeField): Дата и время создания территории. - - updatedAt (DateTimeField): Дата и время последнего обновления территории. + - `territoryDistrict` (CharField): Район территории. + - `territoryMicrodistrict` (CharField): Микрорайон территории. + - `author` (AuthorSerializer): Сериализатор для автора территории. + - `createdAt` (DateTimeField): Дата и время создания территории. + - `updatedAt` (DateTimeField): Дата и время последнего обновления территории. + 8. **ClusterSerializer** - - clusterRegion (CharField): Регион кластера. - - clusterCity (CharField): Город кластера. - - author (AuthorSerializer): Сериализатор для автора кластера. - - createdAt (DateTimeField): Дата и время создания кластера. - - updatedAt (DateTimeField): Дата и время последнего обновления кластера. + - `clusterRegion` (CharField): Регион кластера. + - `clusterCity` (CharField): Город кластера. + - `author` (AuthorSerializer): Сериализатор для автора кластера. + - `createdAt` (DateTimeField): Дата и время создания кластера. + - `updatedAt` (DateTimeField): Дата и время последнего обновления кластера. + 9. **ObjectSerializer** - - objectAddress (CharField): Адрес объекта. - - cadastreNumber (CharField): Кадастровый номер объекта. - - purposePremises (CharField): Назначение помещения объекта. - - technicalFeatures (CharField): Технические особенности объекта. - - objectFiles (FileField): Файлы, связанные с объектом. - - objectImages (ImageField): Изображения объекта. - - objectVideos (FileField): Видео, связанные с объектом. - - room (PrimaryKeyRelatedField): Связанные помещения объекта. - - floor (PrimaryKeyRelatedField): Связанные этажи объекта. - - entrance (PrimaryKeyRelatedField): Связанные подъезды объекта. - - building (PrimaryKeyRelatedField): Связанные здания объекта. - - territory (PrimaryKeyRelatedField): Связанные территории объекта. - - cluster (PrimaryKeyRelatedField): Связанные кластеры объекта. - - author (AuthorSerializer): Сериализатор для автора объекта. - - createdAt (DateTimeField): Дата и время создания объекта. - - updatedAt (DateTimeField): Дата и время последнего обновления объекта. + - `objectAddress` (CharField): Адрес объекта. + - `cadastreNumber` (CharField): Кадастровый номер объекта. + - `purposePremises` (CharField): Назначение помещения объекта. + - `technicalFeatures` (CharField): Технические особенности объекта. + - `objectFiles` (FileField): Файлы, связанные с объектом. + - `objectImages` (ImageField): Изображения объекта. + - `objectVideos` (FileField): Видео, связанные с объектом. + - `room` (PrimaryKeyRelatedField): Связанные помещения объекта. + - `floor` (PrimaryKeyRelatedField): Связанные этажи объекта. + - `entrance` (PrimaryKeyRelatedField): Связанные подъезды объекта. + - `building` (PrimaryKeyRelatedField): Связанные здания объекта. + - `territory` (PrimaryKeyRelatedField): Связанные территории объекта. + - `cluster` (PrimaryKeyRelatedField): Связанные кластеры объекта. + - `author` (AuthorSerializer): Сериализатор для автора объекта. + - `createdAt` (DateTimeField): Дата и время создания объекта. + - `updatedAt` (DateTimeField): Дата и время последнего обновления объекта. ## Маршрутизатор 1. **properties-objecttypenew/** - URL для работы с типами объектов: @@ -154,48 +162,56 @@ - `retrieve`: Получает конкретный тип объекта по его идентификатору. - `update`: Обновляет данные о типе объекта. - `destroy`: Удаляет тип объекта. + 2. **PurposePremisesViewSet**: - `list`: Получает список всех назначений помещений или создает новое назначение помещения. - `create`: Создает новое назначение помещения. - `retrieve`: Получает конкретное назначение помещения по его идентификатору. - `update`: Обновляет данные о назначении помещения. - `destroy`: Удаляет назначение помещения. + 3. **RoomViewSet**: - `list`: Получает список всех помещений или создает новое помещение. - `create`: Создает новое помещение. - `retrieve`: Получает конкретное помещение по его идентификатору. - `update`: Обновляет данные о помещении. - `destroy`: Удаляет помещение. + 4. **FloorViewSet**: - `list`: Получает список всех этажей или создает новый этаж. - `create`: Создает новый этаж. - `retrieve`: Получает конкретный этаж по его идентификатору. - `update`: Обновляет данные об этаже. - `destroy`: Удаляет этаж. + 5. **EntranceViewSet**: - `list`: Получает список всех подъездов или создает новый подъезд. - `create`: Создает новый подъезд. - `retrieve`: Получает конкретный подъезд по его идентификатору. - `update`: Обновляет данные о подъезде. - `destroy`: Удаляет подъезд. + 6. **BuildingViewSet**: - `list`: Получает список всех зданий или создает новое здание. - `create`: Создает новое здание. - `retrieve`: Получает конкретное здание по его идентификатору. - `update`: Обновляет данные о здании. - `destroy`: Удаляет здание. + 7. **TerritoryViewSet**: - `list`: Получает список всех территорий или создает новую территорию. - `create`: Создает новую территорию. - `retrieve`: Получает конкретную территорию по ее идентификатору. - `update`: Обновляет данные о территории. - `destroy`: Удаляет территорию. + 8. **ClusterViewSet**: - `list`: Получает список всех кластеров или создает новый кластер. - `create`: Создает новый кластер. - `retrieve`: Получает конкретный кластер по его идентификатору. - `update`: Обновляет данные о кластере. - `destroy`: Удаляет кластер. + 9. **ObjectViewSet**: - `list`: Получает список всех объектов или создает новый объект. - `create`: Создает новый объект. @@ -203,10 +219,12 @@ - `update`: Обновляет данные об объекте. - `destroy`: Удаляет объект. ## Проверка введенных данных + 1. **validate_year(value)**: - Это функция-валидатор, которая принимает значение года в виде строки. - Она проверяет, что длина значения равна 4 символам и что значение состоит только из цифр. - Если условия не соблюдаются, функция поднимает исключение ValidationError с соответствующим сообщением об ошибке. + 2. **YearField(models.CharField)**: - Это класс, который определяет поле модели Django для хранения года. - Он наследуется от CharField и добавляет к нему функциональность валидации года. diff --git a/BACKEND/TEAMS.md b/BACKEND/TEAMS.md index 57b431f..1e746ee 100644 --- a/BACKEND/TEAMS.md +++ b/BACKEND/TEAMS.md @@ -5,42 +5,52 @@ GENDER_CHOICES = ( ('f', 'Женщина'), ) ## Модель команда -1. **first_name** (CharField): Имя пользователя (до 60 символов). -2. **last_name** (CharField): Фамилия пользователя (до 60 символов). -3. **middle_name** (CharField): Фамилия пользователя (до 60 символов). -4. **position** (CharField): Должность участника команды -5. **work_start_time** (DateField): Дата начала работы участника -6. **work_end_time** (DateField): Дата окончания работы участника -7. **mobile** (CharField): Мобильный номер участника. -8. **work_phone** (CharField): Рабочий телефон участника. -9. **internal_number** (CharField): Внутренний номер участника. -10. **email** (EmailField): Адрес электронной почты пользователя (уникальный). -11. **personal_email** (EmailField): Персональный e-mail участника. -12. **birth_date** (DateField): Дата рождения участника. -13. website (URLField): Сайт участника. +1. **`first_name`** (CharField): Имя пользователя (до 60 символов). +2. **`last_name`** (CharField): Фамилия пользователя (до 60 символов). +3. **`middle_name`** (CharField): Фамилия пользователя (до 60 символов). +4. **`position`** (CharField): Должность участника команды +5. **`work_start_time`** (DateField): Дата начала работы участника +6. **`work_end_time`** (DateField): Дата окончания работы участника +7. **`mobile`** (CharField): Мобильный номер участника. +8. **`work_phone`** (CharField): Рабочий телефон участника. +9. **`internal_number`** (CharField): Внутренний номер участника. +10. **`email`** (EmailField): Адрес электронной почты пользователя (уникальный). +11. **`personal_email`** (EmailField): Персональный e-mail участника. +12. `**birth_date**` (DateField): Дата рождения участника. +13. `website` (URLField): Сайт участника. ## Модель зона ответственности -1. **object_related** (ForeignKey): Связь с объектом. -2. **team_related** (ManyToManyField): Связь с участниками команды. +1. **`object_related`** (ForeignKey): Связь с объектом. +2. `**team_related**` (ManyToManyField): Связь с участниками команды. ## Сериализатор 1. **TeamSerializer**: - - `teamLastName`, `teamFirstName`, `teamMiddleName`: Поля для фамилии, имени и отчества команды. - - `teamBirthDate`: Поле для даты рождения команды. - - `teamPosition`: Поле для должности в команде. - - `teamWorkStartTime`, `teamWorkEndTime`: Поля для времени начала и окончания работы команды. - - `teamMobile`, `teamWorkPhone`, `teamInternalNumber`, `teamEmail`, `teamPersonalEmail`, `teamWebsite`: Поля для контактной информации команды. - - `author`: Ссылка на `AuthorSerializer` для получения информации об авторе команды. - - `createdAt`, `updatedAt`: Дата создания и последнего обновления команды. - - `create(self, validated_data)`: Метод для создания новой команды. - - `update(self, instance, validated_data)`: Метод для обновления существующей команды. -2. **WorkTeamZoneSerializer**: - - `object_related`: Связь с объектом через его идентификатор. - - `team_related`: Связь с командами через их идентификаторы (множественное). - - `author`: Ссылка на `AuthorSerializer` для получения информации об авторе зоны ответственности команды. - - `createdAt`, `updatedAt`: Дата создания и последнего обновления зоны ответственности команды. - - `create(self, validated_data)`: Метод для создания новой зоны ответственности команды. - - `update(self, instance, validated_data)`: Метод для обновления существующей зоны ответственности команды. + - `teamLastName` (CharField): Фамилия команды. + - `teamFirstName` (CharField): Имя команды. + - `teamMiddleName` (CharField): Отчество команды. + - `teamBirthDate` (DateField): Дата рождения команды. + - `teamPosition` (CharField): Должность в команде. + - `teamWorkStartTime` (TimeField): Время начала работы команды. + - `teamWorkEndTime` (TimeField): Время окончания работы команды. + - `teamMobile` (CharField): Мобильный телефон команды. + - `teamWorkPhone` (CharField): Рабочий телефон команды. + - `teamInternalNumber` (CharField): Внутренний номер команды. + - `teamEmail` (EmailField): Электронная почта команды. + - `teamPersonalEmail` (EmailField): Личная электронная почта команды. + - `teamWebsite` (URLField): Веб-сайт команды. + - `author` (AuthorSerializer): Сериализатор для автора команды. + - `createdAt` (DateTimeField): Дата создания команды. + - `updatedAt` (DateTimeField): Дата последнего обновления команды. + - `create(self, validated_data)`: Метод для создания новой команды. + - `update(self, instance, validated_data)`: Метод для обновления существующей команды. +2. **WorkTeamZoneSerializer**: + - `object_related` (PrimaryKeyRelatedField): Связь с объектом через его идентификатор. + - `team_related` (PrimaryKeyRelatedField, many=True): Связь с командами через их идентификаторы (множественное). + - `author` (AuthorSerializer): Сериализатор для автора зоны ответственности команды. + - `createdAt` (DateTimeField): Дата создания зоны ответственности команды. + - `updatedAt` (DateTimeField): Дата последнего обновления зоны ответственности команды. + - `create(self, validated_data)`: Метод для создания новой зоны ответственности команды. + - `update(self, instance, validated_data)`: Метод для обновления существующей зоны ответственности команды. ## Маршрутизатор 1. `router.register('teams', TeamViewSet, basename='teams')`: Регистрация представления `TeamViewSet` в маршрутизаторе под именем `'teams'`, с указанием базового имени `'teams'`. Это создаст URL-адреса для операций CRUD (создание, чтение, обновление, удаление) команд. @@ -57,6 +67,7 @@ GENDER_CHOICES = ( - `permission_classes = [IsAuthenticatedOrReadOnly]`: Определение разрешений доступа, требующих аутентификации для изменения данных и только чтения без аутентификации. - `lookup_field = 'id'`: Использование поля 'id' для поиска объектов. - `http_method_names = ['get', 'post', 'put', 'patch', 'delete']`: Разрешенные HTTP-методы для данного представления. + 2. Определение методов для обработки различных HTTP-запросов: - `get_permissions`: Переопределение метода для применения разных разрешений в зависимости от типа действия. - `list`: Метод для получения списка всех команд. @@ -64,6 +75,7 @@ GENDER_CHOICES = ( - `retrieve`: Метод для получения информации о конкретной команде. - `update`: Метод для обновления информации о команде. - `destroy`: Метод для удаления команды. + 3. Аналогично определено представление `WorkTeamZoneViewSet` для модели `WorkTeamZone`. - `queryset = WorkTeamZone.objects.all()`: Получение всех объектов модели `WorkTeamZone` из базы данных. - `serializer_class = WorkTeamZoneSerializer`: Использование сериализатора `WorkTeamZoneSerializer`. diff --git a/BACKEND/TENANTS.md b/BACKEND/TENANTS.md index b312f6a..6a5f9ae 100644 --- a/BACKEND/TENANTS.md +++ b/BACKEND/TENANTS.md @@ -1,10 +1,3 @@ -## Абстрактный класс `TimeStampedModel`: - -Этот класс добавляет автоматические поля времени создания (`created_at`), времени обновления (`updated_at`) и ссылку на автора (`author`) ко всем моделям, которые наследуют его. -1. `created_at` (DateTimeField): Дата и время создания объекта. -2. `updated_at` (DateTimeField): Дата и время последнего обновления объекта. -3. `author` (ForeignKey): Ссылка на пользователя, создавшего объект. - ## Кортеж типа организации INDIVIDUAL = 'individual' LEGAL_ENTITY = 'legal_entity' @@ -53,24 +46,40 @@ ORGANIZATION_SUBTYPE_CHOICES = ( ## Сериализатор 1. **TenantSerializer**: - - `tenantType`: Поле, которое отображает тип арендатора. - - `organizationType`: Поле, которое отображает тип организации (юридического лица). - - `tradeName`: Название арендуемой организацией единицы недвижимости. - - `tenantName`, `tenantSurname`, `tenantPatronymic`: Имя, фамилия и отчество арендатора (физического лица). - - `tenantPassportSeries`, `tenantPassportNumber`, `tenantPassportIssuedBy`, `tenantPassportIssuedDate`: Серия и номер паспорта, кем выдан и дата выдачи (физического лица). - - `tenantRegistration`: Прописка арендатора (физического лица) или дополнительная информация (юридического лица). - - `tenantCompanyName`, `tenantInn`, `KPP`, `tenantOgrn`, `bankDetails`: Название организации, ИНН, КПП, ОГРН и реквизиты банка (юридического лица). - - `additionalInfo`: Дополнительная информация о арендаторе. - - `tenantFile`: Скан документов арендатора. - - `author`: Информация об авторе (сериализатор `AuthorSerializer`). - - `createdAt`, `updatedAt`: Дата создания и обновления записи. -1. **ContactSerializer**: - - `contactTypeTenant`: Тип контакта. - - `attitudeContactTypeTenant`: Атрибут контакта. - - `valueTenant`: Значение контакта. - - `firstNameTenant`, `lastNameTenant`, `organizationTenant`, `jobTitleTenant`, `addressTenant`: Имя, фамилия, организация, должность и адрес (контактные данные арендатора). - - `author`: Информация об авторе (сериализатор `AuthorSerializer`). - - `createdAt`, `updatedAt`: Дата создания и обновления записи. + - `tenantType` (CharField): Тип арендатора. + - `organizationType` (CharField): Тип организации (юридического лица). + - `tradeName` (CharField): Название арендуемой организацией единицы недвижимости. + - `tenantName` (CharField): Имя арендатора (физического лица). + - `tenantSurname` (CharField): Фамилия арендатора (физического лица). + - `tenantPatronymic` (CharField): Отчество арендатора (физического лица). + - `tenantPassportSeries` (CharField): Серия паспорта арендатора (физического лица). + - `tenantPassportNumber` (CharField): Номер паспорта арендатора (физического лица). + - `tenantPassportIssuedBy` (CharField): Кем выдан паспорт арендатора (физического лица). + - `tenantPassportIssuedDate` (DateField): Дата выдачи паспорта арендатора (физического лица). + - `tenantRegistration` (TextField): Прописка арендатора (физического лица) или дополнительная информация (юридического лица). + - `tenantCompanyName` (CharField): Название организации арендатора (юридического лица). + - `tenantInn` (CharField): ИНН организации арендатора (юридического лица). + - `KPP` (CharField): КПП организации арендатора (юридического лица). + - `tenantOgrn` (CharField): ОГРН организации арендатора (юридического лица). + - `bankDetails` (CharField): Реквизиты банка организации арендатора (юридического лица). + - `additionalInfo` (TextField): Дополнительная информация о арендаторе. + - `tenantFile` (FileField): Скан документов арендатора. + - `author` (AuthorSerializer): Информация об авторе. + - `createdAt` (DateTimeField): Дата создания записи. + - `updatedAt` (DateTimeField): Дата обновления записи. + +2. **ContactSerializer**: + - `contactTypeTenant` (CharField): Тип контакта арендатора. + - `attitudeContactTypeTenant` (CharField): Атрибут контакта арендатора. + - `valueTenant` (CharField): Значение контакта арендатора. + - `firstNameTenant` (CharField): Имя арендатора (физического лица). + - `lastNameTenant` (CharField): Фамилия арендатора (физического лица). + - `organizationTenant` (CharField): Название организации арендатора (юридического лица). + - `jobTitleTenant` (CharField): Должность арендатора (юридического лица). + - `addressTenant` (CharField): Адрес арендатора. + - `author` (AuthorSerializer): Информация об авторе. + - `createdAt` (DateTimeField): Дата создания записи. + - `updatedAt` (DateTimeField): Дата обновления записи. ## Маршрутизатор @@ -91,20 +100,24 @@ ORGANIZATION_SUBTYPE_CHOICES = ( - `lookup_field`: Поле, используемое для поиска объектов `Tenant`. - `filterset_class`: Фильтры для списка арендаторов. - `http_method_names`: Определяет доступные методы HTTP (GET, POST, PUT, DELETE). + 2. **Методы TenantView:** - `list`: Получает список арендаторов. - `create`: Создает нового арендатора. - `retrieve`: Получает детали конкретного арендатора. - `update`: Обновляет данные арендатора. - `destroy`: Удаляет арендатора. + 3. **ContactTenantViewSet:** - Представление для работы с контактами арендаторов. - `queryset`: Устанавливает все объекты `Contact` в качестве запроса по умолчанию. - `serializer_class`: Использует `ContactSerializer` для сериализации и десериализации данных. - `permission_classes`: Устанавливает разрешения для доступа к представлениям (в данном случае, только аутентифицированные пользователи). + 4. **Методы ContactTenantViewSet:** - `list`: Получает список контактов для конкретного арендатора. - `post`: Создает новый контакт для арендатора. + 5. **DeleteContactTenantView:** - Представление для удаления контакта арендатора. - `destroy`: Удаляет контакт. @@ -115,6 +128,7 @@ ORGANIZATION_SUBTYPE_CHOICES = ( - Разрешение для проверки доступа к объектам на основе их владельца или участника. - `has_object_permission`: Метод, который проверяет разрешение на доступ к конкретному объекту. - Разрешает доступ только для безопасных методов (GET, HEAD, OPTIONS) или если пользователь является владельцем объекта. + 2. **IsOwnerAndAdmin:** - Разрешение, позволяющее только авторам объектов Tenant и пользователям с группой 'admin' доступ к операциям CRUD. - `has_permission`: Метод, который проверяет разрешение на доступ к представлению (view), основанное на группе пользователя. diff --git a/BACKEND/TODOS.md b/BACKEND/TODOS.md index 2806465..e587c65 100644 --- a/BACKEND/TODOS.md +++ b/BACKEND/TODOS.md @@ -1,4 +1,3 @@ -# Описание приложения ### Кортежи статуса задачи TASK_STATUS = ( ('New', 'Новая'), @@ -13,51 +12,55 @@ PRIORITY = ( ('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. **`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`, которое является списком строк. - +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): Количество наблюдателей. ## Маршрутизатор -``` -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`.). @@ -71,33 +74,12 @@ todo_router.register('todos', views.TodoView, basename='todos') todo_router.regi - Использует `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**: + +1. **CanViewTodoDetail**: - Позволяет просмотр деталей задачи автору, соисполнителям, поставщикам, наблюдателям и избранным. - Метод `has_object_permission` проверяет, что пользователь является автором задачи, соисполнителем, поставщиком, наблюдателем или избранным. \ No newline at end of file diff --git a/BACKEND/Заметки для решения задач.md b/BACKEND/Заметки для решения задач.md index 3e30ffb..b5d7294 100644 --- a/BACKEND/Заметки для решения задач.md +++ b/BACKEND/Заметки для решения задач.md @@ -1,5 +1,4 @@ - Для начала, установим необходимые библиотеки: ``` diff --git a/BACKEND/Общие правила.md b/BACKEND/Общие правила.md index 0f67387..4a1b61e 100644 --- a/BACKEND/Общие правила.md +++ b/BACKEND/Общие правила.md @@ -1,4 +1,7 @@ ## ## Модель + +Этот класс добавляет автоматические поля времени создания (`created_at`), времени обновления (`updated_at`) и ссылку на автора (`author`) ко всем моделям, которые наследуют его. + 1. **TimeStampedModel:** - **created_at:** DateTimeField, автоматически устанавливает дату и время создания объекта. - **updated_at:** DateTimeField, автоматически обновляется при каждом сохранении объекта. @@ -11,6 +14,7 @@ - `image` (URLField): URL-адрес аватара пользователя. - `following` (SerializerMethodField): Показывает, подписан ли текущий пользователь на пользователя, представленного данным профилем. - Метод `get_following`: Возвращает булево значение, указывающее, подписан ли текущий пользователь на пользователя профиля. + 2. **TagSerializer**: - Сериализатор для добавления тегов. - Содержит единственное поле `tags`, которое является списком строк. @@ -43,9 +47,19 @@ def favorite(self, request, id=None): ## Маршрутизатор - `DefaultRouter` из библиотеки `rest_framework.routers` автоматически создает маршруты для представлений на основе их названий и методов (например, GET, POST, PUT, DELETE). За вас обрабатывается большая часть создания URL-путей, что делает код более модульным и менее подверженным ошибкам. + - **`register('tags', views.TagView)`**: Регистрация маршрута для представления `TagView` из `views.py` под именем 'tags'. ## Права доступа и разрешения 1. **IsAuthenticated**: Требует, чтобы пользователь был аутентифицирован для доступа к представлениям. + 2. **IsAuthenticatedOrReadOnly**: Позволяет только чтение неаутентифицированным пользователям. +3. **IsOwnerOrCollaborator**: + - Позволяет редактирование задач только владельцу задачи или соисполнителям. + - Метод `has_object_permission` проверяет, что запросы на изменение (методы, отличные от GET, HEAD и OPTIONS) выполняются только для владельца задачи или соисполнителей. + +4. **CanViewTodoDetail**: + - Позволяет просмотр деталей задачи автору, соисполнителям, поставщикам, наблюдателям и избранным. + - Метод `has_object_permission` проверяет, что пользователь является автором задачи, соисполнителем, поставщиком, наблюдателем или избранным. + diff --git a/FRONTEND/CONSTANTS.TS.md b/FRONTEND/CONSTANTS.TS.md index e737df4..7384964 100644 --- a/FRONTEND/CONSTANTS.TS.md +++ b/FRONTEND/CONSTANTS.TS.md @@ -4,4 +4,4 @@ 3. **`export const API_BASE_URL = 'https://fipi.pro/api';`**: Это текущее значение константы `API_BASE_URL`, которое указывает на базовый URL для взаимодействия с вашим API. -Эти константы могут быть использованы в приложении для обращения к API с помощью Axios или другой библиотеки HTTP. \ No newline at end of file +Эти константы могут быть использованы в приложении для обращения к API с помощью Feach или Axios библиотеки HTTP. \ No newline at end of file