Bläddra i källkod

feat: 新增音乐歌单 API 接口

- 新增 MusicGroups 接口,返回歌单列表及关联歌曲
- 新增 DtMusicGroup、DtMusic 实体模型
- 注册 GET /music/groups 路由
urban 2 veckor sedan
förälder
incheckning
b0a19bd5b1
4 ändrade filer med 110 tillägg och 1 borttagningar
  1. 5 1
      README.md
  2. 55 0
      apis/daytask/music.go
  3. 3 0
      apis/daytask/routers.go
  4. 47 0
      commons/model/entity/dt_music.go

+ 5 - 1
README.md

@@ -8,4 +8,8 @@
 
 3、使用命令:go run main.go config  初始化配置文件
 生成的配置文件路径:juapp_template\app_server\conf.d
-```
+```
+# 编译打包
+```
+GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o day_task_server -tags='!include'
+```

+ 55 - 0
apis/daytask/music.go

@@ -0,0 +1,55 @@
+package daytask
+
+import (
+	"app/commons/model/entity"
+	"github.com/gin-gonic/gin"
+)
+
+// MusicGroups 获取歌单列表(含歌曲)
+func (s *Server) MusicGroups(c *gin.Context) {
+	ctx := s.FromContext(c)
+	db := s.DB()
+	if db == nil {
+		ctx.Fail("数据库连接失败")
+		return
+	}
+
+	type GroupWithSongs struct {
+		entity.DtMusicGroup
+		Songs []entity.DtMusic `json:"songs"`
+	}
+
+	// 获取所有启用的歌单
+	groups := make([]*entity.DtMusicGroup, 0)
+	db.Model(&entity.DtMusicGroup{}).
+		Where("status = ?", 1).
+		Order("sort ASC, id ASC").
+		Find(&groups)
+
+	// 获取所有启用的歌曲
+	songs := make([]*entity.DtMusic, 0)
+	db.Model(&entity.DtMusic{}).
+		Where("status = ?", 1).
+		Order("sort ASC, id ASC").
+		Find(&songs)
+
+	// 按歌单分组
+	songMap := make(map[int64][]entity.DtMusic)
+	for _, song := range songs {
+		songMap[song.GroupId] = append(songMap[song.GroupId], *song)
+	}
+
+	result := make([]GroupWithSongs, 0)
+	for _, group := range groups {
+		item := GroupWithSongs{
+			DtMusicGroup: *group,
+			Songs:        songMap[group.Id],
+		}
+		if item.Songs == nil {
+			item.Songs = make([]entity.DtMusic, 0)
+		}
+		result = append(result, item)
+	}
+
+	ctx.OK(result)
+}

+ 3 - 0
apis/daytask/routers.go

@@ -37,6 +37,9 @@ func (h Router) Register(group *gin.RouterGroup) {
 	group.GET("material/detail", server().MaterialDetail)         // 素材详情
 	group.POST("material/like", server().MaterialLike)            // 素材点赞
 
+	// 音乐相关
+	group.GET("music/groups", server().MusicGroups)               // 歌单列表(含歌曲)
+
 	// 帮助中心
 	group.GET("help/categories", server().HelpCategories) // 帮助分类
 	group.GET("help/list", server().HelpList)             // 帮助列表

+ 47 - 0
commons/model/entity/dt_music.go

@@ -0,0 +1,47 @@
+package entity
+
+// DtMusicGroup 歌单分组表
+type DtMusicGroup struct {
+	MysqlFullModel
+	Name   string `json:"name" gorm:"type:varchar(64);not null;comment:歌单名称"`
+	Cover  string `json:"cover" gorm:"type:varchar(255);comment:封面图"`
+	Sort   int    `json:"sort" gorm:"default:0;comment:排序"`
+	Status int8   `json:"status" gorm:"default:1;index:idx_status;comment:状态: 0=禁用 1=启用"`
+}
+
+func (*DtMusicGroup) TableName() string {
+	return "dt_music_group"
+}
+
+func (*DtMusicGroup) Comment() string {
+	return "歌单分组表"
+}
+
+func NewDtMusicGroup() *DtMusicGroup {
+	return &DtMusicGroup{}
+}
+
+// DtMusic 歌曲表
+type DtMusic struct {
+	MysqlFullModel
+	GroupId  int64  `json:"groupId" gorm:"index:idx_group_id;comment:歌单ID"`
+	Title    string `json:"title" gorm:"type:varchar(100);not null;comment:歌曲名称"`
+	Artist   string `json:"artist" gorm:"type:varchar(100);comment:歌手"`
+	Url      string `json:"url" gorm:"type:varchar(500);not null;comment:音频文件地址"`
+	CoverUrl string `json:"coverUrl" gorm:"type:varchar(500);comment:封面图"`
+	Duration int    `json:"duration" gorm:"default:0;comment:时长(秒)"`
+	Sort     int    `json:"sort" gorm:"default:0;comment:排序"`
+	Status   int8   `json:"status" gorm:"default:1;index:idx_status;comment:状态: 0=禁用 1=启用"`
+}
+
+func (*DtMusic) TableName() string {
+	return "dt_music"
+}
+
+func (*DtMusic) Comment() string {
+	return "歌曲表"
+}
+
+func NewDtMusic() *DtMusic {
+	return &DtMusic{}
+}