// using Asp.Versioning; // // using BrokerCore.ApiModels; // using BrokerCore.Common; // using BrokerCore.Services; // using BrokerCore.DbEntity; // // using Microsoft.AspNetCore.Mvc; // // using Swashbuckle.AspNetCore.Annotations; // // namespace BrokerApiServer.Controllers; // // using Common; // // [ApiVersion("1.0")] // [Route("api/v1")] // [ApiController, SwaggerTag("**PlanetUser 항목으로 이전 후 삭제 예정** (3월 말 예정)")] // // 플래닛에서 b2b로 통신하는 컨트롤러 // public sealed class CurrencyController : PlanetAuthControllerBase // { // private readonly SapphireExchangeService m_exchange_service; // // public CurrencyController( // SapphireExchangeService exchangeService) // { // m_exchange_service = exchangeService; // } // // [SwaggerIgnore] // [HttpPost("balance/sapphire"), RequirePlanetAuth] // [Produces("application/json")] // [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(SapphireResponse))] // [ProducesResponseType(StatusCodes.Status400BadRequest, Type = typeof(ApiErrorResponse))] // [SwaggerOperation(Summary = "사파이어 현재 수량 조회")] // public async Task getSapphireBalance(SapphireRequest request) // { // await m_exchange_service.authUser(request.UserGuid, this.PlanetId); // // var current_sapphire_amount = await m_exchange_service.getCurrentSapphire(); // return Ok(new SapphireResponse { Amount = current_sapphire_amount }); // } // // [SwaggerIgnore] // [HttpPost("exchange/order/list"), RequirePlanetAuth] // [Produces("application/json")] // [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(ExchangeOrderListResponse))] // [ProducesResponseType(StatusCodes.Status400BadRequest, Type = typeof(ApiErrorResponse))] // [SwaggerOperation(Summary = "사파이어 교환 주문 목록 조회")] // public async Task getOrders( // [SwaggerRequestBody] ExchangeOrderListRequest request, // CancellationToken cancellationToken) // { // var planet_id = this.PlanetId; // var user_guid = request.UserGuid; // await m_exchange_service.authUser(user_guid, this.PlanetId); // // ExchangeOrderStatus? order_status = request switch // { // { Option: FindOption.Completed } => ExchangeOrderStatus.Completed, // { Option: FindOption.Pending } => ExchangeOrderStatus.Pending, // _ => null // 전체 조회 // }; // var orders = // await m_exchange_service.findOrderList(planet_id, user_guid, order_status, request.PageIndex, // request.PageSize, "desc", cancellationToken); // var mapped_orders = orders.Select(x => new ExchangeOrder // { // OrderId = x.OrderId, // SapphireAmount = x.SapphireReducedDelta, // SapphireReduceAmount = x.SapphireReducedDelta, // EmeraldAmount = x.PlanetMoneyIncDelta, // CreatedAt = x.CreatedAt, // CompletedAt = x.CompletedAt, // Status = x.OrderStatus // }); // return Ok(new ExchangeOrderListResponse { Orders = mapped_orders }); // } // // // [HttpPost("exchange/order/list_for_user"), RequireUserJwtAuth] // // [Produces("application/json")] // // [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(ExchangeOrderListResponse))] // // [ProducesResponseType(StatusCodes.Status400BadRequest, Type = typeof(ApiErrorResponse))] // // [SwaggerOperation(Summary = "사파이어 교환 주문 목록 조회")] // // public async Task getOrdersForUser( // // [SwaggerRequestBody] ExchangeOrderListRequest request, // // CancellationToken cancellationToken) // // { // // var planet_id = this.PlanetId; // // var user_guid = request.UserGuid; // // await m_exchange_service.authUser(user_guid, planet_id); // // // // ExchangeOrderStatus? order_status = request switch // // { // // { Option: FindOption.Completed } => ExchangeOrderStatus.Completed, // // { Option: FindOption.Pending } => ExchangeOrderStatus.Pending, // // _ => null // 전체 조회 // // }; // // var orders = // // await m_exchange_service.findOrderList(planet_id, user_guid, order_status, request.PageIndex, // // request.PageSize, request.SortOrder, cancellationToken); // // var mapped_orders = orders.Select(x => new ExchangeOrder // // { // // OrderId = x.OrderId, // // SapphireAmount = x.SapphireReducedDelta, // // SapphireReduceAmount = x.SapphireReducedDelta, // // EmeraldAmount = x.PlanetMoneyIncDelta, // // CreatedAt = x.CreatedAt, // // CompletedAt = x.CompletedAt, // // Status = x.OrderStatus // // }); // // return Ok(new ExchangeOrderListResponse { Orders = mapped_orders }); // // } // // [SwaggerIgnore] // [HttpPost("exchange/order/create"), RequirePlanetAuth] // [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(ExchangeOrderResponse))] // [ProducesResponseType(StatusCodes.Status400BadRequest, Type = typeof(ApiErrorResponse))] // [SwaggerOperation(Summary = "사파이어 교환 주문 체결 (사파이어 차감)")] // public async Task createOrder( // ExchangeOrderRequest request, // CancellationToken cancellationToken) // { // var user_guid = request.UserGuid; // await m_exchange_service.authUser(user_guid, this.PlanetId); // // 메타버스 클라이언트에서 정상적으로 // Guard.Against.isTrue(m_exchange_service.isUserLoggedIn(), // ServerErrorCode.MetaverseClientOnConnected, // "메타버스에 접속 중인 상태. 메타버스에서 정상적으로 로그아웃 한 후에 다시 시도 바람."); // // var (order, current_sapphire_balance) = // await m_exchange_service.createOrder(this.PlanetId, this.PlanetServerType, request.Sapphire, // request.Emerald); // // var response = new ExchangeOrderResponse // { // OrderId = order.OrderId, // SapphireAmount = order.SapphireReducedDelta, // EmeraldAmount = order.PlanetMoneyIncDelta, // CurrentSapphireBalance = current_sapphire_balance, // }; // return Ok(response); // } // // [SwaggerIgnore] // [HttpPost("exchange/order/complete"), RequirePlanetAuth] // [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(ExchangeOrderCompleteResponse))] // [ProducesResponseType(StatusCodes.Status400BadRequest, Type = typeof(ApiErrorResponse))] // [SwaggerOperation(Summary = "사파이어 교환 완료 (완료된 이후에 에메랄드 지급")] // public async Task completeOrder( // ExchangeOrderCompleteRequest request, // CancellationToken cancellationToken) // { // await m_exchange_service.authUser(request.UserGuid, this.PlanetId); // // var order = await m_exchange_service.completeOrder(request.OrderId, cancellationToken); // var response = new ExchangeOrderCompleteResponse // { // OrderId = order.OrderId, // SapphireAmount = order.SapphireReducedDelta, // EmeraldAmount = order.PlanetMoneyIncDelta, // Status = order.OrderStatus, // }; // return Ok(response); // } // }