Add internal/handler/app.go

This commit is contained in:
ata
2026-07-10 10:06:39 +00:00
committed by Gitee
parent 2ddda87301
commit db12399a00

103
internal/handler/app.go Normal file
View File

@@ -0,0 +1,103 @@
package handler
import (
"strconv"
"gotest/internal/service"
"github.com/gin-gonic/gin"
)
// AppHandler 应用数据处理器
type AppHandler struct {
svc *service.AppService
}
// NewAppHandler 创建应用数据处理器
func NewAppHandler(svc *service.AppService) *AppHandler {
return &AppHandler{svc: svc}
}
// GetHomeData 获取应用首页数据 GET /api/v1/app/home
func (h *AppHandler) GetHomeData(c *gin.Context) {
data, err := h.svc.GetHomeData()
if err != nil {
FailInternal(c, "获取首页数据失败")
return
}
Success(c, data)
}
// ListCategories 获取应用分类 GET /api/v1/app/categories
func (h *AppHandler) ListCategories(c *gin.Context) {
data, err := h.svc.ListCategories()
if err != nil {
FailInternal(c, "获取分类失败")
return
}
Success(c, data)
}
// ListApps 获取应用列表 GET /api/v1/app/apps?category_id=&keyword=&sort=&page=&page_size=
func (h *AppHandler) ListApps(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.ListApps(uint(categoryID), keyword, sort, page, pageSize)
if err != nil {
FailInternal(c, "获取应用列表失败")
return
}
Success(c, data)
}
// GetApp 获取应用详情 GET /api/v1/app/apps/:id
func (h *AppHandler) GetApp(c *gin.Context) {
id, err := strconv.ParseUint(c.Param("id"), 10, 64)
if err != nil {
FailBadRequest(c, "无效的应用 ID")
return
}
data, err := h.svc.GetApp(uint(id))
if err != nil {
FailBadRequest(c, "应用不存在")
return
}
Success(c, data)
}
// ListFeatured 获取精选应用 GET /api/v1/app/featured?limit=
func (h *AppHandler) 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)
}
// ListNew 获取新上架应用 GET /api/v1/app/new?limit=
func (h *AppHandler) ListNew(c *gin.Context) {
limit, _ := strconv.Atoi(c.DefaultQuery("limit", "4"))
if limit < 1 || limit > 50 {
limit = 4
}
data, err := h.svc.ListNew(limit)
if err != nil {
FailInternal(c, "获取新上架应用失败")
return
}
Success(c, data)
}