using System.ComponentModel; using Swashbuckle.AspNetCore.Annotations; namespace BrokerCore.ApiModels; using System.Runtime.Serialization; using System.Text.Json.Serialization; using Common; using DbEntity; using ServerCommon; [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 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; } }