feat: Implement quest reward chest functionality; enhance gift generation and consumption logic, update database schema, and add tests for new behavior

This commit is contained in:
Alexa
2026-07-08 02:40:42 +03:00
parent 892c27ffea
commit 74951d5c30
6 changed files with 267 additions and 36 deletions
@@ -110,6 +110,7 @@ public static class DatabaseBootstrap
await EnsureRoomSceneColumnsAsync(db);
await EnsureInventionColumnsAsync(db);
await EnsureGameRewardColumnsAsync(db);
await EnsureGiftPackageColumnsAsync(db);
await EnsureMarch2023TablesAsync(db);
// Coach system account at Player.Id=1. The RR-Original room seeder
@@ -422,6 +423,26 @@ public static class DatabaseBootstrap
}
}
/// <summary>Post-Initial column on GiftPackages for quest-reward
/// chests (the exact store item the gift grants on consume).</summary>
private static async Task EnsureGiftPackageColumnsAsync(DorkNetDbContext db)
{
var provider = db.Database.ProviderName ?? string.Empty;
if (provider.Contains("Npgsql", StringComparison.OrdinalIgnoreCase))
{
await db.Database.ExecuteSqlRawAsync(
@"ALTER TABLE ""GiftPackages"" ADD COLUMN IF NOT EXISTS ""SourceStoreItemId"" bigint NOT NULL DEFAULT 0;");
return;
}
try
{
await db.Database.ExecuteSqlRawAsync(
@"ALTER TABLE ""GiftPackages"" ADD COLUMN ""SourceStoreItemId"" INTEGER NOT NULL DEFAULT 0;");
}
catch { }
}
private static async Task EnsureRoomSceneColumnsAsync(DorkNetDbContext db)
{
var provider = db.Database.ProviderName ?? string.Empty;