From ee920dd365e2cef15ea4c8d55de070b2691b8f8b Mon Sep 17 00:00:00 2001 From: lizerk Date: Wed, 18 Mar 2026 19:22:30 +0300 Subject: [PATCH] =?UTF-8?q?refactor(employees):=20=D1=80=D0=B5=D0=BE=D1=80?= =?UTF-8?q?=D0=B3=D0=B0=D0=BD=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D1=81?= =?UTF-8?q?=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83=D1=80=D1=8B=20=D1=81=D0=B8?= =?UTF-8?q?=D0=B3=D0=BD=D0=B0=D0=BB=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ПРОБЛЕМЫ СТАРОЙ СТРУКТУРЫ: - 5 файлов сигналов в корне employees/ (захламление) - Непоследовательность: signals_ldap.py vs signals_department.py - apps.py импортирует каждый файл явно (5 строк) - Нет группировки по назначению (LDAP разбросан) НОВАЯ СТРУКТУРА: employees/ signals/ __init__.py # единая точка входа common.py # общие сигналы (было signals.py) birthday.py # дни рождений ldap/ __init__.py employee.py # Employee ↔ LDAP department.py # Department ↔ LDAP OU group.py # Group ↔ LDAP Group ПРЕИМУЩЕСТВА: - Чёткая иерархия: общие сигналы и LDAP-специфичные - Единый импорт в apps.py: import employees.signals - Понятные имена модулей (employee.py вместо signals_ldap.py) - Масштабируемость: легко добавить signals/email/, signals/webhooks/ и т.д. ИЗМЕНЕНИЯ: - Создана структура signals/ и signals/ldap/ - Перемещены и переименованы 5 файлов сигналов - Обновлены docstrings с новыми путями - Исправлены относительные импорты в common.py - apps.py: упрощён с 5 импортов до 1 - Django check: успешно Git корректно распознал переименования (R), история сохранена. --- backend/employees/apps.py | 8 ++------ backend/employees/signals/__init__.py | 15 +++++++++++++++ .../{signals_birthday.py => signals/birthday.py} | 6 ++++-- .../employees/{signals.py => signals/common.py} | 13 ++++++++++--- backend/employees/signals/ldap/__init__.py | 5 +++++ .../ldap/department.py} | 5 ++++- .../{signals_ldap.py => signals/ldap/employee.py} | 5 ++++- .../{signals_group.py => signals/ldap/group.py} | 5 ++++- 8 files changed, 48 insertions(+), 14 deletions(-) create mode 100644 backend/employees/signals/__init__.py rename backend/employees/{signals_birthday.py => signals/birthday.py} (93%) rename backend/employees/{signals.py => signals/common.py} (95%) create mode 100644 backend/employees/signals/ldap/__init__.py rename backend/employees/{signals_department.py => signals/ldap/department.py} (98%) rename backend/employees/{signals_ldap.py => signals/ldap/employee.py} (98%) rename backend/employees/{signals_group.py => signals/ldap/group.py} (99%) diff --git a/backend/employees/apps.py b/backend/employees/apps.py index 37d2908b..08dfe5fa 100644 --- a/backend/employees/apps.py +++ b/backend/employees/apps.py @@ -6,9 +6,5 @@ class EmployeesConfig(AppConfig): name = 'employees' def ready(self): - import employees.signals - import employees.signals_birthday # Сигналы для синхронизации дней рождений с django-scheduler - import employees.signals_ldap # Сигналы для автоматической синхронизации Employee с LDAP - import employees.signals_department # Сигналы для автоматической синхронизации Department с LDAP - import employees.signals_group # Сигналы для автоматической синхронизации Group с LDAP - import employees.rules # django-rules: регистрация предикатов и правил доступа + import employees.signals # Все сигналы (common, birthday, ldap) + import employees.rules # django-rules: регистрация предикатов и правил доступа diff --git a/backend/employees/signals/__init__.py b/backend/employees/signals/__init__.py new file mode 100644 index 00000000..8630fb56 --- /dev/null +++ b/backend/employees/signals/__init__.py @@ -0,0 +1,15 @@ +"""Django signals для приложения employees. + +Структура: +- common: общие сигналы (создание кадровых событий, чаты отделов) +- birthday: синхронизация дней рождений с django-scheduler +- ldap/: автоматическая синхронизация с LDAP + - employee: Employee ↔ LDAP User + - department: Department ↔ LDAP OU + - group: Group ↔ LDAP Group +""" + +from . import common, birthday +from .ldap import employee, department, group + +__all__ = ['common', 'birthday', 'employee', 'department', 'group'] diff --git a/backend/employees/signals_birthday.py b/backend/employees/signals/birthday.py similarity index 93% rename from backend/employees/signals_birthday.py rename to backend/employees/signals/birthday.py index 2967de4b..de9444d6 100644 --- a/backend/employees/signals_birthday.py +++ b/backend/employees/signals/birthday.py @@ -1,6 +1,8 @@ -""" -Сигналы для автоматического управления событиями дней рождения в django-scheduler. +"""Django signals для автоматической синхронизации дней рождений с django-scheduler. + Использует Service Layer паттерн через django-service-objects. + +Файл: employees/signals/birthday.py """ from __future__ import annotations diff --git a/backend/employees/signals.py b/backend/employees/signals/common.py similarity index 95% rename from backend/employees/signals.py rename to backend/employees/signals/common.py index 4e454376..cfd34335 100644 --- a/backend/employees/signals.py +++ b/backend/employees/signals/common.py @@ -1,4 +1,11 @@ -# users/signals.py +# employees/signals/common.py +"""Общие Django signals для приложения employees. + +Обработчики: +- Создание кадровых событий (EmployeeAction) +- Создание главных чатов отделов +- Автоматизация из заявок (requests_app) +""" import logging import os @@ -10,9 +17,9 @@ from django.db.models import Q from django.db.models.signals import post_save, pre_save from django.dispatch import receiver from django.utils import timezone -from .constants import ACTION_HIRED -from .models import Employee, EmployeeAction, Department +from employees.constants import ACTION_HIRED +from employees.models import Employee, EmployeeAction, Department logger = logging.getLogger(__name__) diff --git a/backend/employees/signals/ldap/__init__.py b/backend/employees/signals/ldap/__init__.py new file mode 100644 index 00000000..ffdcdc32 --- /dev/null +++ b/backend/employees/signals/ldap/__init__.py @@ -0,0 +1,5 @@ +"""LDAP signals для автоматической синхронизации моделей с Active Directory.""" + +from . import employee, department, group + +__all__ = ['employee', 'department', 'group'] diff --git a/backend/employees/signals_department.py b/backend/employees/signals/ldap/department.py similarity index 98% rename from backend/employees/signals_department.py rename to backend/employees/signals/ldap/department.py index f1d57c48..1586ad1b 100644 --- a/backend/employees/signals_department.py +++ b/backend/employees/signals/ldap/department.py @@ -1,4 +1,7 @@ -"""Django signals для автоматической синхронизации Department с LDAP.""" +"""Django signals для автоматической синхронизации Department с LDAP. + +Файл: employees/signals/ldap/department.py +""" import logging diff --git a/backend/employees/signals_ldap.py b/backend/employees/signals/ldap/employee.py similarity index 98% rename from backend/employees/signals_ldap.py rename to backend/employees/signals/ldap/employee.py index 41697650..6484e43b 100644 --- a/backend/employees/signals_ldap.py +++ b/backend/employees/signals/ldap/employee.py @@ -1,4 +1,7 @@ -"""Django signals для автоматической синхронизации Employee с LDAP.""" +"""Django signals для автоматической синхронизации Employee с LDAP. + +Файл: employees/signals/ldap/employee.py +""" import logging diff --git a/backend/employees/signals_group.py b/backend/employees/signals/ldap/group.py similarity index 99% rename from backend/employees/signals_group.py rename to backend/employees/signals/ldap/group.py index d374d754..eb6cc1a6 100644 --- a/backend/employees/signals_group.py +++ b/backend/employees/signals/ldap/group.py @@ -1,4 +1,7 @@ -"""Django signals для автоматической синхронизации Group с LDAP.""" +"""Django signals для автоматической синхронизации Group с LDAP. + +Файл: employees/signals/ldap/group.py +""" import logging