using System.Text.Json.Serialization; namespace NeonSprawl.Server.Game.Encounters; /// JSON body for GET /game/players/{{id}}/encounter-progress (NEO-108). public sealed class EncounterProgressListResponse { public const int CurrentSchemaVersion = 1; [JsonPropertyName("schemaVersion")] public int SchemaVersion { get; init; } = CurrentSchemaVersion; [JsonPropertyName("playerId")] public required string PlayerId { get; init; } /// Per-player rows ordered by catalog encounter id (ordinal). [JsonPropertyName("encounters")] public required IReadOnlyList Encounters { get; init; } } /// Authoritative per-player progress for one encounter definition. public sealed class EncounterProgressRowJson { [JsonPropertyName("encounterId")] public required string EncounterId { get; init; } /// inactive, active, or completed. [JsonPropertyName("state")] public required string State { get; init; } [JsonPropertyName("defeatedTargetIds")] public required IReadOnlyList DefeatedTargetIds { get; init; } [JsonPropertyName("completedAt")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public DateTimeOffset? CompletedAt { get; init; } [JsonPropertyName("rewardGrantSummary")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public IReadOnlyList? RewardGrantSummary { get; init; } }