using System.Text.Json.Serialization; namespace NeonSprawl.Server.Game.Crafting; /// JSON body for GET /game/world/recipe-definitions (NEO-68). public sealed class RecipeDefinitionsListResponse { public const int CurrentSchemaVersion = 1; [JsonPropertyName("schemaVersion")] public int SchemaVersion { get; init; } = CurrentSchemaVersion; /// Loaded recipes ordered by stable id (ordinal), matching . [JsonPropertyName("recipes")] public required IReadOnlyList Recipes { get; init; } } /// One row in the read-only recipe definition projection. public sealed class RecipeDefinitionJson { [JsonPropertyName("id")] public required string Id { get; init; } [JsonPropertyName("displayName")] public required string DisplayName { get; init; } [JsonPropertyName("recipeKind")] public required string RecipeKind { get; init; } [JsonPropertyName("requiredSkillId")] public required string RequiredSkillId { get; init; } [JsonPropertyName("inputs")] public required IReadOnlyList Inputs { get; init; } [JsonPropertyName("outputs")] public required IReadOnlyList Outputs { get; init; } } /// One input or output row in the read-only recipe definition projection. public sealed class RecipeIoJson { [JsonPropertyName("itemId")] public required string ItemId { get; init; } [JsonPropertyName("quantity")] public required int Quantity { get; init; } }