Files
Radicade/Server/Rooms/RoomCurrencyAPI.cs
T
2026-10-16 23:33:13 -07:00

74 lines
2.2 KiB
C#

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<IActionResult> GetRoomCurrencies([FromQuery] long roomId)
{
return Ok(await RoomAssetStore.GetDtosAsync(db, roomId, "currency"));
}
[HttpGet("getAllBalances")]
public List<object> 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<IActionResult> 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);
}
}
}