230 lines
8.6 KiB
Python
230 lines
8.6 KiB
Python
# 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",
|
||
)
|
||
],
|
||
},
|
||
),
|
||
]
|