Files
junhong_cmp_fiber/internal/handler/admin/asset_wallet.go

89 lines
2.6 KiB
Go

package admin
import (
"strconv"
"github.com/gofiber/fiber/v2"
"github.com/break/junhong_cmp_fiber/internal/model/dto"
assetWalletSvc "github.com/break/junhong_cmp_fiber/internal/service/asset_wallet"
"github.com/break/junhong_cmp_fiber/pkg/constants"
"github.com/break/junhong_cmp_fiber/pkg/errors"
"github.com/break/junhong_cmp_fiber/pkg/middleware"
"github.com/break/junhong_cmp_fiber/pkg/response"
)
// AssetWalletHandler 资产钱包处理器
// 提供管理端资产(卡/设备)钱包概况和流水查询接口
type AssetWalletHandler struct {
service *assetWalletSvc.Service
}
// NewAssetWalletHandler 创建资产钱包处理器
func NewAssetWalletHandler(svc *assetWalletSvc.Service) *AssetWalletHandler {
return &AssetWalletHandler{service: svc}
}
// GetWallet 查询资产钱包概况
// GET /api/admin/assets/:asset_type/:id/wallet
func (h *AssetWalletHandler) GetWallet(c *fiber.Ctx) error {
userType := middleware.GetUserTypeFromContext(c.UserContext())
if userType == constants.UserTypeEnterprise {
return errors.New(errors.CodeForbidden, "企业账号无权查看钱包信息")
}
assetType := c.Params("asset_type")
if assetType != "card" && assetType != "device" {
return errors.New(errors.CodeInvalidParam, "无效的资产类型")
}
idStr := c.Params("id")
id, err := strconv.ParseUint(idStr, 10, 64)
if err != nil || id == 0 {
return errors.New(errors.CodeInvalidParam, "无效的资产ID")
}
result, err := h.service.GetWallet(c.UserContext(), assetType, uint(id))
if err != nil {
return err
}
return response.Success(c, result)
}
// ListTransactions 查询资产钱包流水列表
// GET /api/admin/assets/:asset_type/:id/wallet/transactions
func (h *AssetWalletHandler) ListTransactions(c *fiber.Ctx) error {
userType := middleware.GetUserTypeFromContext(c.UserContext())
if userType == constants.UserTypeEnterprise {
return errors.New(errors.CodeForbidden, "企业账号无权查看钱包信息")
}
assetType := c.Params("asset_type")
if assetType != "card" && assetType != "device" {
return errors.New(errors.CodeInvalidParam, "无效的资产类型")
}
idStr := c.Params("id")
id, err := strconv.ParseUint(idStr, 10, 64)
if err != nil || id == 0 {
return errors.New(errors.CodeInvalidParam, "无效的资产ID")
}
var req dto.AssetWalletTransactionListRequest
if err := c.QueryParser(&req); err != nil {
return errors.New(errors.CodeInvalidParam)
}
if req.PageSize > 100 {
return errors.New(errors.CodeInvalidParam, "每页数量不能超过100")
}
result, err := h.service.ListTransactions(c.UserContext(), assetType, uint(id), &req)
if err != nil {
return err
}
return response.Success(c, result)
}