129 lines
4.0 KiB
Go
129 lines
4.0 KiB
Go
package admin
|
|
|
|
import (
|
|
"github.com/go-playground/validator/v10"
|
|
"github.com/gofiber/fiber/v2"
|
|
|
|
"github.com/break/junhong_cmp_fiber/internal/application/realnamereset"
|
|
"github.com/break/junhong_cmp_fiber/internal/model/dto"
|
|
"github.com/break/junhong_cmp_fiber/internal/query/cardrealname"
|
|
"github.com/break/junhong_cmp_fiber/pkg/errors"
|
|
"github.com/break/junhong_cmp_fiber/pkg/response"
|
|
)
|
|
|
|
// CardRealnameHandler 处理卡实名记录与二次实名批次。
|
|
type CardRealnameHandler struct {
|
|
reset *realnamereset.Service
|
|
query *cardrealname.Query
|
|
validator *validator.Validate
|
|
}
|
|
|
|
// NewCardRealnameHandler 创建卡实名记录处理器。
|
|
func NewCardRealnameHandler(reset *realnamereset.Service, query *cardrealname.Query, validate *validator.Validate) *CardRealnameHandler {
|
|
if validate == nil {
|
|
validate = validator.New()
|
|
}
|
|
return &CardRealnameHandler{reset: reset, query: query, validator: validate}
|
|
}
|
|
|
|
func (h *CardRealnameHandler) validate(prefix string, req any) error {
|
|
if err := h.validator.Struct(req); err != nil {
|
|
return errors.New(errors.CodeInvalidParam, validationMessage(prefix, req, err))
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// CardHistory 查询单卡当前实名时间与实名时间历史。
|
|
// GET /api/admin/iot-cards/:id/realname-history
|
|
func (h *CardRealnameHandler) CardHistory(c *fiber.Ctx) error {
|
|
var req dto.CardRealnameHistoryListRequest
|
|
if err := c.QueryParser(&req); err != nil {
|
|
return errors.New(errors.CodeInvalidParam, "请求参数解析失败")
|
|
}
|
|
id, err := rateLimitPathID(c, "id", "IoT 卡 ID")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
req.ID = id
|
|
if err := h.validate("实名记录查询参数不合法", &req); err != nil {
|
|
return err
|
|
}
|
|
result, err := h.query.CardHistory(c.UserContext(), req)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return response.Success(c, result)
|
|
}
|
|
|
|
// ImportResetBatch 导入二次实名名单。
|
|
// POST /api/admin/realname-reset/batches
|
|
func (h *CardRealnameHandler) ImportResetBatch(c *fiber.Ctx) error {
|
|
var req dto.RealnameResetImportRequest
|
|
if err := c.BodyParser(&req); err != nil {
|
|
return errors.New(errors.CodeInvalidParam, "请求参数解析失败")
|
|
}
|
|
if err := h.validate("二次实名导入参数不合法", &req); err != nil {
|
|
return err
|
|
}
|
|
result, err := h.reset.Import(c.UserContext(), req)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return response.Success(c, result)
|
|
}
|
|
|
|
// ListResetBatches 分页查询二次实名批次。
|
|
// GET /api/admin/realname-reset/batches
|
|
func (h *CardRealnameHandler) ListResetBatches(c *fiber.Ctx) error {
|
|
var req dto.RealnameResetBatchListRequest
|
|
if err := c.QueryParser(&req); err != nil {
|
|
return errors.New(errors.CodeInvalidParam, "请求参数解析失败")
|
|
}
|
|
if err := h.validate("二次实名批次查询参数不合法", &req); err != nil {
|
|
return err
|
|
}
|
|
list, total, page, size, err := h.query.ListResetBatches(c.UserContext(), req)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return response.SuccessWithPagination(c, list, total, page, size)
|
|
}
|
|
|
|
// GetResetBatch 查询二次实名批次详情。
|
|
// GET /api/admin/realname-reset/batches/:id
|
|
func (h *CardRealnameHandler) GetResetBatch(c *fiber.Ctx) error {
|
|
id, err := rateLimitPathID(c, "id", "批次 ID")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
result, err := h.query.GetResetBatch(c.UserContext(), id)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return response.Success(c, result)
|
|
}
|
|
|
|
// RevertResetBatch 撤销批次中仍在等待二次实名的卡。
|
|
// POST /api/admin/realname-reset/batches/:id/revert
|
|
func (h *CardRealnameHandler) RevertResetBatch(c *fiber.Ctx) error {
|
|
var req dto.RealnameResetRevertRequest
|
|
if len(c.Body()) > 0 {
|
|
if err := c.BodyParser(&req); err != nil {
|
|
return errors.New(errors.CodeInvalidParam, "请求参数解析失败")
|
|
}
|
|
}
|
|
id, err := rateLimitPathID(c, "id", "批次 ID")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
req.ID = id
|
|
if err := h.validate("二次实名撤销参数不合法", &req); err != nil {
|
|
return err
|
|
}
|
|
result, err := h.reset.Revert(c.UserContext(), req)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return response.Success(c, result)
|
|
}
|