Files
caliverse_server/BrokerApiCore/ApiModels/ExchangeApiModel.cs
2025-05-01 07:23:28 +09:00

165 lines
4.8 KiB
C#

using System.ComponentModel;
using ServerCommon;
using Swashbuckle.AspNetCore.Annotations;
namespace BrokerApiCore;
[SwaggerSchema("사파이어 잔액 요청")]
public class SapphireRequest
{
[Description("사용자 GUID")]
public required string UserGuid { get; init; }
}
[SwaggerSchema("사파이어 잔액 응답")]
public class SapphireResponse
{
[Description("사파이어 잔액")]
public required long Amount { get; init; }
}
[SwaggerSchema("교환 주문 정보")]
public class ExchangeOrder
{
[Description("주문 ID")]
public required string OrderId { get; init; }
[Description("사파이어 수량 - 삭제 예정"), SwaggerIgnore]
public long? SapphireAmount { get; init; }
[Description("사파이어 차감 수량")]
public required long SapphireReduceAmount { get; init; }
[Description("에메랄드 수량")]
public required long EmeraldAmount { get; init; }
[Description("주문 생성 시간")]
public required DateTime CreatedAt { get; init; }
[Description("주문 완료 시간")]
public DateTime? CompletedAt { get; init; }
[Description("주문 상태")]
public required ExchangeOrderStatus Status { get; init; }
}
[SwaggerSchema("칼리버스와 플래닛 간 재화 교환 주문 정보")]
public class CurrencyExchangeOrder
{
[Description("주문 ID")]
public required string OrderId { get; init; }
[Description("재화 타입 - ")]
public required CurrencyType CurrencyType { get; init; }
[Description("플래닛의 재화 변동 수량")]
public required long CurrencyDeltaAmount { get; init; }
[Description("재화 타입 - ")]
public required PlanetCurrencyType PlanetCurrencyType { get; init; }
[Description("플래닛의 재화 변동 수량")]
public required long PlanetCurrencyDeltaAmount { get; init; }
[Description("주문 생성 시간")]
public required DateTime CreatedAt { get; init; }
[Description("주문 완료 시간")]
public DateTime? CompletedAt { get; init; }
[Description("주문 상태")]
public required ExchangeOrderStatus Status { get; init; }
}
// [SwaggerSchema("조회 옵션")]
// [JsonConverter(typeof(JsonStringEnumConverter))]
[SwaggerSchema("조회 옵션 - 'All': 전체, 'Pending': 대기, 'Completed': 완료")]
public enum FindOption
{
[Description("전체 목록 조회")]
// [EnumMember(Value = "All")]
All = 0,
// [EnumMember(Value = "Pending")]
[Description("대기 중인 주문 조회")]
Pending = 1,
[Description("완료된 주문 조회")]
// [EnumMember(Value = "Completed")]
Completed = 2
}
[SwaggerSchema("교환 주문 목록 요청")]
public class ExchangeOrderListRequest
{
[Description("사용자 GUID")]
public required string UserGuid { get; init; }
[Description("조회 옵션 (0: 전체, 1: 대기, 2: 완료)")]
public required FindOption Option { get; init; }
[Description("페이지 번호")]
public int PageIndex { get; set; } = 1;
[Description("페이지 크기")]
public int PageSize { get; set; } = 20;
[Description("정렬 기준 => asc: 오름차순, desc: 내림차순")]
public string SortOrder { get; set; } = "asc";
}
[SwaggerSchema("교환 주문 목록 응답")]
public class ExchangeOrderListResponse
{
[Description("교환 주문 목록")]
public required IEnumerable<ExchangeOrder> Orders { get; init; }
}
[SwaggerSchema("교환 주문 요청")]
public class ExchangeOrderRequest
{
[Description("사용자 GUID")]
public required string UserGuid { get; set; }
[Description("차감을 요청할 사파이어 수량")]
public long Sapphire { get; set; }
[Description("요청할 에메랄드 수량")]
public long Emerald { get; set; }
}
[SwaggerSchema("교환 주문 응답")]
public class ExchangeOrderResponse
{
[Description("주문 ID")]
public required string OrderId { get; init; }
[Description("차감 사파이어 수량")]
public long SapphireAmount { get; init; }
[Description("에메랄드 수량")]
public long EmeraldAmount { get; init; }
[Description("현재 사파이어 잔액")]
public long CurrentSapphireBalance { get; init; }
}
[SwaggerSchema("교환 주문 완료 요청")]
public class ExchangeOrderCompleteRequest
{
[Description("주문 ID")]
public required string OrderId { get; set; }
[Description("사용자 GUID")]
public required string UserGuid { get; set; }
}
[SwaggerSchema("교환 주문 완료 응답")]
public class ExchangeOrderCompleteResponse
{
[Description("주문 ID")]
public required string OrderId { get; init; }
[Description("사파이어 수량")]
public long SapphireAmount { get; init; }
[Description("에메랄드 수량")]
public long EmeraldAmount { get; init; }
[Description("현재 주문 상태")]
public ExchangeOrderStatus Status { get; init; }
}