app-cloudep-trade-service/internal/domain/usecase/order.go

166 lines
8.2 KiB
Go

package usecase
import (
"app-cloudep-trade-service/internal/domain"
"context"
"github.com/shopspring/decimal"
)
type OrderUseCase interface {
// CreateOrder 建立訂單,不另外做 struct 直接用 model.Order
// 考量底層已經寫完,如有額外需求需要在這邊用轉的
CreateOrder(ctx context.Context, param CreateOrderReq) error
// CancelOrder 取消訂單
CancelOrder(ctx context.Context, param CancelOrderQuery) error
// DeleteOrder 刪除訂單(軟刪除)
DeleteOrder(ctx context.Context, param DeleteOrderQuery) error
// GetOrder 取得訂單資料
GetOrder(ctx context.Context, param GetOrderQuery) (*GetOrderResp, error)
// ListOrder 取得資料列表
ListOrder(ctx context.Context, param GetOrderListReq) (*ListOrderResp, error)
// ModifyOrderStatus 更新資料
ModifyOrderStatus(ctx context.Context, param *ModifyOrderQuery) error
// OrderStatusTimeout 訂單超時任務/cron/order-status/timeout
OrderStatusTimeout(ctx context.Context) error
}
// ModifyOrderQuery
// 0.建立訂單 1.建單失敗 2.審核中 3.付款中 4.已付款
// 5.已付款待轉帳 6.申訴中 7.交易完成
// 8.交易失敗 9.交易取消 10.交易異常 11.交易超時
type ModifyOrderQuery struct {
BusinessID string `json:"business_id" validate:"required"`
Status int64 `json:"status" validate:"required,oneof=2 3 4 5 6 7 8 11"`
}
// CancelOrderQuery 1.建單失敗 9.交易取消 10.交易異常
type CancelOrderQuery struct {
BusinessID string
Status domain.OrderStatus
}
// DeleteOrderQuery 刪除訂單(軟刪除)
type DeleteOrderQuery struct {
BusinessID string
}
// GetOrderQuery 取得訂單
type GetOrderQuery struct {
BusinessID string
}
type GetOrderResp struct {
BusinessID string // 訂單業務流水號
OrderType domain.OrderType `json:"order_type"` // 訂單類型
OrderStatus domain.OrderStatus `json:"order_status"` // 訂單狀態
Brand string `json:"brand"` // 下單平台
OrderUID string `json:"order_uid"` // 下單用戶 UID
ReferenceID string `json:"reference_id"` // 訂單來源
Count string `json:"count"` // 訂單數量 (decimal to string)
OrderFee string `json:"order_fee"` // 訂單手續費 (decimal to string)
Amount string `json:"amount"` // 單價 (decimal to string)
ReferenceBrand *string `json:"reference_brand,omitempty"` // 訂單來源平台
ReferenceUID *string `json:"reference_uid,omitempty"` // 訂單來源用戶 UID
WalletStatus *int64 `json:"wallet_status,omitempty"` // 交易金額狀態
ThreePartyStatus *int64 `json:"three_party_status,omitempty"` // 三方請求狀態
DirectionType *int64 `json:"direction_type,omitempty"` // 交易方向
CryptoType *string `json:"crypto_type,omitempty"` // 交易幣種
ThirdPartyFee *string `json:"third_party_fee,omitempty"` // 第三方手續費 (decimal to string)
CryptoToUsdtRate *string `json:"crypto_to_usdt_rate,omitempty"` // 交易幣種對 USDT 匯率 (decimal to string)
FiatToUsdRate *string `json:"fiat_to_usd_rate,omitempty"` // 法幣對 USD 匯率 (decimal to string)
FeeCryptoToUsdtRate *string `json:"fee_crypto_to_usdt_rate,omitempty"` // 手續費幣種對 USDT 匯率 (decimal to string)
UsdtToCryptoTypeRate *string `json:"usdt_to_crypto_type_rate,omitempty"` // USDT 對交易幣種匯率 (decimal to string)
PaymentFiat *string `json:"payment_fiat,omitempty"` // 支付法幣
PaymentUnitPrice *string `json:"payment_unit_price,omitempty"` // crypto 單價 (decimal to string)
PaymentTemplateID *string `json:"payment_template_id,omitempty"` // 支付方式配置 ID
OrderArrivalTime *int64 `json:"order_arrival_time,omitempty"` // 訂單到帳時間
OrderPaymentTime *int64 `json:"order_payment_time,omitempty"` // 訂單付款時間
UnpaidTimeoutSecond *int64 `json:"unpaid_timeout_second,omitempty"` // 支付期限秒數
ChainType *string `json:"chain_type,omitempty"` // 主網類型
TxHash *string `json:"tx_hash,omitempty,omitempty"` // 交易哈希
FromAddress *string `json:"from_address,omitempty,omitempty"` // 來源地址
ToAddress *string `json:"to_address,omitempty,omitempty"` // 目標地址
ChainFee *string `json:"chain_fee,omitempty"` // 鏈上交易手續費 (decimal to string)
ChainFeeCrypto *string `json:"chain_fee_crypto,omitempty"` // 鏈上手續費使用幣別
Memo *string `json:"memo,omitempty"` // 鏈上備註
OrderNote *string `json:"order_note,omitempty"` // 訂單交易備註
CreateTime int64 `json:"create_time,omitempty"` // 建立時間
UpdateTime int64 `json:"update_time,omitempty"` // 更新時間
}
type GetOrderListReq struct {
PageIndex int64
PageSize int64
ReferenceID string
ReferenceUID string
BusinessID string
UID string
OrderType domain.OrderType
DirectionType []int64
OrderStatus []int64
StartCreateTime int64
EndCreateTime int64
StartUpdateTime int64
EndUpdateTime int64
StartOrderArrivalTime int64
EndOrderArrivalTime int64
StartOrderPaymentTime int64
EndOrderPaymentTime int64
CryptoType string
TxHash string
}
type Pager struct {
Index int64
Size int64
Total int64
}
type ListOrderResp struct {
Data []*GetOrderResp `json:"data"` // 訂單列表
Page *Pager `json:"page"`
}
type CreateOrderReq struct {
BusinessID string
OrderType domain.OrderType // 訂單類型
OrderStatus domain.OrderStatus // 訂單狀態
Brand string // 下單平台
OrderUID string // 下單用戶 UID
ReferenceID string // 訂單來源
Count decimal.Decimal // 訂單數量
OrderFee decimal.Decimal // 訂單手續費
Amount decimal.Decimal // 單價
WalletStatus int64 // 交易金額狀態
DirectionType int64 // 交易方向
// 以上為必要欄位,下面是區塊鏈時才需要
ReferenceBrand *string // 訂單來源平台
ReferenceUID *string // 訂單來源用戶 UID
ThreePartyStatus *int64 // 三方請求狀態
CryptoType *string // 交易幣種
ThirdPartyFee *decimal.Decimal // 第三方手續費
CryptoToUSDTRate *decimal.Decimal // 加密貨幣對 USDT 匯率
FiatToUSDRate *decimal.Decimal // 法幣對 USD 匯率
FeeCryptoToUSDTRate *decimal.Decimal // 手續費加密貨幣對 USDT 匯率
USDTToCryptoTypeRate *decimal.Decimal // USDT 對加密貨幣匯率
PaymentFiat *string // 支付法幣
PaymentUnitPrice *decimal.Decimal // 加密貨幣單價
PaymentTemplateID *string // 支付方式配置 ID
OrderArrivalTime *int64 // 訂單到帳時間
OrderPaymentTime *int64 // 訂單付款時間
UnpaidTimeoutSecond *int64 // 支付期限秒數
ChainType *string // 主網類型
TxHash *string // 交易哈希
FromAddress *string // 來源地址
ToAddress *string // 目標地址
ChainFee *decimal.Decimal // 鏈上交易手續費
ChainFeeCrypto *string // 鏈上手續費使用幣別
Memo *string // 鏈上備註
OrderNote *string // 訂單交易備註
}