Build & Deploy / build (push) Successful in 42s
Bundle a compact id -> {name,rarity,category} lookup (Data/gameref.json, 1177 entries,
built from community-datamined TCF-Wiki data) and a GameRefService. The admin back-office
now shows readable names + coloured rarity for inventory items instead of raw ids, and a
new /admin/catalog page browses the known game catalog (searchable, by category).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
50 lines
1.7 KiB
C#
50 lines
1.7 KiB
C#
using System.Text.Json;
|
|
using System.Text.Json.Serialization;
|
|
|
|
namespace Prospect.Server.Api.Services.GameRef;
|
|
|
|
// One reference entry: readable name, rarity, category. Sourced from community-datamined
|
|
// data (TCF-Wiki), bundled as Data/gameref.json. Compact keys n/r/c to keep the file small.
|
|
public class GameRefEntry
|
|
{
|
|
[JsonPropertyName("n")] public string Name { get; set; } = "";
|
|
[JsonPropertyName("r")] public string Rarity { get; set; } = "";
|
|
[JsonPropertyName("c")] public string Category { get; set; } = "";
|
|
}
|
|
|
|
// Resolves internal item / vanity ids to readable names for the admin back-office.
|
|
public class GameRefService
|
|
{
|
|
private readonly Dictionary<string, GameRefEntry> _ref = new(StringComparer.OrdinalIgnoreCase);
|
|
|
|
public GameRefService(ILogger<GameRefService> logger)
|
|
{
|
|
try
|
|
{
|
|
var path = Path.Combine(AppContext.BaseDirectory, "Data", "gameref.json");
|
|
if (File.Exists(path))
|
|
{
|
|
var data = JsonSerializer.Deserialize<Dictionary<string, GameRefEntry>>(File.ReadAllText(path));
|
|
if (data != null)
|
|
{
|
|
foreach (var kv in data)
|
|
{
|
|
_ref[kv.Key] = kv.Value;
|
|
}
|
|
}
|
|
}
|
|
logger.LogInformation("GameRef loaded {Count} entries", _ref.Count);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
logger.LogWarning(e, "GameRef load failed");
|
|
}
|
|
}
|
|
|
|
public GameRefEntry? Get(string? id) => id != null && _ref.TryGetValue(id, out var e) ? e : null;
|
|
|
|
public string Name(string? id) => Get(id)?.Name ?? id ?? "";
|
|
|
|
public IReadOnlyDictionary<string, GameRefEntry> All => _ref;
|
|
}
|