using System.Text.Json.Serialization; namespace NeonSprawl.Server.Game.Quests; /// JSON body for GET /game/players/{{id}}/quest-progress (NEO-119). public sealed class QuestProgressListResponse { 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 quest id (ordinal). [JsonPropertyName("quests")] public required IReadOnlyList Quests { get; init; } } /// Authoritative per-player progress for one quest definition. public sealed class QuestProgressRowJson { [JsonPropertyName("questId")] public required string QuestId { get; init; } /// not_started, active, or completed. [JsonPropertyName("status")] public required string Status { get; init; } [JsonPropertyName("currentStepIndex")] public int CurrentStepIndex { get; init; } /// Objective id → accumulated count for the current step only. [JsonPropertyName("objectiveCounters")] public required IReadOnlyDictionary ObjectiveCounters { get; init; } [JsonPropertyName("completedAt")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public DateTimeOffset? CompletedAt { get; init; } }