Skip to content

Latest commit

 

History

History
138 lines (98 loc) · 5.96 KB

File metadata and controls

138 lines (98 loc) · 5.96 KB

Industries

Назначение

Industries - справочник отраслей, который используется для классификации проектов и фильтрации проектных данных.

Модуль не содержит сложной бизнес-логики: его основная задача - хранить Industry и отдавать список отраслей клиентам и другим модулям.

Статус модуля

Модуль рабочий и подключен в публичный API через /industries/.

Есть небольшой долг:

  • в модели нет уникальности name, поэтому одинаковые отрасли можно создать несколько раз.

Основные возможности

  • просмотр списка отраслей;
  • просмотр одной отрасли;
  • создание отрасли staff-пользователем;
  • обновление отрасли staff-пользователем;
  • удаление отрасли staff-пользователем;
  • управление отраслями через Django admin.

Архитектура

  • industries/models.py - модель Industry.
  • industries/serializers.py - IndustrySerializer.
  • industries/views.py - list/create и detail/update/delete endpoints.
  • industries/urls.py - routes модуля.
  • industries/admin.py - регистрация модели в Django admin.
  • industries/tests/ - regression-тесты и helpers модуля.

Основные сущности

Industry

Industry описывает отрасль проекта.

Поля:

  • id - идентификатор отрасли;
  • name - название отрасли, максимум 256 символов;
  • datetime_created - дата создания.

Сортировка по умолчанию: name.

Строковое представление:

Industry<id> - name

API

  • GET /industries/ - список отраслей.
  • POST /industries/ - создание отрасли.
  • GET /industries/<id>/ - детали отрасли.
  • PUT /industries/<id>/ - полное обновление отрасли.
  • PATCH /industries/<id>/ - частичное обновление отрасли.
  • DELETE /industries/<id>/ - удаление отрасли.

Permissions:

  • read operations доступны всем пользователям;
  • anonymous write operations возвращают 401;
  • authenticated non-staff write operations возвращают 403;
  • staff write operations разрешены;
  • фактически используется общий permission core.permissions.IsStaffOrReadOnly.

Response contract:

{
  "id": 1,
  "name": "IT",
  "datetime_created": "2026-01-01T00:00:00Z"
}

Основные сценарии

Пользователь выбирает отрасль проекта

Frontend получает список отраслей через GET /industries/ и использует id отрасли при создании или обновлении проекта.

Пользователь фильтрует проекты по отрасли

Проекты фильтруются по industry через модуль projects. Сам справочник только хранит отрасли и не содержит собственной логики фильтрации проектов.

Администратор управляет справочником

Staff-пользователь может создавать, обновлять и удалять отрасли через API или Django admin.

Связи с другими модулями

  • projects - Project.industry ссылается на Industry.
  • vacancy - detail вакансии отдает проект вместе с отраслью проекта.
  • partner_programs - serializers программных проектов отдают отрасль проекта.
  • project_rates - serializers оценок проектов отдают отрасль проекта.
  • news, projects и другие тестовые helpers создают отрасли для связанных сценариев.

Ограничения и риски

  • Industry.name не уникален. Сейчас можно создать несколько отраслей с одинаковым названием.
  • При удалении отрасли у связанных проектов Project.industry становится NULL, потому что связь настроена через on_delete=SET_NULL.
  • Удаление или переименование отрасли может повлиять на фильтрацию и отображение проектов на frontend.

Тесты

Текущие тесты лежат в industries/tests/.

Проверяется:

  • публичный список отраслей через реальный URL;
  • публичный detail отрасли через реальный URL;
  • 404 для отсутствующей отрасли;
  • создание отрасли staff-пользователем;
  • запрет создания отрасли anonymous-пользователем;
  • запрет создания и обновления отрасли обычным пользователем;
  • обновление отрасли staff-пользователем;
  • удаление отрасли staff-пользователем;
  • отвязка проектов от удаленной отрасли через on_delete=SET_NULL;
  • ошибка при отсутствующем name;
  • ошибка при пустом name;
  • ошибка при слишком длинном name;
  • строковое представление Industry.