# Generated by Django 5.2.4 on 2026-03-19 19:53 import employees.ldap.mixins import ldapdb.models.fields from django.db import migrations, models 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')], }, ), ]