feat(prod): флаг SEED_DEMO_DATA — отключить демо-орг «Demo Market» и demo-admin на проде
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
CI / Backend (.NET 8) (push) Waiting to run
CI / Web (React + Vite) (push) Waiting to run
CI / POS (WPF, Windows) (push) Waiting to run
Docker API / Build + push API (push) Waiting to run
Docker API / Deploy API on stage (push) Blocked by required conditions
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
CI / Backend (.NET 8) (push) Waiting to run
CI / Web (React + Vite) (push) Waiting to run
CI / POS (WPF, Windows) (push) Waiting to run
Docker API / Build + push API (push) Waiting to run
Docker API / Deploy API on stage (push) Blocked by required conditions
DevDataSeeder по умолчанию (dev/stage) сидирует демо-орг; на проде SEED_DEMO_DATA=false отключает демо-орг/demo-admin/привязку, сохраняя SuperAdmin+роли+глобальные ед.изм.+SystemSettings. Нужно для чистого (пустого) старта реального магазина. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
7229a50a74
commit
77464d6c83
|
|
@ -43,6 +43,13 @@ public async Task StartAsync(CancellationToken ct)
|
||||||
if (string.IsNullOrWhiteSpace(seedPassword) && _env.IsDevelopment())
|
if (string.IsNullOrWhiteSpace(seedPassword) && _env.IsDevelopment())
|
||||||
seedPassword = "Admin12345!";
|
seedPassword = "Admin12345!";
|
||||||
|
|
||||||
|
// Демо-организация «Demo Market» и demo-admin — для dev/stage. На ПРОДЕ их
|
||||||
|
// быть НЕ должно (чистый старт реального магазина): отключается флагом
|
||||||
|
// SEED_DEMO_DATA=false (или Seed:DemoData=false) в .env прода. По умолчанию
|
||||||
|
// (флаг не задан) демо сидируется — поведение dev/stage не меняется.
|
||||||
|
var seedDemoRaw = Environment.GetEnvironmentVariable("SEED_DEMO_DATA") ?? cfg["Seed:DemoData"];
|
||||||
|
var seedDemo = !string.Equals(seedDemoRaw, "false", StringComparison.OrdinalIgnoreCase);
|
||||||
|
|
||||||
foreach (var role in new[] { SystemRoles.SuperAdmin, SystemRoles.Admin, SystemRoles.Cashier, SystemRoles.Storekeeper })
|
foreach (var role in new[] { SystemRoles.SuperAdmin, SystemRoles.Admin, SystemRoles.Cashier, SystemRoles.Storekeeper })
|
||||||
{
|
{
|
||||||
if (!await roleMgr.RoleExistsAsync(role))
|
if (!await roleMgr.RoleExistsAsync(role))
|
||||||
|
|
@ -57,29 +64,33 @@ public async Task StartAsync(CancellationToken ct)
|
||||||
await SeedGlobalUnitsAsync(db, ct);
|
await SeedGlobalUnitsAsync(db, ct);
|
||||||
|
|
||||||
var kzt = await db.Currencies.FirstOrDefaultAsync(c => c.Code == "KZT", ct);
|
var kzt = await db.Currencies.FirstOrDefaultAsync(c => c.Code == "KZT", ct);
|
||||||
var demoOrg = await db.Organizations.FirstOrDefaultAsync(o => o.Name == "Demo Market", ct);
|
Organization? demoOrg = null;
|
||||||
if (demoOrg is null)
|
if (seedDemo)
|
||||||
{
|
{
|
||||||
demoOrg = new Organization
|
demoOrg = await db.Organizations.FirstOrDefaultAsync(o => o.Name == "Demo Market", ct);
|
||||||
|
if (demoOrg is null)
|
||||||
{
|
{
|
||||||
Name = "Demo Market",
|
demoOrg = new Organization
|
||||||
CountryCode = "KZ",
|
{
|
||||||
Bin = "000000000000",
|
Name = "Demo Market",
|
||||||
Address = "Алматы, ул. Пример 1",
|
CountryCode = "KZ",
|
||||||
Phone = "+7 (777) 000-00-00",
|
Bin = "000000000000",
|
||||||
Email = "demo@food-market.local",
|
Address = "Алматы, ул. Пример 1",
|
||||||
DefaultCurrencyId = kzt?.Id,
|
Phone = "+7 (777) 000-00-00",
|
||||||
};
|
Email = "demo@food-market.local",
|
||||||
db.Organizations.Add(demoOrg);
|
DefaultCurrencyId = kzt?.Id,
|
||||||
await db.SaveChangesAsync(ct);
|
};
|
||||||
}
|
db.Organizations.Add(demoOrg);
|
||||||
else if (demoOrg.DefaultCurrencyId is null && kzt is not null)
|
await db.SaveChangesAsync(ct);
|
||||||
{
|
}
|
||||||
demoOrg.DefaultCurrencyId = kzt.Id;
|
else if (demoOrg.DefaultCurrencyId is null && kzt is not null)
|
||||||
await db.SaveChangesAsync(ct);
|
{
|
||||||
}
|
demoOrg.DefaultCurrencyId = kzt.Id;
|
||||||
|
await db.SaveChangesAsync(ct);
|
||||||
|
}
|
||||||
|
|
||||||
await SeedTenantReferencesAsync(db, demoOrg.Id, ct);
|
await SeedTenantReferencesAsync(db, demoOrg.Id, ct);
|
||||||
|
}
|
||||||
|
|
||||||
// SuperAdmin платформы — без OrganizationId, видит все организации
|
// SuperAdmin платформы — без OrganizationId, видит все организации
|
||||||
const string superAdminEmail = "admin@food-market.local";
|
const string superAdminEmail = "admin@food-market.local";
|
||||||
|
|
@ -126,30 +137,33 @@ public async Task StartAsync(CancellationToken ct)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Admin демо-организации — владелец/директор Demo Market
|
// Admin демо-организации — владелец/директор Demo Market (только dev/stage).
|
||||||
const string demoAdminEmail = "admin@demo-market.local";
|
if (seedDemo && demoOrg is not null)
|
||||||
var demoAdmin = await userMgr.FindByEmailAsync(demoAdminEmail);
|
|
||||||
if (demoAdmin is null && !string.IsNullOrWhiteSpace(seedPassword))
|
|
||||||
{
|
{
|
||||||
demoAdmin = new User
|
const string demoAdminEmail = "admin@demo-market.local";
|
||||||
|
var demoAdmin = await userMgr.FindByEmailAsync(demoAdminEmail);
|
||||||
|
if (demoAdmin is null && !string.IsNullOrWhiteSpace(seedPassword))
|
||||||
{
|
{
|
||||||
UserName = demoAdminEmail,
|
demoAdmin = new User
|
||||||
Email = demoAdminEmail,
|
{
|
||||||
EmailConfirmed = true,
|
UserName = demoAdminEmail,
|
||||||
FullName = "Demo Market Admin",
|
Email = demoAdminEmail,
|
||||||
OrganizationId = demoOrg.Id,
|
EmailConfirmed = true,
|
||||||
};
|
FullName = "Demo Market Admin",
|
||||||
var result = await userMgr.CreateAsync(demoAdmin, seedPassword);
|
OrganizationId = demoOrg.Id,
|
||||||
if (result.Succeeded)
|
};
|
||||||
await userMgr.AddToRoleAsync(demoAdmin, SystemRoles.Admin);
|
var result = await userMgr.CreateAsync(demoAdmin, seedPassword);
|
||||||
}
|
if (result.Succeeded)
|
||||||
else if (demoAdmin is not null)
|
await userMgr.AddToRoleAsync(demoAdmin, SystemRoles.Admin);
|
||||||
{
|
}
|
||||||
if (!await userMgr.IsInRoleAsync(demoAdmin, SystemRoles.Admin))
|
else if (demoAdmin is not null)
|
||||||
await userMgr.AddToRoleAsync(demoAdmin, SystemRoles.Admin);
|
{
|
||||||
}
|
if (!await userMgr.IsInRoleAsync(demoAdmin, SystemRoles.Admin))
|
||||||
|
await userMgr.AddToRoleAsync(demoAdmin, SystemRoles.Admin);
|
||||||
|
}
|
||||||
|
|
||||||
await SeedAdminEmployeeAsync(db, demoOrg.Id, superAdmin?.Id, ct);
|
await SeedAdminEmployeeAsync(db, demoOrg.Id, superAdmin?.Id, ct);
|
||||||
|
}
|
||||||
|
|
||||||
// Глобальные SystemSettings — single-row. Сидируем дефолт 30 дней
|
// Глобальные SystemSettings — single-row. Сидируем дефолт 30 дней
|
||||||
// retention если ещё нет записи.
|
// retention если ещё нет записи.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue