From 937417dc0bd0b9fcaa975f8eb5189b5319015f0b Mon Sep 17 00:00:00 2001 From: ata <17314593+asdxzaaaaa@user.noreply.gitee.com> Date: Fri, 10 Jul 2026 10:06:36 +0000 Subject: [PATCH] Add internal/handler/shop.go --- internal/handler/shop.go | 89 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 internal/handler/shop.go diff --git a/internal/handler/shop.go b/internal/handler/shop.go new file mode 100644 index 0000000..b78f62b --- /dev/null +++ b/internal/handler/shop.go @@ -0,0 +1,89 @@ +package handler + +import ( + "strconv" + + "gotest/internal/service" + + "github.com/gin-gonic/gin" +) + +// ShopHandler 电商数据处理器 +type ShopHandler struct { + svc *service.ShopService +} + +// NewShopHandler 创建电商数据处理器 +func NewShopHandler(svc *service.ShopService) *ShopHandler { + return &ShopHandler{svc: svc} +} + +// GetHomeData 获取商城首页数据 GET /api/v1/shop/home +func (h *ShopHandler) GetHomeData(c *gin.Context) { + data, err := h.svc.GetHomeData() + if err != nil { + FailInternal(c, "获取首页数据失败") + return + } + Success(c, data) +} + +// ListCategories 获取分类列表 GET /api/v1/shop/categories +func (h *ShopHandler) ListCategories(c *gin.Context) { + data, err := h.svc.ListCategories() + if err != nil { + FailInternal(c, "获取分类失败") + return + } + Success(c, data) +} + +// ListProducts 获取商品列表 GET /api/v1/shop/products?category_id=&keyword=&sort=&page=&page_size= +func (h *ShopHandler) ListProducts(c *gin.Context) { + categoryID, _ := strconv.ParseUint(c.Query("category_id"), 10, 64) + keyword := c.Query("keyword") + sort := c.Query("sort") + page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) + pageSize, _ := strconv.Atoi(c.DefaultQuery("page_size", "12")) + if page < 1 { + page = 1 + } + if pageSize < 1 || pageSize > 100 { + pageSize = 12 + } + data, err := h.svc.ListProducts(uint(categoryID), keyword, sort, page, pageSize) + if err != nil { + FailInternal(c, "获取商品列表失败") + return + } + Success(c, data) +} + +// GetProduct 获取商品详情 GET /api/v1/shop/products/:id +func (h *ShopHandler) GetProduct(c *gin.Context) { + id, err := strconv.ParseUint(c.Param("id"), 10, 64) + if err != nil { + FailBadRequest(c, "无效的商品 ID") + return + } + data, err := h.svc.GetProduct(uint(id)) + if err != nil { + FailBadRequest(c, "商品不存在") + return + } + Success(c, data) +} + +// ListFeatured 获取推荐商品 GET /api/v1/shop/featured?limit= +func (h *ShopHandler) ListFeatured(c *gin.Context) { + limit, _ := strconv.Atoi(c.DefaultQuery("limit", "8")) + if limit < 1 || limit > 50 { + limit = 8 + } + data, err := h.svc.ListFeatured(limit) + if err != nil { + FailInternal(c, "获取推荐商品失败") + return + } + Success(c, data) +}