From d9ae635c5af76382bf3d8596345815e618f35eea Mon Sep 17 00:00:00 2001 From: ata <17314593+asdxzaaaaa@user.noreply.gitee.com> Date: Fri, 10 Jul 2026 10:06:39 +0000 Subject: [PATCH] Add internal/handler/music.go --- internal/handler/music.go | 103 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 internal/handler/music.go diff --git a/internal/handler/music.go b/internal/handler/music.go new file mode 100644 index 0000000..e6e71d9 --- /dev/null +++ b/internal/handler/music.go @@ -0,0 +1,103 @@ +package handler + +import ( + "strconv" + + "gotest/internal/service" + + "github.com/gin-gonic/gin" +) + +// MusicHandler 音乐数据处理器 +type MusicHandler struct { + svc *service.MusicService +} + +// NewMusicHandler 创建音乐数据处理器 +func NewMusicHandler(svc *service.MusicService) *MusicHandler { + return &MusicHandler{svc: svc} +} + +// GetHomeData 获取音乐首页数据 GET /api/v1/music/home +func (h *MusicHandler) GetHomeData(c *gin.Context) { + data, err := h.svc.GetHomeData() + if err != nil { + FailInternal(c, "获取首页数据失败") + return + } + Success(c, data) +} + +// ListCategories 获取音乐分类 GET /api/v1/music/categories +func (h *MusicHandler) ListCategories(c *gin.Context) { + data, err := h.svc.ListCategories() + if err != nil { + FailInternal(c, "获取分类失败") + return + } + Success(c, data) +} + +// ListSongs 获取歌曲列表 GET /api/v1/music/songs?category_id=&keyword=&sort=&page=&page_size= +func (h *MusicHandler) ListSongs(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.ListSongs(uint(categoryID), keyword, sort, page, pageSize) + if err != nil { + FailInternal(c, "获取歌曲列表失败") + return + } + Success(c, data) +} + +// GetSong 获取歌曲详情 GET /api/v1/music/songs/:id +func (h *MusicHandler) GetSong(c *gin.Context) { + id, err := strconv.ParseUint(c.Param("id"), 10, 64) + if err != nil { + FailBadRequest(c, "无效的歌曲 ID") + return + } + data, err := h.svc.GetSong(uint(id)) + if err != nil { + FailBadRequest(c, "歌曲不存在") + return + } + Success(c, data) +} + +// ListHot 获取热门歌曲 GET /api/v1/music/hot?limit= +func (h *MusicHandler) ListHot(c *gin.Context) { + limit, _ := strconv.Atoi(c.DefaultQuery("limit", "8")) + if limit < 1 || limit > 50 { + limit = 8 + } + data, err := h.svc.ListHot(limit) + if err != nil { + FailInternal(c, "获取热门歌曲失败") + return + } + Success(c, data) +} + +// ListNew 获取新歌 GET /api/v1/music/new?limit= +func (h *MusicHandler) 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) +}