Add internal/handler/music.go
This commit is contained in:
103
internal/handler/music.go
Normal file
103
internal/handler/music.go
Normal file
@@ -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)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user