refactor: organize service dto contracts

This commit is contained in:
Yvan
2026-08-21 14:00:19 +08:00
parent e81a641953
commit d91f0554fd
65 changed files with 865 additions and 696 deletions
+20 -19
View File
@@ -5,17 +5,18 @@ import (
"errors"
"kra/internal/biz"
"kra/internal/service/dto"
)
type PaymentService struct{ uc *biz.PaymentUsecase }
func NewPaymentService(uc *biz.PaymentUsecase) *PaymentService { return &PaymentService{uc: uc} }
func (s *PaymentService) Order(ctx context.Context, provider, tradeNo string) (*PaymentOrderResponse, error) {
func (s *PaymentService) Order(ctx context.Context, provider, tradeNo string) (*dto.PaymentOrderResponse, error) {
order, err := s.uc.Order(ctx, provider, tradeNo)
if err != nil {
return nil, err
}
return &PaymentOrderResponse{
return &dto.PaymentOrderResponse{
ID: order.ID,
Provider: order.Provider, TradeNo: order.TradeNo, ProviderTradeNo: order.ProviderTradeNo,
BusinessType: order.BusinessType, BusinessID: order.BusinessID, Subject: order.Subject,
@@ -32,7 +33,7 @@ func (s *PaymentService) Order(ctx context.Context, provider, tradeNo string) (*
}, nil
}
func (s *PaymentService) Orders(ctx context.Context, req *PaymentOrderListRequest) ([]*PaymentOrderResponse, int64, int, int, error) {
func (s *PaymentService) Orders(ctx context.Context, req *dto.PaymentOrderListRequest) ([]*dto.PaymentOrderResponse, int64, int, int, error) {
if req == nil {
return nil, 0, 1, 10, errors.New("支付订单列表请求为空")
}
@@ -50,7 +51,7 @@ func (s *PaymentService) Orders(ctx context.Context, req *PaymentOrderListReques
if err != nil {
return nil, 0, page, pageSize, err
}
result := make([]*PaymentOrderResponse, 0, len(items))
result := make([]*dto.PaymentOrderResponse, 0, len(items))
for _, item := range items {
converted, convertErr := paymentOrderResponse(item)
if convertErr != nil {
@@ -61,11 +62,11 @@ func (s *PaymentService) Orders(ctx context.Context, req *PaymentOrderListReques
return result, total, page, pageSize, nil
}
func paymentOrderResponse(order *biz.PaymentOrder) (*PaymentOrderResponse, error) {
func paymentOrderResponse(order *biz.PaymentOrder) (*dto.PaymentOrderResponse, error) {
if order == nil {
return nil, errors.New("支付订单为空")
}
return &PaymentOrderResponse{
return &dto.PaymentOrderResponse{
ID: order.ID, Provider: order.Provider, TradeNo: order.TradeNo, ProviderTradeNo: order.ProviderTradeNo,
BusinessType: order.BusinessType, BusinessID: order.BusinessID, Subject: order.Subject,
PaymentMode: order.PaymentMode, OriginalAmount: order.OriginalAmount, Amount: order.Amount, PaidAmount: order.PaidAmount,
@@ -79,7 +80,7 @@ func paymentOrderResponse(order *biz.PaymentOrder) (*PaymentOrderResponse, error
PaidAt: order.PaidAt, FulfilledAt: order.FulfilledAt, RefundedAt: order.RefundedAt,
}, nil
}
func (s *PaymentService) Create(ctx context.Context, req *PaymentRequest) (*PaymentResultResponse, error) {
func (s *PaymentService) Create(ctx context.Context, req *dto.PaymentRequest) (*dto.PaymentResultResponse, error) {
if req == nil {
return nil, errors.New("支付请求为空")
}
@@ -92,14 +93,14 @@ func (s *PaymentService) Create(ctx context.Context, req *PaymentRequest) (*Paym
})
return paymentResultResponse(result), err
}
func (s *PaymentService) Query(ctx context.Context, req *PaymentQueryRequest) (*PaymentResultResponse, error) {
func (s *PaymentService) Query(ctx context.Context, req *dto.PaymentQueryRequest) (*dto.PaymentResultResponse, error) {
if req == nil {
return nil, errors.New("支付查询请求为空")
}
result, err := s.uc.Query(ctx, req.Provider, req.TradeNo)
return paymentResultResponse(result), err
}
func (s *PaymentService) Refund(ctx context.Context, req *PaymentRefundRequest) (*PaymentResultResponse, error) {
func (s *PaymentService) Refund(ctx context.Context, req *dto.PaymentRefundRequest) (*dto.PaymentResultResponse, error) {
if req == nil {
return nil, errors.New("支付退款请求为空")
}
@@ -107,27 +108,27 @@ func (s *PaymentService) Refund(ctx context.Context, req *PaymentRefundRequest)
return paymentResultResponse(result), err
}
func (s *PaymentService) TestProvider(ctx context.Context, provider string) (*PaymentTestResult, error) {
func (s *PaymentService) TestProvider(ctx context.Context, provider string) (*dto.PaymentTestResult, error) {
result, err := s.uc.TestProvider(ctx, provider)
if result == nil {
return nil, err
}
response := &PaymentTestResult{Provider: result.Provider, TradeNo: result.TradeNo, Passed: result.Passed, FullFlow: result.FullFlow, Mode: result.Mode, Stages: make([]*PaymentTestStage, 0, len(result.Stages))}
response := &dto.PaymentTestResult{Provider: result.Provider, TradeNo: result.TradeNo, Passed: result.Passed, FullFlow: result.FullFlow, Mode: result.Mode, Stages: make([]*dto.PaymentTestStage, 0, len(result.Stages))}
for _, stage := range result.Stages {
response.Stages = append(response.Stages, &PaymentTestStage{Name: stage.Name, Status: stage.Status, Message: stage.Message, TradeNo: stage.TradeNo, Duration: stage.Duration})
response.Stages = append(response.Stages, &dto.PaymentTestStage{Name: stage.Name, Status: stage.Status, Message: stage.Message, TradeNo: stage.TradeNo, Duration: stage.Duration})
}
response.Result = paymentResultResponse(result.Result)
return response, err
}
func (s *PaymentService) Fulfill(ctx context.Context, req *PaymentFulfillRequest) (*PaymentResultResponse, error) {
func (s *PaymentService) Fulfill(ctx context.Context, req *dto.PaymentFulfillRequest) (*dto.PaymentResultResponse, error) {
if req == nil {
return nil, errors.New("支付发货请求为空")
}
result, err := s.uc.Fulfill(ctx, req.Provider, req.TradeNo)
return paymentResultResponse(result), err
}
func (s *PaymentService) Callback(ctx context.Context, req *PaymentCallbackRequest) (PaymentCallbackAck, error) {
func (s *PaymentService) Callback(ctx context.Context, req *dto.PaymentCallbackRequest) (dto.PaymentCallbackAck, error) {
if req == nil {
return paymentCallbackAckResponse(biz.DefaultPaymentCallbackAck("", false)), errors.New("支付回调请求为空")
}
@@ -142,15 +143,15 @@ func (s *PaymentService) Callback(ctx context.Context, req *PaymentCallbackReque
return paymentCallbackAckResponse(ack), nil
}
func DefaultPaymentCallbackAck(provider string, success bool) PaymentCallbackAck {
func DefaultPaymentCallbackAck(provider string, success bool) dto.PaymentCallbackAck {
return paymentCallbackAckResponse(biz.DefaultPaymentCallbackAck(provider, success))
}
func paymentResultResponse(result *biz.PaymentResult) *PaymentResultResponse {
func paymentResultResponse(result *biz.PaymentResult) *dto.PaymentResultResponse {
if result == nil {
return nil
}
return &PaymentResultResponse{
return &dto.PaymentResultResponse{
Provider: result.Provider, Status: result.Status, TradeNo: result.TradeNo,
ProviderTradeNo: result.ProviderTradeNo, Amount: result.Amount,
PayerPaidAmount: result.PayerPaidAmount, CashPaidAmount: result.CashPaidAmount,
@@ -164,6 +165,6 @@ func paymentResultResponse(result *biz.PaymentResult) *PaymentResultResponse {
}
}
func paymentCallbackAckResponse(ack biz.PaymentCallbackAck) PaymentCallbackAck {
return PaymentCallbackAck{StatusCode: ack.StatusCode, ContentType: ack.ContentType, Body: ack.Body}
func paymentCallbackAckResponse(ack biz.PaymentCallbackAck) dto.PaymentCallbackAck {
return dto.PaymentCallbackAck{StatusCode: ack.StatusCode, ContentType: ack.ContentType, Body: ack.Body}
}