Files
junhong_cmp_fiber/internal/handler/admin/carrier.go
huang d104d297ca
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m16s
feat: 实现运营商模块重构,添加冗余字段优化查询性能
主要变更:
- 新增 Carrier CRUD API(创建、列表、详情、更新、删除、状态更新)
- IotCard/IotCardImportTask 添加 carrier_type/carrier_name 冗余字段
- 移除 Carrier 表的 channel_name/channel_code 字段
- 查询时直接使用冗余字段,避免 JOIN Carrier 表
- 添加数据库迁移脚本(000021-000023)
- 添加单元测试和集成测试
- 同步更新 OpenAPI 文档和 specs
2026-01-27 12:18:19 +08:00

113 lines
2.8 KiB
Go

package admin
import (
"strconv"
"github.com/gofiber/fiber/v2"
"github.com/break/junhong_cmp_fiber/internal/model/dto"
carrierService "github.com/break/junhong_cmp_fiber/internal/service/carrier"
"github.com/break/junhong_cmp_fiber/pkg/errors"
"github.com/break/junhong_cmp_fiber/pkg/response"
)
type CarrierHandler struct {
service *carrierService.Service
}
func NewCarrierHandler(service *carrierService.Service) *CarrierHandler {
return &CarrierHandler{service: service}
}
func (h *CarrierHandler) List(c *fiber.Ctx) error {
var req dto.CarrierListRequest
if err := c.QueryParser(&req); err != nil {
return errors.New(errors.CodeInvalidParam, "请求参数解析失败")
}
carriers, total, err := h.service.List(c.UserContext(), &req)
if err != nil {
return err
}
return response.SuccessWithPagination(c, carriers, total, req.Page, req.PageSize)
}
func (h *CarrierHandler) Create(c *fiber.Ctx) error {
var req dto.CreateCarrierRequest
if err := c.BodyParser(&req); err != nil {
return errors.New(errors.CodeInvalidParam, "请求参数解析失败")
}
carrier, err := h.service.Create(c.UserContext(), &req)
if err != nil {
return err
}
return response.Success(c, carrier)
}
func (h *CarrierHandler) Get(c *fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("id"), 10, 64)
if err != nil {
return errors.New(errors.CodeInvalidParam, "无效的运营商 ID")
}
carrier, err := h.service.Get(c.UserContext(), uint(id))
if err != nil {
return err
}
return response.Success(c, carrier)
}
func (h *CarrierHandler) Update(c *fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("id"), 10, 64)
if err != nil {
return errors.New(errors.CodeInvalidParam, "无效的运营商 ID")
}
var req dto.UpdateCarrierRequest
if err := c.BodyParser(&req); err != nil {
return errors.New(errors.CodeInvalidParam, "请求参数解析失败")
}
carrier, err := h.service.Update(c.UserContext(), uint(id), &req)
if err != nil {
return err
}
return response.Success(c, carrier)
}
func (h *CarrierHandler) Delete(c *fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("id"), 10, 64)
if err != nil {
return errors.New(errors.CodeInvalidParam, "无效的运营商 ID")
}
if err := h.service.Delete(c.UserContext(), uint(id)); err != nil {
return err
}
return response.Success(c, nil)
}
func (h *CarrierHandler) UpdateStatus(c *fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("id"), 10, 64)
if err != nil {
return errors.New(errors.CodeInvalidParam, "无效的运营商 ID")
}
var req dto.UpdateCarrierStatusRequest
if err := c.BodyParser(&req); err != nil {
return errors.New(errors.CodeInvalidParam, "请求参数解析失败")
}
if err := h.service.UpdateStatus(c.UserContext(), uint(id), req.Status); err != nil {
return err
}
return response.Success(c, nil)
}