package admin import ( "github.com/gofiber/fiber/v2" "github.com/break/junhong_cmp_fiber/internal/model/dto" iotCardService "github.com/break/junhong_cmp_fiber/internal/service/iot_card" "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" ) type IotCardHandler struct { service *iotCardService.Service } func NewIotCardHandler(service *iotCardService.Service) *IotCardHandler { return &IotCardHandler{ service: service, } } func (h *IotCardHandler) ListStandalone(c *fiber.Ctx) error { var req dto.ListStandaloneIotCardRequest if err := c.QueryParser(&req); err != nil { return errors.New(errors.CodeInvalidParam, "请求参数解析失败") } result, err := h.service.ListStandalone(c.UserContext(), &req) if err != nil { return err } return response.SuccessWithPagination(c, result.List, result.Total, result.Page, result.PageSize) } func (h *IotCardHandler) AllocateCards(c *fiber.Ctx) error { var req dto.AllocateStandaloneCardsRequest if err := c.BodyParser(&req); err != nil { return errors.New(errors.CodeInvalidParam, "请求参数解析失败") } ctx := c.UserContext() operatorID := middleware.GetUserIDFromContext(ctx) userType := middleware.GetUserTypeFromContext(ctx) var operatorShopID *uint if userType == constants.UserTypeAgent { shopID := middleware.GetShopIDFromContext(ctx) if shopID > 0 { operatorShopID = &shopID } } result, err := h.service.AllocateCards(ctx, &req, operatorID, operatorShopID) if err != nil { return err } return response.Success(c, result) } func (h *IotCardHandler) RecallCards(c *fiber.Ctx) error { var req dto.RecallStandaloneCardsRequest if err := c.BodyParser(&req); err != nil { return errors.New(errors.CodeInvalidParam, "请求参数解析失败") } ctx := c.UserContext() operatorID := middleware.GetUserIDFromContext(ctx) userType := middleware.GetUserTypeFromContext(ctx) var operatorShopID *uint if userType == constants.UserTypeAgent { shopID := middleware.GetShopIDFromContext(ctx) if shopID > 0 { operatorShopID = &shopID } } result, err := h.service.RecallCards(ctx, &req, operatorID, operatorShopID) if err != nil { return err } return response.Success(c, result) } func (h *IotCardHandler) BatchSetSeriesBinding(c *fiber.Ctx) error { var req dto.BatchSetCardSeriesBindngRequest if err := c.BodyParser(&req); err != nil { return errors.New(errors.CodeInvalidParam, "请求参数解析失败") } ctx := c.UserContext() userType := middleware.GetUserTypeFromContext(ctx) var operatorShopID *uint if userType == constants.UserTypeAgent { shopID := middleware.GetShopIDFromContext(ctx) if shopID > 0 { operatorShopID = &shopID } } result, err := h.service.BatchSetSeriesBinding(ctx, &req, operatorShopID) if err != nil { return err } return response.Success(c, result) } // GetRealnameLink 获取实名认证链接 func (h *IotCardHandler) GetRealnameLink(c *fiber.Ctx) error { iccid := c.Params("iccid") if iccid == "" { return errors.New(errors.CodeInvalidParam, "ICCID不能为空") } link, err := h.service.GatewayGetRealnameLink(c.UserContext(), iccid) if err != nil { return err } return response.Success(c, link) }