using System; using Microsoft.EntityFrameworkCore.Migrations; #nullable disable namespace foodmarket.Infrastructure.Persistence.Migrations { /// Country ↔ Currency связка + дефолты организации: /// - countries.DefaultCurrencyId (nullable FK → currencies.Id) /// - organizations.DefaultCurrencyId (FK → currencies.Id) /// - organizations.MultiCurrencyEnabled (bool, default false) /// - organizations.DefaultVat (int, default 16) /// Seed: KZ→KZT, RU→RUB; org → KZ+KZT. public partial class Phase4_CountryCurrencyOrgDefaults : Migration { protected override void Up(MigrationBuilder b) { b.AddColumn( name: "DefaultCurrencyId", schema: "public", table: "countries", type: "uuid", nullable: true); b.AddColumn( name: "DefaultCurrencyId", schema: "public", table: "organizations", type: "uuid", nullable: true); b.AddColumn( name: "MultiCurrencyEnabled", schema: "public", table: "organizations", type: "boolean", nullable: false, defaultValue: false); b.AddColumn( name: "DefaultVat", schema: "public", table: "organizations", type: "integer", nullable: false, defaultValue: 16); b.CreateIndex( name: "IX_countries_DefaultCurrencyId", schema: "public", table: "countries", column: "DefaultCurrencyId"); b.CreateIndex( name: "IX_organizations_DefaultCurrencyId", schema: "public", table: "organizations", column: "DefaultCurrencyId"); b.AddForeignKey( name: "FK_countries_currencies_DefaultCurrencyId", schema: "public", table: "countries", column: "DefaultCurrencyId", principalSchema: "public", principalTable: "currencies", principalColumn: "Id", onDelete: ReferentialAction.Restrict); b.AddForeignKey( name: "FK_organizations_currencies_DefaultCurrencyId", schema: "public", table: "organizations", column: "DefaultCurrencyId", principalSchema: "public", principalTable: "currencies", principalColumn: "Id", onDelete: ReferentialAction.Restrict); // Backfill: привяжем валюты к странам по ISO-коду. b.Sql(""" UPDATE public.countries SET "DefaultCurrencyId" = c."Id" FROM public.currencies c WHERE (public.countries."Code" = 'KZ' AND c."Code" = 'KZT') OR (public.countries."Code" = 'RU' AND c."Code" = 'RUB') OR (public.countries."Code" = 'BY' AND c."Code" = 'BYN') OR (public.countries."Code" = 'US' AND c."Code" = 'USD') OR (public.countries."Code" = 'DE' AND c."Code" = 'EUR') OR (public.countries."Code" = 'CN' AND c."Code" = 'CNY') OR (public.countries."Code" = 'TR' AND c."Code" = 'TRY'); """); // Дефолт для организации — KZT, если существует. b.Sql(""" UPDATE public.organizations SET "DefaultCurrencyId" = c."Id" FROM public.currencies c WHERE c."Code" = 'KZT' AND public.organizations."DefaultCurrencyId" IS NULL; """); } protected override void Down(MigrationBuilder b) { b.DropForeignKey(name: "FK_countries_currencies_DefaultCurrencyId", schema: "public", table: "countries"); b.DropForeignKey(name: "FK_organizations_currencies_DefaultCurrencyId", schema: "public", table: "organizations"); b.DropIndex(name: "IX_countries_DefaultCurrencyId", schema: "public", table: "countries"); b.DropIndex(name: "IX_organizations_DefaultCurrencyId", schema: "public", table: "organizations"); b.DropColumn(name: "DefaultCurrencyId", schema: "public", table: "countries"); b.DropColumn(name: "DefaultCurrencyId", schema: "public", table: "organizations"); b.DropColumn(name: "MultiCurrencyEnabled", schema: "public", table: "organizations"); b.DropColumn(name: "DefaultVat", schema: "public", table: "organizations"); } } }