feat(missions): add 3 catalog entities (mission, achievement, BP monthly)

This commit is contained in:
gamer147
2026-05-27 10:01:27 -04:00
parent c303d3040d
commit 9988ed85df
3 changed files with 77 additions and 0 deletions

View File

@@ -0,0 +1,23 @@
using SVSim.Database.Common;
namespace SVSim.Database.Models;
/// <summary>
/// One tier of an achievement. PK is composite (AchievementType, Level). Rows are seeded from
/// <c>seeds/achievement-catalog.json</c>. The captured tier IS the max tier in our world —
/// max_level on the wire is computed as MAX(Level) per AchievementType at /mission/info time.
/// Inherits Id from BaseEntity but the Id is unused; PK is configured in DbContext.
/// </summary>
public class AchievementCatalogEntry
{
public int AchievementType { get; set; }
public int Level { get; set; }
public string Name { get; set; } = "";
public int RequireNumber { get; set; }
public int RewardType { get; set; }
public long RewardDetailId { get; set; }
public int RewardNumber { get; set; }
public int OrderNum { get; set; }
public string? EventType { get; set; }
public int? EventArg { get; set; }
}

View File

@@ -0,0 +1,28 @@
using System.ComponentModel.DataAnnotations.Schema;
using SVSim.Database.Common;
namespace SVSim.Database.Models;
/// <summary>
/// One row of the BP monthly mission list, keyed to a specific (Year, Month).
/// `RewardType` is nullable because some monthly missions only award BP points (capture shows
/// the "Play 5 Challenge matches" entry has no reward_info block on wire).
/// Id is auto-generated — override BaseEntity's [DatabaseGenerated(None)] default.
/// </summary>
public class BattlePassMonthlyMissionEntry : BaseEntity<int>
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public override int Id { get; set; }
public int Year { get; set; }
public int Month { get; set; }
public int OrderNum { get; set; }
public string Name { get; set; } = "";
public int RequireNumber { get; set; }
public int BattlePassPoint { get; set; }
public int? RewardType { get; set; }
public long? RewardDetailId { get; set; }
public int? RewardNumber { get; set; }
public string? EventType { get; set; }
public int? EventArg { get; set; }
}

View File

@@ -0,0 +1,26 @@
using SVSim.Database.Common;
namespace SVSim.Database.Models;
/// <summary>
/// One mission template. Id = wire mission_id. Rows are seeded from
/// <c>seeds/mission-catalog.json</c> (extracted from /mission/info captures).
/// LotType 2 = weekly rotation slot; LotType 6 = daily slot (per UserMission.GEM_MISSION_TYPE).
/// EventType is the catalog-side key the progress service matches against; NULL means the row
/// was captured but no event mapping has been added yet (importer logs a warning).
/// </summary>
public class MissionCatalogEntry : BaseEntity<int>
{
public string Name { get; set; } = "";
public int LotType { get; set; }
public int RequireNumber { get; set; }
public int RewardType { get; set; }
public long RewardDetailId { get; set; }
public int RewardNumber { get; set; }
public int BattlePassPoint { get; set; }
public bool DefaultFlag { get; set; }
public string? EventType { get; set; }
public int? EventArg { get; set; }
public long StartTime { get; set; }
public long? EndTime { get; set; }
}