Created universal solution for ViewSet + external system synchronization: 1. ExternalSystemSyncMixin (common/external_sync_mixin.py): - Automatically wraps CRUD operations in transactions - Coordinates DB + LDAP in single atomic transaction - Rolls back DB if LDAP fails - Configurable error handling - Works with any external system (LDAP, APIs, etc) 2. Applied to EmployeeViewSet: - Added mixin to base classes - Configured LDAP sync mapping (create/update/destroy) - prepare_external_data() for DTO creation - handle_external_sync_error() for LDAP errors - No need to override create/update/destroy methods 3. Created pure LDAP methods in DirectoryService/UserService: - create_user_in_ldap_only() - LDAP create, returns dn/guid - update_user_in_ldap_only() - LDAP update, no DB access - delete_user_in_ldap_only() - LDAP delete, no DB access - All methods removed transaction.atomic (managed by ViewSet) 4. Documentation: - Complete guide in docs/guides/EXTERNAL_SYNC_MIXIN_GUIDE.md - Usage examples for all patterns - Migration guide from old architecture - Comparison with alternatives (Signals, Celery, Saga) Benefits: - Minimal code (3 methods vs overriding entire ViewSet) - Clear separation: View owns DB, LDAP service owns LDAP - Reusable for all ViewSets (departments, positions, etc) - Easy to test (external_sync_enabled = False) - Universal (works with any external system) manage.py check: System check identified no issues
Backend Documentation
Техническая документация по backend части проекта EUSRR.
📁 Структура
guides/
Руководства разработчика - инструкции по работе с различными модулями
- CONTEXT_MENU_GUIDE.md - работа с контекстными меню
- REACTIONS_GUIDE.md - система реакций
troubleshooting/
Отладка и исправления - диагностика проблем
- CONTEXT_MENU_DEBUG.md - отладка контекстного меню
- MESSAGE_DELETE_DEBUG.md - отладка удаления сообщений
- MESSAGE_DELETE_FIX.md - исправление проблем удаления
architecture/
Архитектурная документация - устройство систем
- API_ANALYSIS.md - анализ API
- API_REFACTORING_SUMMARY.md - результаты рефакторинга API
- VIEWSET_ANALYSIS.md - анализ ViewSet
testing/
Тестирование - планы и результаты тестирования
- POSITION_PERMISSIONS_TESTING.md - тестирование прав должностей
- REQUESTS_API_TESTING_PLAN.md - план тестирования API заявок
- TEST_IMAGE_SCRIPTS.md - скрипты тестирования изображений
reports/
Отчеты и аудиты - результаты проверок и реорганизаций
- BACKEND_CLEANUP_AUDIT.md - аудит очистки backend/
- REQUESTS_API_TESTING_PLAN.md - план тестирования API заявок
- TEST_IMAGE_SCRIPTS.md - скрипты тестирования изображений
🔍 Навигация
По типу задачи:
- Как работает X? → architecture/
- Как настроить Y? → guides/
- Проблема с Z → troubleshooting/
- Как тестировать? → testing/
Связанная документация:
- /docs/ - общая документация проекта
- backend/scripts/ - вспомогательные скрипты
📝 Правила
Добавление новой документации:
- Guides - постоянные инструкции, reference материалы
- Troubleshooting - временные документы, после решения → удалить
- Architecture - долгосрочная документация, обновлять при изменениях
- Testing - планы тестирования, после завершения → архивировать
Формат файлов:
# Заголовок
**Дата:** DD.MM.YYYY
**Автор:** Имя
**Статус:** Актуально / Устарело / В процессе
## Описание
...
## Использование
...
## Примеры
...
🔄 Жизненный цикл
- Создание - документируйте новую фичу/проблему
- Актуализация - обновляйте при изменениях
- Архивация - после завершения/решения
- Удаление - если больше не актуально
Поддерживайте документацию актуальной! 📚