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

213
BACKEND/PROPERTIES.md Normal file
View File

@@ -0,0 +1,213 @@
## Модель статьи
1. **ObjectTypeNew**:
- Представляет типы недвижимости.
- `object_type` (CharField): Тип недвижимости (выбор из предустановленных значений).
- `name` (CharField): Название подтипа объекта.
- Связь с `User` для автора объекта.
- Имеет поля времени создания и обновления.
2. **PurposePremises**:
- Представляет назначение объектов недвижимости.
- `name` (CharField): Название назначения объекта.
- Имеет поля времени создания и обновления.
3. **Room**:
- Представляет помещение на этаже.
- `room_number` (CharField): Номер помещения.
- `plan_number` (CharField): Номер на поэтажном плане.
- `entrance` (CharField): Тип входа (выбор из предустановленных значений).
- `area` (DecimalField): Площадь помещения.
- Связь с изображением помещения.
- Имеет поля времени создания и обновления.
4. **Floor**:
- Представляет этажи в подъезде.
- `floor_number` (IntegerField): Номер этажа.
- Связь с изображением плана этажа.
- Имеет поля времени создания и обновления.
5. **Entrance**:
- Представляет подъезды в здании.
- `entrance_number` (IntegerField): Номер подъезда.
- Связь с изображением плана подъезда.
- Имеет поля времени создания и обновления.
6. **Building**:
- Представляет здания.
- `nomber_building` (CharField): Номер дома.
- `building_name` (CharField): Название здания.
- `year_built` (YearField): Год постройки здания.
- Имеет поля времени создания и обновления.
7. **Territory**:
- Представляет территории.
- `district` (CharField): Район.
- `microdistrict` (CharField): Микрорайон.
- Имеет поля времени создания и обновления.
8. **Cluster**:
- Представляет кластеры.
- `region` (CharField): Регион.
- `city` (CharField): Город.
- Имеет поля времени создания и обновления.
9. **Object**:
- Представляет объект недвижимости.
- `address` (CharField): Адрес объекта.
- `cadastre_number` (CharField): Кадастровый номер.
- Связь с типом объекта, назначением объекта, помещениями, этажами, подъездами, зданиями, территориями, и кластерами.
- Имеет поля времени создания и обновления.
## Сериализатор
1. **ObjectTypeNewSerializer**
- objectType (CharField): Строковое представление типа объекта.
- nameObjectType (CharField): Название типа объекта.
- author (AuthorSerializer): Сериализатор для автора объекта.
- createdAt (DateTimeField): Дата и время создания объекта.
- updatedAt (DateTimeField): Дата и время последнего обновления объекта.
2. **PurposePremisesSerializer**
- namePurposePremises (CharField): Название назначения помещения.
- author (AuthorSerializer): Сериализатор для автора назначения помещения.
- createdAt (DateTimeField): Дата и время создания назначения помещения.
- updatedAt (DateTimeField): Дата и время последнего обновления назначения помещения.
3. **RoomSerializer**
- 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): Дата и время последнего обновления этажа.
5. **EntranceSerializer**
- entranceNumber (IntegerField): Номер подъезда.
- entrancePlanImage (ImagePropirtiesEntrancePlanSerializer): Сериализатор для изображений плана подъезда.
- author (AuthorSerializer): Сериализатор для автора подъезда.
- createdAt (DateTimeField): Дата и время создания подъезда.
- updatedAt (DateTimeField): Дата и время последнего обновления подъезда.
6. **BuildingSerializer**
- nombeBuilding (CharField): Номер здания.
- buildingName (CharField): Название здания.
- yearBuilt (CharField): Год постройки здания.
- author (AuthorSerializer): Сериализатор для автора здания.
- createdAt (DateTimeField): Дата и время создания здания.
- updatedAt (DateTimeField): Дата и время последнего обновления здания.
7. **TerritorySerializer**
- territoryDistrict (CharField): Район территории.
- territoryMicrodistrict (CharField): Микрорайон территории.
- author (AuthorSerializer): Сериализатор для автора территории.
- createdAt (DateTimeField): Дата и время создания территории.
- updatedAt (DateTimeField): Дата и время последнего обновления территории.
8. **ClusterSerializer**
- 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): Дата и время последнего обновления объекта.
## Маршрутизатор
1. **properties-objecttypenew/** - URL для работы с типами объектов:
- GET: Получить список всех типов объектов или создать новый тип объекта.
- POST: Создать новый тип объекта.
2. **properties-purposepremises/** - URL для работы с назначениями помещений:
- GET: Получить список всех назначений помещений или создать новое назначение помещения.
- POST: Создать новое назначение помещения.
3. **properties-room/** - URL для работы с помещениями:
- GET: Получить список всех помещений или создать новое помещение.
- POST: Создать новое помещение.
4. **properties-floor/** - URL для работы с этажами:
- GET: Получить список всех этажей или создать новый этаж.
- POST: Создать новый этаж.
5. **properties-entrance/** - URL для работы с подъездами:
- GET: Получить список всех подъездов или создать новый подъезд.
- POST: Создать новый подъезд.
6. **properties-building/** - URL для работы со зданиями:
- GET: Получить список всех зданий или создать новое здание.
- POST: Создать новое здание.
7. **properties-territory/** - URL для работы с территориями:
- GET: Получить список всех территорий или создать новую территорию.
- POST: Создать новую территорию.
8. **properties-cluster/** - URL для работы с кластерами:
- GET: Получить список всех кластеров или создать новый кластер.
- POST: Создать новый кластер.
9. **properties-object/** - URL для работы с объектами:
- GET: Получить список всех объектов или создать новый объект.
- POST: Создать новый объект.
## Контроллер
1. **ObjectTypeNewViewSet**:
- `list`: Получает список всех типов объектов или создает новый тип объекта.
- `create`: Создает новый тип объекта.
- `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`: Создает новый объект.
- `retrieve`: Получает конкретный объект по его идентификатору.
- `update`: Обновляет данные об объекте.
- `destroy`: Удаляет объект.
## Проверка введенных данных
1. **validate_year(value)**:
- Это функция-валидатор, которая принимает значение года в виде строки.
- Она проверяет, что длина значения равна 4 символам и что значение состоит только из цифр.
- Если условия не соблюдаются, функция поднимает исключение ValidationError с соответствующим сообщением об ошибке.
2. **YearField(models.CharField)**:
- Это класс, который определяет поле модели Django для хранения года.
- Он наследуется от CharField и добавляет к нему функциональность валидации года.
- В конструкторе класса YearField устанавливаются максимальная длина поля в 4 символа и добавляется список валидаторов, включая validate_year.