Add internal/handler/food.go
This commit is contained in:
104
internal/handler/food.go
Normal file
104
internal/handler/food.go
Normal file
@@ -0,0 +1,104 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
|
||||
"gotest/internal/service"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
// FoodHandler 外卖数据处理器
|
||||
type FoodHandler struct {
|
||||
svc *service.FoodService
|
||||
}
|
||||
|
||||
// NewFoodHandler 创建外卖数据处理器
|
||||
func NewFoodHandler(svc *service.FoodService) *FoodHandler {
|
||||
return &FoodHandler{svc: svc}
|
||||
}
|
||||
|
||||
// GetHomeData 获取外卖首页数据 GET /api/v1/food/home
|
||||
func (h *FoodHandler) GetHomeData(c *gin.Context) {
|
||||
data, err := h.svc.GetHomeData()
|
||||
if err != nil {
|
||||
FailInternal(c, "获取首页数据失败")
|
||||
return
|
||||
}
|
||||
Success(c, data)
|
||||
}
|
||||
|
||||
// ListCategories 获取餐厅分类 GET /api/v1/food/categories
|
||||
func (h *FoodHandler) ListCategories(c *gin.Context) {
|
||||
data, err := h.svc.ListCategories()
|
||||
if err != nil {
|
||||
FailInternal(c, "获取分类失败")
|
||||
return
|
||||
}
|
||||
Success(c, data)
|
||||
}
|
||||
|
||||
// ListRestaurants 获取餐厅列表 GET /api/v1/food/restaurants?category_id=&keyword=&sort=&page=&page_size=
|
||||
func (h *FoodHandler) ListRestaurants(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.ListRestaurants(uint(categoryID), keyword, sort, page, pageSize)
|
||||
if err != nil {
|
||||
FailInternal(c, "获取餐厅列表失败")
|
||||
return
|
||||
}
|
||||
Success(c, data)
|
||||
}
|
||||
|
||||
// GetRestaurant 获取餐厅详情 GET /api/v1/food/restaurants/:id
|
||||
func (h *FoodHandler) GetRestaurant(c *gin.Context) {
|
||||
id, err := strconv.ParseUint(c.Param("id"), 10, 64)
|
||||
if err != nil {
|
||||
FailBadRequest(c, "无效的餐厅 ID")
|
||||
return
|
||||
}
|
||||
data, err := h.svc.GetRestaurant(uint(id))
|
||||
if err != nil {
|
||||
FailBadRequest(c, "餐厅不存在")
|
||||
return
|
||||
}
|
||||
Success(c, data)
|
||||
}
|
||||
|
||||
// GetRestaurantMenu 获取餐厅菜单 GET /api/v1/food/restaurants/:id/menu
|
||||
func (h *FoodHandler) GetRestaurantMenu(c *gin.Context) {
|
||||
id, err := strconv.ParseUint(c.Param("id"), 10, 64)
|
||||
if err != nil {
|
||||
FailBadRequest(c, "无效的餐厅 ID")
|
||||
return
|
||||
}
|
||||
data, err := h.svc.GetRestaurantMenu(uint(id))
|
||||
if err != nil {
|
||||
FailBadRequest(c, "菜单获取失败")
|
||||
return
|
||||
}
|
||||
Success(c, data)
|
||||
}
|
||||
|
||||
// ListFeatured 获取推荐餐厅 GET /api/v1/food/featured?limit=
|
||||
func (h *FoodHandler) 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)
|
||||
}
|
||||
Reference in New Issue
Block a user