lizerk aa70c23f0f refactor(api): вынос LDAP логики из RegisterAPIView в миксин
ПРОБЛЕМА:
- RegisterAPIView содержал ~30 строк LDAP-специфичной логики
- DirectoryService, DirectoryUserDTO, обработка исключений - всё в основном методе
- Нарушение принципа единственной ответственности
- Сложность тестирования и переиспользования

РЕШЕНИЕ:
Создан api/v1/employees/views/mixins.py с миксинами:

1. LdapUserCreationMixin:
   - create_ldap_user() - создание пользователя в LDAP через DirectoryService
   - create_db_user() - создание пользователя напрямую в БД (fallback без LDAP)
   - Централизованная обработка DirectoryLdapError/DirectoryDbError
   - Возвращает (Employee, None) при успехе или (None, Response) при ошибке

2. LdapPasswordMixin:
   - update_ldap_password() - обновление пароля в LDAP
   - Подготовка для использования в PasswordChangeView и других endpoints

ИЗМЕНЕНИЯ:
- auth.py: RegisterAPIView использует LdapUserCreationMixin
- Блок if ldap_enabled заменён на вызовы self.create_ldap_user() / self.create_db_user()
- _helpers.py: удалён _is_ldap_enabled (перемещён в mixins.py)
- Уменьшено количество строк в RegisterAPIView: ~190 → ~170

ПРЕИМУЩЕСТВА:
- Чёткое разделение: общая логика регистрации vs LDAP-специфика
- Переиспользование: миксины можно применить в других views
- Тестируемость: можно мокать методы миксина
- Читаемость: основной метод фокусируется на бизнес-логике

Django check: успешно
2026-03-18 19:28:01 +03:00
..