273 lines
9.8 KiB
Python
273 lines
9.8 KiB
Python
# Generated by Django 5.2.4 on 2026-03-19 19:53
|
||
|
||
import ldapdb.models.fields
|
||
from django.db import migrations, models
|
||
|
||
import employees.ldap.mixins
|
||
|
||
|
||
class Migration(migrations.Migration):
|
||
dependencies = [
|
||
("employees", "0041_alter_departmentpermission_code"),
|
||
]
|
||
|
||
operations = [
|
||
migrations.CreateModel(
|
||
name="LdapGroup",
|
||
fields=[
|
||
(
|
||
"dn",
|
||
ldapdb.models.fields.CharField(
|
||
max_length=200, primary_key=True, serialize=False
|
||
),
|
||
),
|
||
("cn", ldapdb.models.fields.CharField(db_column="cn", max_length=200)),
|
||
(
|
||
"object_guid",
|
||
ldapdb.models.fields.CharField(
|
||
db_column="objectGUID", max_length=200
|
||
),
|
||
),
|
||
(
|
||
"sam_account_name",
|
||
ldapdb.models.fields.CharField(
|
||
db_column="sAMAccountName", max_length=200
|
||
),
|
||
),
|
||
(
|
||
"description",
|
||
ldapdb.models.fields.CharField(
|
||
blank=True, db_column="description", max_length=200
|
||
),
|
||
),
|
||
(
|
||
"member",
|
||
ldapdb.models.fields.ListField(blank=True, db_column="member"),
|
||
),
|
||
(
|
||
"member_of",
|
||
ldapdb.models.fields.ListField(blank=True, db_column="memberOf"),
|
||
),
|
||
(
|
||
"when_created",
|
||
ldapdb.models.fields.DateTimeField(db_column="whenCreated"),
|
||
),
|
||
(
|
||
"when_changed",
|
||
ldapdb.models.fields.DateTimeField(db_column="whenChanged"),
|
||
),
|
||
],
|
||
options={
|
||
"managed": False,
|
||
},
|
||
bases=(employees.ldap.mixins.ModifyDnMixin, models.Model),
|
||
),
|
||
migrations.CreateModel(
|
||
name="LdapOrganizationalUnit",
|
||
fields=[
|
||
(
|
||
"dn",
|
||
ldapdb.models.fields.CharField(
|
||
max_length=200, primary_key=True, serialize=False
|
||
),
|
||
),
|
||
("ou", ldapdb.models.fields.CharField(db_column="ou", max_length=200)),
|
||
(
|
||
"object_guid",
|
||
ldapdb.models.fields.CharField(
|
||
db_column="objectGUID", max_length=200
|
||
),
|
||
),
|
||
(
|
||
"description",
|
||
ldapdb.models.fields.CharField(
|
||
blank=True, db_column="description", max_length=200
|
||
),
|
||
),
|
||
(
|
||
"managed_by",
|
||
ldapdb.models.fields.CharField(
|
||
blank=True, db_column="managedBy", max_length=200
|
||
),
|
||
),
|
||
(
|
||
"when_created",
|
||
ldapdb.models.fields.DateTimeField(db_column="whenCreated"),
|
||
),
|
||
(
|
||
"when_changed",
|
||
ldapdb.models.fields.DateTimeField(db_column="whenChanged"),
|
||
),
|
||
],
|
||
options={
|
||
"managed": False,
|
||
},
|
||
bases=(employees.ldap.mixins.ModifyDnMixin, models.Model),
|
||
),
|
||
migrations.CreateModel(
|
||
name="LdapUser",
|
||
fields=[
|
||
(
|
||
"dn",
|
||
ldapdb.models.fields.CharField(
|
||
max_length=200, primary_key=True, serialize=False
|
||
),
|
||
),
|
||
("cn", ldapdb.models.fields.CharField(db_column="cn", max_length=200)),
|
||
(
|
||
"object_guid",
|
||
ldapdb.models.fields.CharField(
|
||
db_column="objectGUID", max_length=200
|
||
),
|
||
),
|
||
(
|
||
"sam_account_name",
|
||
ldapdb.models.fields.CharField(
|
||
db_column="sAMAccountName", max_length=200
|
||
),
|
||
),
|
||
(
|
||
"user_principal_name",
|
||
ldapdb.models.fields.CharField(
|
||
db_column="userPrincipalName", max_length=200
|
||
),
|
||
),
|
||
(
|
||
"given_name",
|
||
ldapdb.models.fields.CharField(
|
||
db_column="givenName", max_length=200
|
||
),
|
||
),
|
||
("sn", ldapdb.models.fields.CharField(db_column="sn", max_length=200)),
|
||
(
|
||
"display_name",
|
||
ldapdb.models.fields.CharField(
|
||
db_column="displayName", max_length=200
|
||
),
|
||
),
|
||
(
|
||
"mail",
|
||
ldapdb.models.fields.CharField(db_column="mail", max_length=200),
|
||
),
|
||
(
|
||
"telephone_number",
|
||
ldapdb.models.fields.CharField(
|
||
blank=True, db_column="telephoneNumber", max_length=200
|
||
),
|
||
),
|
||
(
|
||
"mobile",
|
||
ldapdb.models.fields.CharField(
|
||
blank=True, db_column="mobile", max_length=200
|
||
),
|
||
),
|
||
(
|
||
"user_account_control",
|
||
ldapdb.models.fields.IntegerField(db_column="userAccountControl"),
|
||
),
|
||
(
|
||
"description",
|
||
ldapdb.models.fields.CharField(
|
||
blank=True, db_column="description", max_length=200
|
||
),
|
||
),
|
||
(
|
||
"thumbnail_photo",
|
||
ldapdb.models.fields.ImageField(
|
||
blank=True, db_column="thumbnailPhoto"
|
||
),
|
||
),
|
||
(
|
||
"employee_number",
|
||
ldapdb.models.fields.CharField(
|
||
blank=True, db_column="employeeNumber", max_length=200
|
||
),
|
||
),
|
||
(
|
||
"member_of",
|
||
ldapdb.models.fields.ListField(blank=True, db_column="memberOf"),
|
||
),
|
||
(
|
||
"when_created",
|
||
ldapdb.models.fields.DateTimeField(db_column="whenCreated"),
|
||
),
|
||
(
|
||
"when_changed",
|
||
ldapdb.models.fields.DateTimeField(db_column="whenChanged"),
|
||
),
|
||
],
|
||
options={
|
||
"managed": False,
|
||
},
|
||
bases=(
|
||
employees.ldap.mixins.LdapSyncStateMixin,
|
||
employees.ldap.mixins.ModifyDnMixin,
|
||
models.Model,
|
||
),
|
||
),
|
||
migrations.CreateModel(
|
||
name="LdapSyncQueue",
|
||
fields=[
|
||
(
|
||
"id",
|
||
models.BigAutoField(
|
||
auto_created=True,
|
||
primary_key=True,
|
||
serialize=False,
|
||
verbose_name="ID",
|
||
),
|
||
),
|
||
(
|
||
"operation",
|
||
models.CharField(
|
||
db_index=True,
|
||
help_text="Имя операции (employee_save, department_delete, group_m2m и т.д.)",
|
||
max_length=64,
|
||
),
|
||
),
|
||
("model_name", models.CharField(db_index=True, max_length=32)),
|
||
("object_pk", models.CharField(db_index=True, max_length=64)),
|
||
(
|
||
"payload",
|
||
models.JSONField(
|
||
default=dict,
|
||
help_text="JSON с аргументами для повтора операции",
|
||
),
|
||
),
|
||
(
|
||
"status",
|
||
models.CharField(
|
||
choices=[
|
||
("pending", "Ожидает"),
|
||
("in_progress", "Выполняется"),
|
||
("completed", "Завершено"),
|
||
("failed", "Ошибка (исчерпаны попытки)"),
|
||
],
|
||
db_index=True,
|
||
default="pending",
|
||
max_length=16,
|
||
),
|
||
),
|
||
("attempts", models.PositiveIntegerField(default=0)),
|
||
("max_attempts", models.PositiveIntegerField(default=5)),
|
||
(
|
||
"next_retry_at",
|
||
models.DateTimeField(blank=True, db_index=True, null=True),
|
||
),
|
||
("last_error", models.TextField(blank=True, default="")),
|
||
("created_at", models.DateTimeField(auto_now_add=True)),
|
||
("updated_at", models.DateTimeField(auto_now=True)),
|
||
],
|
||
options={
|
||
"verbose_name": "Очередь LDAP синхронизации",
|
||
"verbose_name_plural": "Очередь LDAP синхронизации",
|
||
"ordering": ["created_at"],
|
||
"indexes": [
|
||
models.Index(
|
||
fields=["status", "next_retry_at"], name="ldap_queue_retry_idx"
|
||
)
|
||
],
|
||
},
|
||
),
|
||
]
|