namespace NeonSprawl.Server.Game.Gathering; /// Maps GET /game/world/resource-node-definitions (NEO-60). public static class ResourceNodeDefinitionsWorldApi { public static WebApplication MapResourceNodeDefinitionsWorldApi(this WebApplication app) { app.MapGet( "/game/world/resource-node-definitions", (IResourceNodeDefinitionRegistry registry) => { var defs = registry.GetDefinitionsInIdOrder(); var nodes = new List(defs.Count); foreach (var d in defs) { if (!registry.TryGetYield(d.NodeDefId, out var yieldRow) || yieldRow is null) { throw new InvalidOperationException( $"Resource node definition '{d.NodeDefId}' has no yield row in the loaded catalog."); } nodes.Add( new ResourceNodeDefinitionJson { Id = d.NodeDefId, DisplayName = d.DisplayName, GatherLens = d.GatherLens, MaxGathers = d.MaxGathers, Yield = new ResourceNodeYieldJson { ItemId = yieldRow.ItemId, Quantity = yieldRow.Quantity, }, }); } return Results.Json( new ResourceNodeDefinitionsListResponse { SchemaVersion = ResourceNodeDefinitionsListResponse.CurrentSchemaVersion, Nodes = nodes, }); }); return app; } }