Merge branch 'worktree-agent-a0e6f31173772c798'

# Conflicts:
#	GerbilManagerWebAPI/ApplicationContext.cs
#	GerbilManagerWebAPI/Program.cs
#	gerbil-manager-web/e2e/mock-data.ts
#	gerbil-manager-web/src/strings/de.ts
This commit is contained in:
2026-06-22 23:01:14 +02:00
17 changed files with 2723 additions and 0 deletions

View File

@@ -27,6 +27,7 @@ public class ApplicationContext : DbContext
public DbSet<Feedback> Feedback => Set<Feedback>();
public DbSet<AcquisitionRecord> AcquisitionRecords => Set<AcquisitionRecord>();
public DbSet<SaleReservation> SaleReservations => Set<SaleReservation>();
public DbSet<WaitingListEntry> WaitingListEntries => Set<WaitingListEntry>();
// Keep Gerbil.NameSearch in sync on every save (separator-insensitive search key),
// so it can never drift from Name regardless of which code path mutates the entity.
@@ -234,6 +235,14 @@ public class ApplicationContext : DbContext
e.HasIndex(r => r.GerbilId);
});
// WAITLIST: same relationship-free pattern as Feedback. ContactId is a plain
// nullable Guid column (no navigation property → EF creates NO foreign key), so
// the import re-ingest wipe of Contacts never cascades into — or breaks —
// waiting-list rows. They survive re-ingest, which is the whole point.
modelBuilder.Entity<WaitingListEntry>(e =>
{
e.HasIndex(w => w.CreatedAt);
// DB-4: German collation on remaining searched/sorted text columns (Npgsql-only).
if (isNpgsql)
{