temp
This commit is contained in:
		
							
								
								
									
										336
									
								
								internal/domains/finance/handlers/finance_handler.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										336
									
								
								internal/domains/finance/handlers/finance_handler.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,336 @@ | ||||
| package handlers | ||||
|  | ||||
| import ( | ||||
| 	"github.com/gin-gonic/gin" | ||||
| 	"go.uber.org/zap" | ||||
|  | ||||
| 	"tyapi-server/internal/domains/finance/dto" | ||||
| 	"tyapi-server/internal/domains/finance/services" | ||||
| 	"tyapi-server/internal/shared/interfaces" | ||||
| ) | ||||
|  | ||||
| // FinanceHandler 财务HTTP处理器 | ||||
| type FinanceHandler struct { | ||||
| 	financeService  *services.FinanceService | ||||
| 	responseBuilder interfaces.ResponseBuilder | ||||
| 	logger          *zap.Logger | ||||
| } | ||||
|  | ||||
| // NewFinanceHandler 创建财务HTTP处理器 | ||||
| func NewFinanceHandler( | ||||
| 	financeService *services.FinanceService, | ||||
| 	responseBuilder interfaces.ResponseBuilder, | ||||
| 	logger *zap.Logger, | ||||
| ) *FinanceHandler { | ||||
| 	return &FinanceHandler{ | ||||
| 		financeService:  financeService, | ||||
| 		responseBuilder: responseBuilder, | ||||
| 		logger:          logger, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // CreateWallet 创建钱包 | ||||
| // @Summary 创建钱包 | ||||
| // @Description 为用户创建钱包 | ||||
| // @Tags 财务系统 | ||||
| // @Accept json | ||||
| // @Produce json | ||||
| // @Param request body dto.CreateWalletRequest true "创建钱包请求" | ||||
| // @Success 201 {object} dto.CreateWalletResponse | ||||
| // @Failure 400 {object} interfaces.ErrorResponse | ||||
| // @Router /finance/wallet [post] | ||||
| func (h *FinanceHandler) CreateWallet(c *gin.Context) { | ||||
| 	var req dto.CreateWalletRequest | ||||
| 	if err := c.ShouldBindJSON(&req); err != nil { | ||||
| 		h.logger.Warn("创建钱包参数验证失败", zap.Error(err)) | ||||
| 		h.responseBuilder.BadRequest(c, "请求参数错误") | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	response, err := h.financeService.CreateWallet(c.Request.Context(), &req) | ||||
| 	if err != nil { | ||||
| 		h.logger.Error("创建钱包失败", zap.Error(err)) | ||||
| 		h.responseBuilder.BadRequest(c, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	h.responseBuilder.Created(c, response, "钱包创建成功") | ||||
| } | ||||
|  | ||||
| // GetWallet 获取钱包信息 | ||||
| // @Summary 获取钱包信息 | ||||
| // @Description 获取用户钱包信息 | ||||
| // @Tags 财务系统 | ||||
| // @Accept json | ||||
| // @Produce json | ||||
| // @Param user_id query string true "用户ID" | ||||
| // @Success 200 {object} dto.WalletInfo | ||||
| // @Failure 400 {object} interfaces.ErrorResponse | ||||
| // @Failure 404 {object} interfaces.ErrorResponse | ||||
| // @Router /finance/wallet [get] | ||||
| func (h *FinanceHandler) GetWallet(c *gin.Context) { | ||||
| 	userID := c.Query("user_id") | ||||
| 	if userID == "" { | ||||
| 		h.responseBuilder.BadRequest(c, "用户ID不能为空") | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	wallet, err := h.financeService.GetWallet(c.Request.Context(), userID) | ||||
| 	if err != nil { | ||||
| 		h.logger.Error("获取钱包信息失败", zap.Error(err)) | ||||
| 		h.responseBuilder.NotFound(c, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	h.responseBuilder.Success(c, wallet, "获取钱包信息成功") | ||||
| } | ||||
|  | ||||
| // UpdateWallet 更新钱包 | ||||
| // @Summary 更新钱包 | ||||
| // @Description 更新用户钱包信息 | ||||
| // @Tags 财务系统 | ||||
| // @Accept json | ||||
| // @Produce json | ||||
| // @Param request body dto.UpdateWalletRequest true "更新钱包请求" | ||||
| // @Success 200 {object} interfaces.SuccessResponse | ||||
| // @Failure 400 {object} interfaces.ErrorResponse | ||||
| // @Failure 404 {object} interfaces.ErrorResponse | ||||
| // @Router /finance/wallet [put] | ||||
| func (h *FinanceHandler) UpdateWallet(c *gin.Context) { | ||||
| 	var req dto.UpdateWalletRequest | ||||
| 	if err := c.ShouldBindJSON(&req); err != nil { | ||||
| 		h.logger.Warn("更新钱包参数验证失败", zap.Error(err)) | ||||
| 		h.responseBuilder.BadRequest(c, "请求参数错误") | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	err := h.financeService.UpdateWallet(c.Request.Context(), &req) | ||||
| 	if err != nil { | ||||
| 		h.logger.Error("更新钱包失败", zap.Error(err)) | ||||
| 		h.responseBuilder.BadRequest(c, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	h.responseBuilder.Success(c, nil, "钱包更新成功") | ||||
| } | ||||
|  | ||||
| // Recharge 充值 | ||||
| // @Summary 钱包充值 | ||||
| // @Description 为用户钱包充值 | ||||
| // @Tags 财务系统 | ||||
| // @Accept json | ||||
| // @Produce json | ||||
| // @Param request body dto.RechargeRequest true "充值请求" | ||||
| // @Success 200 {object} dto.RechargeResponse | ||||
| // @Failure 400 {object} interfaces.ErrorResponse | ||||
| // @Failure 404 {object} interfaces.ErrorResponse | ||||
| // @Router /finance/wallet/recharge [post] | ||||
| func (h *FinanceHandler) Recharge(c *gin.Context) { | ||||
| 	var req dto.RechargeRequest | ||||
| 	if err := c.ShouldBindJSON(&req); err != nil { | ||||
| 		h.logger.Warn("充值参数验证失败", zap.Error(err)) | ||||
| 		h.responseBuilder.BadRequest(c, "请求参数错误") | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	response, err := h.financeService.Recharge(c.Request.Context(), &req) | ||||
| 	if err != nil { | ||||
| 		h.logger.Error("充值失败", zap.Error(err)) | ||||
| 		h.responseBuilder.BadRequest(c, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	h.responseBuilder.Success(c, response, "充值成功") | ||||
| } | ||||
|  | ||||
| // Withdraw 提现 | ||||
| // @Summary 钱包提现 | ||||
| // @Description 从用户钱包提现 | ||||
| // @Tags 财务系统 | ||||
| // @Accept json | ||||
| // @Produce json | ||||
| // @Param request body dto.WithdrawRequest true "提现请求" | ||||
| // @Success 200 {object} dto.WithdrawResponse | ||||
| // @Failure 400 {object} interfaces.ErrorResponse | ||||
| // @Failure 404 {object} interfaces.ErrorResponse | ||||
| // @Router /finance/wallet/withdraw [post] | ||||
| func (h *FinanceHandler) Withdraw(c *gin.Context) { | ||||
| 	var req dto.WithdrawRequest | ||||
| 	if err := c.ShouldBindJSON(&req); err != nil { | ||||
| 		h.logger.Warn("提现参数验证失败", zap.Error(err)) | ||||
| 		h.responseBuilder.BadRequest(c, "请求参数错误") | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	response, err := h.financeService.Withdraw(c.Request.Context(), &req) | ||||
| 	if err != nil { | ||||
| 		h.logger.Error("提现失败", zap.Error(err)) | ||||
| 		h.responseBuilder.BadRequest(c, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	h.responseBuilder.Success(c, response, "提现成功") | ||||
| } | ||||
|  | ||||
| // CreateUserSecrets 创建用户密钥 | ||||
| // @Summary 创建用户密钥 | ||||
| // @Description 为用户创建访问密钥 | ||||
| // @Tags 财务系统 | ||||
| // @Accept json | ||||
| // @Produce json | ||||
| // @Param request body dto.CreateUserSecretsRequest true "创建密钥请求" | ||||
| // @Success 201 {object} dto.CreateUserSecretsResponse | ||||
| // @Failure 400 {object} interfaces.ErrorResponse | ||||
| // @Router /finance/secrets [post] | ||||
| func (h *FinanceHandler) CreateUserSecrets(c *gin.Context) { | ||||
| 	var req dto.CreateUserSecretsRequest | ||||
| 	if err := c.ShouldBindJSON(&req); err != nil { | ||||
| 		h.logger.Warn("创建密钥参数验证失败", zap.Error(err)) | ||||
| 		h.responseBuilder.BadRequest(c, "请求参数错误") | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	response, err := h.financeService.CreateUserSecrets(c.Request.Context(), &req) | ||||
| 	if err != nil { | ||||
| 		h.logger.Error("创建密钥失败", zap.Error(err)) | ||||
| 		h.responseBuilder.BadRequest(c, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	h.responseBuilder.Created(c, response, "密钥创建成功") | ||||
| } | ||||
|  | ||||
| // GetUserSecrets 获取用户密钥 | ||||
| // @Summary 获取用户密钥 | ||||
| // @Description 获取用户访问密钥信息 | ||||
| // @Tags 财务系统 | ||||
| // @Accept json | ||||
| // @Produce json | ||||
| // @Param user_id query string true "用户ID" | ||||
| // @Success 200 {object} dto.UserSecretsInfo | ||||
| // @Failure 400 {object} interfaces.ErrorResponse | ||||
| // @Failure 404 {object} interfaces.ErrorResponse | ||||
| // @Router /finance/secrets [get] | ||||
| func (h *FinanceHandler) GetUserSecrets(c *gin.Context) { | ||||
| 	userID := c.Query("user_id") | ||||
| 	if userID == "" { | ||||
| 		h.responseBuilder.BadRequest(c, "用户ID不能为空") | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	secrets, err := h.financeService.GetUserSecrets(c.Request.Context(), userID) | ||||
| 	if err != nil { | ||||
| 		h.logger.Error("获取密钥失败", zap.Error(err)) | ||||
| 		h.responseBuilder.NotFound(c, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	h.responseBuilder.Success(c, secrets, "获取密钥成功") | ||||
| } | ||||
|  | ||||
| // RegenerateAccessKey 重新生成访问密钥 | ||||
| // @Summary 重新生成访问密钥 | ||||
| // @Description 重新生成用户的访问密钥 | ||||
| // @Tags 财务系统 | ||||
| // @Accept json | ||||
| // @Produce json | ||||
| // @Param request body dto.RegenerateAccessKeyRequest true "重新生成密钥请求" | ||||
| // @Success 200 {object} dto.RegenerateAccessKeyResponse | ||||
| // @Failure 400 {object} interfaces.ErrorResponse | ||||
| // @Failure 404 {object} interfaces.ErrorResponse | ||||
| // @Router /finance/secrets/regenerate [post] | ||||
| func (h *FinanceHandler) RegenerateAccessKey(c *gin.Context) { | ||||
| 	var req dto.RegenerateAccessKeyRequest | ||||
| 	if err := c.ShouldBindJSON(&req); err != nil { | ||||
| 		h.logger.Warn("重新生成密钥参数验证失败", zap.Error(err)) | ||||
| 		h.responseBuilder.BadRequest(c, "请求参数错误") | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	response, err := h.financeService.RegenerateAccessKey(c.Request.Context(), &req) | ||||
| 	if err != nil { | ||||
| 		h.logger.Error("重新生成密钥失败", zap.Error(err)) | ||||
| 		h.responseBuilder.BadRequest(c, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	h.responseBuilder.Success(c, response, "密钥重新生成成功") | ||||
| } | ||||
|  | ||||
| // DeactivateUserSecrets 停用用户密钥 | ||||
| // @Summary 停用用户密钥 | ||||
| // @Description 停用用户的访问密钥 | ||||
| // @Tags 财务系统 | ||||
| // @Accept json | ||||
| // @Produce json | ||||
| // @Param request body dto.DeactivateUserSecretsRequest true "停用密钥请求" | ||||
| // @Success 200 {object} interfaces.SuccessResponse | ||||
| // @Failure 400 {object} interfaces.ErrorResponse | ||||
| // @Failure 404 {object} interfaces.ErrorResponse | ||||
| // @Router /finance/secrets/deactivate [post] | ||||
| func (h *FinanceHandler) DeactivateUserSecrets(c *gin.Context) { | ||||
| 	var req dto.DeactivateUserSecretsRequest | ||||
| 	if err := c.ShouldBindJSON(&req); err != nil { | ||||
| 		h.logger.Warn("停用密钥参数验证失败", zap.Error(err)) | ||||
| 		h.responseBuilder.BadRequest(c, "请求参数错误") | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	err := h.financeService.DeactivateUserSecrets(c.Request.Context(), &req) | ||||
| 	if err != nil { | ||||
| 		h.logger.Error("停用密钥失败", zap.Error(err)) | ||||
| 		h.responseBuilder.BadRequest(c, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	h.responseBuilder.Success(c, nil, "密钥停用成功") | ||||
| } | ||||
|  | ||||
| // WalletTransaction 钱包交易 | ||||
| // @Summary 钱包交易 | ||||
| // @Description 用户间钱包转账 | ||||
| // @Tags 财务系统 | ||||
| // @Accept json | ||||
| // @Produce json | ||||
| // @Param request body dto.WalletTransactionRequest true "交易请求" | ||||
| // @Success 200 {object} dto.WalletTransactionResponse | ||||
| // @Failure 400 {object} interfaces.ErrorResponse | ||||
| // @Failure 404 {object} interfaces.ErrorResponse | ||||
| // @Router /finance/wallet/transaction [post] | ||||
| func (h *FinanceHandler) WalletTransaction(c *gin.Context) { | ||||
| 	var req dto.WalletTransactionRequest | ||||
| 	if err := c.ShouldBindJSON(&req); err != nil { | ||||
| 		h.logger.Warn("交易参数验证失败", zap.Error(err)) | ||||
| 		h.responseBuilder.BadRequest(c, "请求参数错误") | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	response, err := h.financeService.WalletTransaction(c.Request.Context(), &req) | ||||
| 	if err != nil { | ||||
| 		h.logger.Error("交易失败", zap.Error(err)) | ||||
| 		h.responseBuilder.BadRequest(c, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	h.responseBuilder.Success(c, response, "交易成功") | ||||
| } | ||||
|  | ||||
| // GetWalletStats 获取钱包统计 | ||||
| // @Summary 获取钱包统计 | ||||
| // @Description 获取钱包系统统计信息 | ||||
| // @Tags 财务系统 | ||||
| // @Accept json | ||||
| // @Produce json | ||||
| // @Success 200 {object} dto.WalletStatsResponse | ||||
| // @Failure 400 {object} interfaces.ErrorResponse | ||||
| // @Router /finance/wallet/stats [get] | ||||
| func (h *FinanceHandler) GetWalletStats(c *gin.Context) { | ||||
| 	stats, err := h.financeService.GetWalletStats(c.Request.Context()) | ||||
| 	if err != nil { | ||||
| 		h.logger.Error("获取钱包统计失败", zap.Error(err)) | ||||
| 		h.responseBuilder.InternalError(c, "获取统计信息失败") | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	h.responseBuilder.Success(c, stats, "获取统计信息成功") | ||||
| } | ||||
		Reference in New Issue
	
	Block a user