food-market/src/food-market.infrastructure/Persistence/Migrations/20261009140000_Phase41_MoySkladExternalIdDocs.cs
nns 2ed9f04cb2 feat(migration): документный мигратор МойСклад (приёмки) + externalId на документах
Part 2 (документы) — проверенный шаблон на приёмках:
- Phase41: MoySkladExternalId у counterparties/stores/units/retail_points/employees и
  документов (supplies/enters/losses/inventories/supplier_returns/retail_sales/
  cash_shifts/money_transactions) + индексы. Свойства на доменных сущностях.
- MoySkladClient.StreamDocumentsAsync: документы в хронологии (order=moment,asc), expand
  позиций/связей (limit=100), обработка 429/сбоев.
- MoySkladDocumentImportService.ImportSuppliesAsync: идемпотентно по msId, резюмируемо
  (skip перенесённых), moment МСК→UTC, суммы из тиынов, поставщик по externalId контрагента,
  товары по externalId, проведение → движения остатков (StockService). Журнал ошибок.
- Импорт контрагентов теперь пишет MoySkladExternalId (нужно для ссылок в документах).
- Эндпоинт POST /api/admin/moysklad/import-supplies (фон, job). Остальные типы — по шаблону.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 13:53:52 +05:00

44 lines
2 KiB
C#
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.

using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using foodmarket.Infrastructure.Persistence;
#nullable disable
namespace foodmarket.Infrastructure.Persistence.Migrations
{
/// <summary>Phase41 — MoySkladExternalId у справочников (кроме уже имеющих у Product/
/// ProductGroup) и всех документов: нужно для идемпотентного переноса истории из
/// МойСклада (ключ — id МойСклада) и сопоставления ссылок (поставщик/склад/автор).
/// Текстовая колонка + индекс (OrganizationId, MoySkladExternalId). Идемпотентно.</summary>
[DbContext(typeof(AppDbContext))]
[Migration("20261009140000_Phase41_MoySkladExternalIdDocs")]
public partial class Phase41_MoySkladExternalIdDocs : Migration
{
private static readonly string[] Tables =
{
"counterparties", "stores", "units_of_measure", "retail_points", "employees",
"supplies", "enters", "losses", "inventories", "supplier_returns",
"retail_sales", "cash_shifts", "money_transactions",
};
protected override void Up(MigrationBuilder b)
{
foreach (var t in Tables)
{
b.Sql($@"ALTER TABLE public.""{t}"" ADD COLUMN IF NOT EXISTS ""MoySkladExternalId"" text;");
b.Sql($@"CREATE INDEX IF NOT EXISTS ""IX_{t}_MoySkladExternalId""
ON public.""{t}"" (""OrganizationId"", ""MoySkladExternalId"");");
}
}
protected override void Down(MigrationBuilder b)
{
foreach (var t in Tables)
{
b.Sql($@"DROP INDEX IF EXISTS ""IX_{t}_MoySkladExternalId"";");
b.Sql($@"ALTER TABLE public.""{t}"" DROP COLUMN IF EXISTS ""MoySkladExternalId"";");
}
}
}
}