Corp/backend/commerce/migrations/0002_integrationconnection_integrationsyncrun.py
2026-08-17 19:20:53 +03:00

229 lines
8.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Generated by Django 5.2.4 on 2026-08-17 16:08
import django.db.models.deletion
import uuid
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",
)
],
},
),
]