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

72
BACKEND/TEAMS.md Normal file
View File

@@ -0,0 +1,72 @@
## Кортежи статуса задачи
GENDER_CHOICES = (
('n', 'Не указано'),
('m', 'Мужчина'),
('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. **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)`: Метод для обновления существующей зоны ответственности команды.
## Маршрутизатор
1. `router.register('teams', TeamViewSet, basename='teams')`: Регистрация представления `TeamViewSet` в маршрутизаторе под именем `'teams'`, с указанием базового имени `'teams'`. Это создаст URL-адреса для операций CRUD (создание, чтение, обновление, удаление) команд.
2. `router.register('work-team-zones', WorkTeamZoneViewSet, basename='work-team-zones')`: Регистрация представления `WorkTeamZoneViewSet` в маршрутизаторе под именем `'work-team-zones'`, с указанием базового имени `'work-team-zones'`. Это создаст URL-адреса для операций CRUD (создание, чтение, обновление, удаление) зон ответственности команд.
## Контроллер
### Views и API
1. Определение представления `TeamViewSet` как подкласса `viewsets.ModelViewSet`, который предоставляет стандартный набор операций CRUD для модели `Team`.
- `queryset = Team.objects.all()`: Получение всех объектов модели `Team` из базы данных.
- `serializer_class = TeamSerializer`: Использование сериализатора `TeamSerializer` для сериализации данных.
- `permission_classes = [IsAuthenticatedOrReadOnly]`: Определение разрешений доступа, требующих аутентификации для изменения данных и только чтения без аутентификации.
- `lookup_field = 'id'`: Использование поля 'id' для поиска объектов.
- `http_method_names = ['get', 'post', 'put', 'patch', 'delete']`: Разрешенные HTTP-методы для данного представления.
2. Определение методов для обработки различных HTTP-запросов:
- `get_permissions`: Переопределение метода для применения разных разрешений в зависимости от типа действия.
- `list`: Метод для получения списка всех команд.
- `create`: Метод для создания новой команды.
- `retrieve`: Метод для получения информации о конкретной команде.
- `update`: Метод для обновления информации о команде.
- `destroy`: Метод для удаления команды.
3. Аналогично определено представление `WorkTeamZoneViewSet` для модели `WorkTeamZone`.
- `queryset = WorkTeamZone.objects.all()`: Получение всех объектов модели `WorkTeamZone` из базы данных.
- `serializer_class = WorkTeamZoneSerializer`: Использование сериализатора `WorkTeamZoneSerializer`.
- `permission_classes = [IsAuthenticated]`: Определение разрешений доступа, требующих аутентификации для всех действий.
- Определены методы для обработки различных HTTP-запросов (список, создание, получение, обновление, удаление) с соответствующей логикой обработки данных и проверкой прав доступа.