fix(demo): scope category/item IDs per café to prevent PK collisions
CI/CD / CI · API (dotnet build + test) (push) Successful in 56s
CI/CD / CI · Admin API (dotnet build) (push) Successful in 52s
CI/CD / CI · Dashboard (tsc) (push) Successful in 1m3s
CI/CD / CI · Admin Web (tsc) (push) Successful in 35s
CI/CD / CI · Website (tsc) (push) Successful in 43s
CI/CD / CI · Koja (tsc) (push) Successful in 48s
CI/CD / Deploy · all services (push) Successful in 1m31s
CI/CD / CI · API (dotnet build + test) (push) Successful in 56s
CI/CD / CI · Admin API (dotnet build) (push) Successful in 52s
CI/CD / CI · Dashboard (tsc) (push) Successful in 1m3s
CI/CD / CI · Admin Web (tsc) (push) Successful in 35s
CI/CD / CI · Website (tsc) (push) Successful in 43s
CI/CD / CI · Koja (tsc) (push) Successful in 48s
CI/CD / Deploy · all services (push) Successful in 1m31s
DemoMenuSeeder used hardcoded IDs like cat_demo_coffee for every café. If the dev seeder (runs when ASPNETCORE_ENVIRONMENT=Development) already inserted those IDs for cafe_demo_001, a production café clicking "Add demo data" hit a primary-key constraint violation. Fix: EnsureMenuAsync now accepts useScopedIds=true which prefixes every category and item ID with cafeId (e.g. cafe_abc_cat_demo_coffee). CategoryId FKs on items are remapped through the same function. DemoSeedService (the API endpoint handler) always passes useScopedIds=true. DevelopmentDataSeeder keeps useScopedIds=false (default) so the existing cafe_demo_001 rows in dev databases are not touched. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -56,10 +56,12 @@ public class DemoSeedService : IDemoSeedService
|
||||
.FirstAsync(ct);
|
||||
}
|
||||
|
||||
// 2. Seed menu (categories + items) using café-agnostic seeder
|
||||
// 2. Seed menu (categories + items) using café-agnostic seeder.
|
||||
// useScopedIds=true prefixes all IDs with cafeId so multiple cafés
|
||||
// can each have their own demo menu without primary-key collisions.
|
||||
var beforeCats = await _db.MenuCategories.CountAsync(c => c.CafeId == cafeId, ct);
|
||||
var beforeItems = await _db.MenuItems.CountAsync(i => i.CafeId == cafeId, ct);
|
||||
await DemoMenuSeeder.EnsureMenuAsync(_db, cafeId, taxId, _logger);
|
||||
await DemoMenuSeeder.EnsureMenuAsync(_db, cafeId, taxId, _logger, useScopedIds: true);
|
||||
var afterCats = await _db.MenuCategories.CountAsync(c => c.CafeId == cafeId, ct);
|
||||
var afterItems = await _db.MenuItems.CountAsync(i => i.CafeId == cafeId, ct);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user