Files
SVSimServer/SVSim.Database/Models/SerialCodeEntry.cs
gamer147 206be77a86 feat(serial-code): add SerialCode + SerialCodeReward + ViewerSerialCodeRedemption entities
Three new EF entities for /campaign/regist_serial_code: SerialCodeEntry (code, message,
window, enabled flag), SerialCodeRewardEntry (FK child, per-slot reward), and
ViewerSerialCodeRedemption (composite-PK redemption record). Registered in SVSimDbContext
with unique index on Code and cascade FK constraints. 3/3 persistence tests pass.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-09 18:42:10 -04:00

28 lines
1.1 KiB
C#

using SVSim.Database.Common;
namespace SVSim.Database.Models;
/// <summary>
/// Top-level entity for a promotional serial code. Admin inserts these directly via SQL;
/// there is no JSON seed or admin endpoint. Case-sensitive match on <see cref="Code"/>.
/// </summary>
public class SerialCodeEntry : BaseEntity<int>
{
/// <summary>User-typed code. Case-sensitive; unique index enforces no duplicates.</summary>
public string Code { get; set; } = string.Empty;
/// <summary>Player-facing mail body, copied onto every <c>ViewerPresent</c> created at redemption.</summary>
public string Message { get; set; } = string.Empty;
/// <summary>When the code becomes valid. NULL = always valid from creation.</summary>
public DateTime? StartAt { get; set; }
/// <summary>When the code expires. NULL = never expires.</summary>
public DateTime? EndAt { get; set; }
/// <summary>Admin kill-switch. False = treat as if it doesn't exist.</summary>
public bool IsEnabled { get; set; }
public List<SerialCodeRewardEntry> Rewards { get; set; } = new List<SerialCodeRewardEntry>();
}