food-market/src/food-market.infrastructure/Persistence/Migrations/20261009120000_Phase40_WeightedCodeAndDefaults.cs
nns d0fee10e96 fix(barcode): весовой разбор выкл по умолчанию; поиск по ШК — точное совпадение
Реальный сценарий владельца: весов с печатью этикеток нет, штрихкоды весовых —
обычные коды «27xxxxx» в карточке. Исправлены два бага:
- поиск по ШК матчил весовой PLU по АРТИКУЛУ (вода арт.12345 → 1,5 кг) — убрано,
  поиск по штрихкоду больше нигде не матчит по артикулу;
- разбор весовых этикеток был дефолт-ON (WeightedBarcodeSettings.Enabled,
  Organization.WeightBarcodeEnabled) и ловил обычные коды — теперь дефолт OFF.

- ByBarcode: сначала точное совпадение штрихкода (вкл. короткие «27xxxxx»),
  разбор этикетки — только если включён в орг И точного ШК нет.
- Phase40: WeightBarcodeEnabled DEFAULT false + выключение у существующих орг;
  WeightedCodeFormat('short'|'ean13')/WeightedCodePrefix(27)/WeightedCodeDigits(5).
- Генератор ШК нового весового товара: короткий «<prefix>+N цифр» (27xxxxx, next-free)
  или EAN-13 по настройке; уникальность.
- Настройки орг отдают/принимают формат кода весовых.
- Sync отдаёт unitShort («шт»/«кг»/«л») рядом с unitCode (ОКЕИ) — shared UnitShort.
- Тесты: MobileApi (exact-only по умолчанию; не матчит артикул; PLU как ШК при вкл) 9/9;
  unit WeightedBarcode/UnitShort 16/16.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 11:02:43 +05:00

54 lines
2.8 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>Phase40 — весовой товар по реальному сценарию владельца (09.10):
/// разбор весовых этикеток ВЫКЛ по умолчанию + формат короткого кода весового товара.
///
/// <list type="bullet">
/// <item><c>WeightBarcodeEnabled</c> DEFAULT false + существующие организации
/// выключаем (фича была дефолт-on и ловила обычные коды как весовые).</item>
/// <item><c>WeightedCodeFormat</c> text DEFAULT 'short' («ean13» | «short»).</item>
/// <item><c>WeightedCodePrefix</c> integer DEFAULT 27.</item>
/// <item><c>WeightedCodeDigits</c> integer DEFAULT 5.</item>
/// </list>
/// Идемпотентно (IF NOT EXISTS / ALTER DEFAULT).</summary>
[DbContext(typeof(AppDbContext))]
[Migration("20261009120000_Phase40_WeightedCodeAndDefaults")]
public partial class Phase40_WeightedCodeAndDefaults : Migration
{
protected override void Up(MigrationBuilder b)
{
b.Sql(@"
ALTER TABLE public.organizations
ALTER COLUMN ""WeightBarcodeEnabled"" SET DEFAULT false;
-- Выключаем разбор этикеток у существующих организаций (фича была
-- дефолт-on и принимала обычные/внутренние коды за весовые этикетки).
UPDATE public.organizations SET ""WeightBarcodeEnabled"" = false;
ALTER TABLE public.organizations
ADD COLUMN IF NOT EXISTS ""WeightedCodeFormat"" text NOT NULL DEFAULT 'short';
ALTER TABLE public.organizations
ADD COLUMN IF NOT EXISTS ""WeightedCodePrefix"" integer NOT NULL DEFAULT 27;
ALTER TABLE public.organizations
ADD COLUMN IF NOT EXISTS ""WeightedCodeDigits"" integer NOT NULL DEFAULT 5;
");
}
protected override void Down(MigrationBuilder b)
{
b.Sql(@"
ALTER TABLE public.organizations
ALTER COLUMN ""WeightBarcodeEnabled"" SET DEFAULT true;
ALTER TABLE public.organizations DROP COLUMN IF EXISTS ""WeightedCodeFormat"";
ALTER TABLE public.organizations DROP COLUMN IF EXISTS ""WeightedCodePrefix"";
ALTER TABLE public.organizations DROP COLUMN IF EXISTS ""WeightedCodeDigits"";
");
}
}
}