# Generated by Django 5.2.4 on 2026-08-17 16:08 import uuid import django.db.models.deletion from django.conf import settings from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ("commerce", "0001_initial"), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( name="IntegrationConnection", fields=[ ( "id", models.UUIDField( default=uuid.uuid4, editable=False, primary_key=True, serialize=False, ), ), ( "provider", models.CharField( choices=[("moysklad", "МойСклад")], max_length=32, unique=True, verbose_name="Провайдер", ), ), ( "auth_type", models.CharField( choices=[("token", "Токен"), ("basic", "Логин и пароль")], default="token", max_length=16, verbose_name="Способ авторизации", ), ), ( "encrypted_credentials", models.TextField(verbose_name="Зашифрованные реквизиты"), ), ( "status", models.CharField( choices=[ ("disconnected", "Не подключено"), ("ready", "Подключено"), ("queued", "В очереди"), ("syncing", "Синхронизация"), ("error", "Ошибка"), ], default="disconnected", max_length=16, verbose_name="Статус", ), ), ( "account_name", models.CharField( blank=True, max_length=255, verbose_name="Учётная запись" ), ), ( "last_error", models.TextField(blank=True, verbose_name="Последняя ошибка"), ), ( "last_tested_at", models.DateTimeField( blank=True, null=True, verbose_name="Доступ проверен" ), ), ( "last_sync_started_at", models.DateTimeField( blank=True, null=True, verbose_name="Синхронизация начата" ), ), ( "last_sync_finished_at", models.DateTimeField( blank=True, null=True, verbose_name="Синхронизация завершена" ), ), ( "last_stats", models.JSONField( blank=True, default=dict, verbose_name="Результат синхронизации" ), ), ( "task_id", models.CharField( blank=True, max_length=255, verbose_name="ID фоновой задачи" ), ), ( "created_at", models.DateTimeField(auto_now_add=True, verbose_name="Создано"), ), ( "updated_at", models.DateTimeField(auto_now=True, verbose_name="Обновлено"), ), ( "created_by", models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="commerce_connections_created", to=settings.AUTH_USER_MODEL, verbose_name="Создал", ), ), ( "source", models.OneToOneField( on_delete=django.db.models.deletion.PROTECT, related_name="connection", to="commerce.sourcesystem", verbose_name="Источник", ), ), ], options={ "verbose_name": "Подключение интеграции", "verbose_name_plural": "Подключения интеграций", }, ), migrations.CreateModel( name="IntegrationSyncRun", fields=[ ( "id", models.UUIDField( default=uuid.uuid4, editable=False, primary_key=True, serialize=False, ), ), ( "status", models.CharField( choices=[ ("queued", "В очереди"), ("running", "Выполняется"), ("success", "Завершено"), ("error", "Ошибка"), ], default="queued", max_length=16, verbose_name="Статус", ), ), ( "task_id", models.CharField( blank=True, max_length=255, verbose_name="ID фоновой задачи" ), ), ( "processed", models.PositiveIntegerField(default=0, verbose_name="Обработано"), ), ( "created_products", models.PositiveIntegerField( default=0, verbose_name="Создано товаров" ), ), ( "matched_products", models.PositiveIntegerField(default=0, verbose_name="Сопоставлено"), ), ( "stock_snapshots", models.PositiveIntegerField( default=0, verbose_name="Снимков остатков" ), ), ("error", models.TextField(blank=True, verbose_name="Ошибка")), ( "started_at", models.DateTimeField(blank=True, null=True, verbose_name="Начато"), ), ( "finished_at", models.DateTimeField( blank=True, null=True, verbose_name="Завершено" ), ), ( "created_at", models.DateTimeField(auto_now_add=True, verbose_name="Создано"), ), ( "connection", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="sync_runs", to="commerce.integrationconnection", verbose_name="Подключение", ), ), ], options={ "verbose_name": "Запуск синхронизации", "verbose_name_plural": "Запуски синхронизации", "ordering": ["-created_at"], "indexes": [ models.Index( fields=["connection", "-created_at"], name="commerce_sync_connection_date", ) ], }, ), ]