diff --git a/SVSim.Database/Models/AchievementCatalogEntry.cs b/SVSim.Database/Models/AchievementCatalogEntry.cs new file mode 100644 index 0000000..5db492b --- /dev/null +++ b/SVSim.Database/Models/AchievementCatalogEntry.cs @@ -0,0 +1,23 @@ +using SVSim.Database.Common; + +namespace SVSim.Database.Models; + +/// +/// One tier of an achievement. PK is composite (AchievementType, Level). Rows are seeded from +/// seeds/achievement-catalog.json. 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. +/// +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; } +} diff --git a/SVSim.Database/Models/BattlePassMonthlyMissionEntry.cs b/SVSim.Database/Models/BattlePassMonthlyMissionEntry.cs new file mode 100644 index 0000000..4ddec79 --- /dev/null +++ b/SVSim.Database/Models/BattlePassMonthlyMissionEntry.cs @@ -0,0 +1,28 @@ +using System.ComponentModel.DataAnnotations.Schema; +using SVSim.Database.Common; + +namespace SVSim.Database.Models; + +/// +/// 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. +/// +public class BattlePassMonthlyMissionEntry : BaseEntity +{ + [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; } +} diff --git a/SVSim.Database/Models/MissionCatalogEntry.cs b/SVSim.Database/Models/MissionCatalogEntry.cs new file mode 100644 index 0000000..7301a6c --- /dev/null +++ b/SVSim.Database/Models/MissionCatalogEntry.cs @@ -0,0 +1,26 @@ +using SVSim.Database.Common; + +namespace SVSim.Database.Models; + +/// +/// One mission template. Id = wire mission_id. Rows are seeded from +/// seeds/mission-catalog.json (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). +/// +public class MissionCatalogEntry : BaseEntity +{ + 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; } +}