100 lines
6.3 KiB
Python
100 lines
6.3 KiB
Python
# 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')],
|
||
},
|
||
),
|
||
]
|