using Microsoft.AspNetCore.Mvc; using RadicadeServer.API.Rooms; using RadicadeServer.API.Rooms.V1; using RadicadeServer.DB; using RadicadeServer.Extensions; namespace RadicadeServer.API.Rooms.Currency.V1 { [Route("api/roomcurrencies/v1")] [Route("econ/api/roomcurrencies/v1")] public class RoomCurrencyAPI(RecDBContext db) : Controller { [HttpGet("betaEnabled")] public bool IsBetaEnabled() { return true; } [HttpGet("currencies")] public async Task GetRoomCurrencies([FromQuery] long roomId) { return Ok(await RoomAssetStore.GetDtosAsync(db, roomId, "currency")); } [HttpGet("getAllBalances")] public List GetAllBalances([FromQuery] long roomId) { return []; } [HttpGet("getBalance")] public IActionResult GetBalance( [FromQuery] string? currencyId, [FromQuery] long? accountId, [FromQuery] long? roomId) { return Ok(new { CurrencyId = currencyId ?? string.Empty, AccountId = accountId ?? User.GetUserId() ?? 0, RoomId = roomId ?? 0, Balance = 0 }); } [HttpPost("createCurrency")] public async Task CreateCurrency() { var body = await RoomEconomyPayload.ReadBodyAsync(Request); var roomId = await RoomEconomyPayload.RoomIdAsync(db, Request, body, "roomId", "RoomId"); if (roomId is not > 0) return BadRequest(new { Message = "roomId is required." }); var currencyId = RoomEconomyPayload.String(body, "currencyId", "CurrencyId") ?? RoomEconomyPayload.NewId(); var currency = RoomEconomyPayload.Fields(body); currency["CurrencyId"] = currencyId; currency["RoomId"] = roomId.Value; currency["CurrencyType"] = currency.TryGetValue("CurrencyType", out var type) && type != null ? type : "RoomCurrency"; currency["Name"] = RoomEconomyPayload.String(body, "name", "Name") ?? "Currency"; currency["Description"] = RoomEconomyPayload.String(body, "description", "Description") ?? string.Empty; currency["InitialBalance"] = RoomEconomyPayload.Long(body, "initialBalance", "InitialBalance") ?? 0; await RoomAssetStore.SaveAsync(db, new RoomAssetRecord { Id = currencyId, RoomId = roomId.Value, Kind = "currency", Fields = currency }); return Ok(currency); } } }