using System.Text.Json.Serialization; namespace NeonSprawl.Server.Game.Gathering; /// JSON body for GET /game/world/resource-node-definitions (NEO-60). public sealed class ResourceNodeDefinitionsListResponse { public const int CurrentSchemaVersion = 1; [JsonPropertyName("schemaVersion")] public int SchemaVersion { get; init; } = CurrentSchemaVersion; /// Loaded node defs ordered by stable id (ordinal), matching . [JsonPropertyName("nodes")] public required IReadOnlyList Nodes { get; init; } } /// One row in the read-only resource-node definition projection. public sealed class ResourceNodeDefinitionJson { [JsonPropertyName("id")] public required string Id { get; init; } [JsonPropertyName("displayName")] public required string DisplayName { get; init; } [JsonPropertyName("gatherLens")] public required string GatherLens { get; init; } [JsonPropertyName("maxGathers")] public required int MaxGathers { get; init; } [JsonPropertyName("yield")] public required ResourceNodeYieldJson Yield { get; init; } } /// Fixed yield summary for one resource node def. public sealed class ResourceNodeYieldJson { [JsonPropertyName("itemId")] public required string ItemId { get; init; } [JsonPropertyName("quantity")] public required int Quantity { get; init; } }