Задача
Предоставить API для подразделений и сотрудников, где клиент может получать поддерево, перемещать узлы и удалять подразделения без повреждения иерархии.
REST API для управления подразделениями и сотрудниками. Главная инженерная задача проекта — безопасно изменять дерево произвольной глубины, сохраняя его структурные инварианты.
Создание и чтение узлов просты только до тех пор, пока не появляются перемещение, каскадное удаление и проверка циклов.
Предоставить API для подразделений и сотрудников, где клиент может получать поддерево, перемещать узлы и удалять подразделения без повреждения иерархии.
FastAPI и Pydantic отвечают за контракт, сервисный слой проверяет инварианты, SQLAlchemy управляет данными, а Alembic фиксирует эволюцию схемы.
Операция рассматривается не как обновление parent_id, а как изменение связанной структуры с набором инвариантов.
FastAPI валидирует идентификаторы, поля подразделения и режим операции через Pydantic-схемы.
Сервис убеждается, что родитель существует, а перемещаемый узел не станет потомком самого себя.
Имя подразделения проверяется в контексте нового родителя, а не глобально для всей организации.
После прохождения правил ORM сохраняет новую связь и связанные изменения в PostgreSQL.
API формирует результат только после успешного изменения, чтобы клиент видел актуальную структуру или явную ошибку.
Главная ценность проекта — явное моделирование корректных и некорректных изменений иерархии.
Проверки перемещения, удаления и работы с сотрудниками не зависят от конкретного HTTP endpoint.
Перед сменой родителя сервис проверяет, что новое положение не включает узел в собственное поддерево.
Одинаковые названия допустимы в разных ветках, но не среди соседних подразделений одного уровня.
Изменения структуры базы оформляются миграциями и не зависят от ручного обновления окружения.
Тесты направлены на наблюдаемое поведение сервиса: CRUD, изменение дерева, сотрудники и ошибочные операции.
Интеграционные сценарии проходят через HTTP-контракт и проверяют результат операций над структурой.
Схема PostgreSQL изменяется воспроизводимо и хранится рядом с исходным кодом.
Приложение и база поднимаются единым окружением, а Swagger UI доступен после запуска.
Портфолио намеренно отделяет текущий код от функций и показателей, которые ещё требуют реализации или воспроизводимого подтверждения.
Авторизация указана в направлении развития репозитория и не представлена здесь как завершённая возможность.
Кэширование деревьев и пагинация сотрудников остаются следующими шагами, а не частью текущего критического пути.
Числа из README не используются как production-гарантии, пока рядом с проектом нет публичной методики и запускаемого benchmark-сценария.
Автоматический pipeline, observability и frontend дерева логично добавлять после стабилизации API-контракта.
Проект полезен не количеством технологий, а тем, что обычные CRUD-операции рассматриваются через целостность изменяемого дерева.
README содержит endpoints, Docker-запуск, структуру проекта и список честно обозначенных следующих шагов.