spark-server/migrations/0022_music_categories.sql
DESKTOP-L8OUL9F\gfl0034 d3a68c3cad feat(music): 分类多对多、后台完整编辑与 OpenAPI
新增总/子分类与曲目绑定;playlist 可按 categoryId 筛选并返回分类树;
popadmin 支持行内改曲名/排序/上下架/会员开关与封面背景音频上传;文档同步。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-24 10:38:06 +08:00

83 lines
3.7 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 音乐总分类 / 子分类 + 曲目多对多。种子:首页 + 分类1/2/3;按 demo 曲名分配到子分类。
CREATE TABLE IF NOT EXISTS t_music_categories (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '分类自增 id',
parent_id BIGINT NULL COMMENT 'NULL=总分类;非空=所属总分类 id',
name VARCHAR(128) NOT NULL DEFAULT '' COMMENT '分类名称(后台可改)',
sort_order INT NOT NULL DEFAULT 0 COMMENT '越小越靠前',
enabled TINYINT(1) NOT NULL DEFAULT 1 COMMENT '1=启用',
created_at DATETIME(3) NOT NULL COMMENT '创建时间',
updated_at DATETIME(3) NOT NULL COMMENT '更新时间',
KEY idx_music_cat_parent (parent_id, enabled, sort_order, id),
KEY idx_music_cat_name (name)
) COMMENT='音乐总分类与子分类';
CREATE TABLE IF NOT EXISTS t_music_category_tracks (
category_id BIGINT NOT NULL COMMENT '分类 id',
track_id BIGINT NOT NULL COMMENT '曲目 id',
created_at DATETIME(3) NOT NULL COMMENT '绑定时间',
PRIMARY KEY (category_id, track_id),
KEY idx_mct_track (track_id)
) COMMENT='曲目与分类多对多(同一曲可属多个分类)';
INSERT INTO t_music_categories (parent_id, name, sort_order, enabled, created_at, updated_at)
SELECT NULL, '首页', 0, 1, CURRENT_TIMESTAMP(3), CURRENT_TIMESTAMP(3)
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM t_music_categories WHERE parent_id IS NULL AND name = '首页'
);
INSERT INTO t_music_categories (parent_id, name, sort_order, enabled, created_at, updated_at)
SELECT p.id, '分类1', 1, 1, CURRENT_TIMESTAMP(3), CURRENT_TIMESTAMP(3)
FROM t_music_categories p
WHERE p.parent_id IS NULL AND p.name = '首页'
AND NOT EXISTS (
SELECT 1 FROM t_music_categories c WHERE c.parent_id = p.id AND c.name = '分类1'
);
INSERT INTO t_music_categories (parent_id, name, sort_order, enabled, created_at, updated_at)
SELECT p.id, '分类2', 2, 1, CURRENT_TIMESTAMP(3), CURRENT_TIMESTAMP(3)
FROM t_music_categories p
WHERE p.parent_id IS NULL AND p.name = '首页'
AND NOT EXISTS (
SELECT 1 FROM t_music_categories c WHERE c.parent_id = p.id AND c.name = '分类2'
);
INSERT INTO t_music_categories (parent_id, name, sort_order, enabled, created_at, updated_at)
SELECT p.id, '分类3', 3, 1, CURRENT_TIMESTAMP(3), CURRENT_TIMESTAMP(3)
FROM t_music_categories p
WHERE p.parent_id IS NULL AND p.name = '首页'
AND NOT EXISTS (
SELECT 1 FROM t_music_categories c WHERE c.parent_id = p.id AND c.name = '分类3'
);
INSERT INTO t_music_category_tracks (category_id, track_id, created_at)
SELECT c.id, t.id, CURRENT_TIMESTAMP(3)
FROM t_music_categories c
JOIN t_music_tracks t ON t.title IN ('晨光微风', '城市夜行', '雨巷漫步', '山间回响')
WHERE c.name = '分类1'
AND c.parent_id IS NOT NULL
AND NOT EXISTS (
SELECT 1 FROM t_music_category_tracks x WHERE x.category_id = c.id AND x.track_id = t.id
);
INSERT INTO t_music_category_tracks (category_id, track_id, created_at)
SELECT c.id, t.id, CURRENT_TIMESTAMP(3)
FROM t_music_categories c
JOIN t_music_tracks t ON t.title IN ('海边日落', '咖啡馆时光', '极光之夜', '纸飞机')
WHERE c.name = '分类2'
AND c.parent_id IS NOT NULL
AND NOT EXISTS (
SELECT 1 FROM t_music_category_tracks x WHERE x.category_id = c.id AND x.track_id = t.id
);
INSERT INTO t_music_category_tracks (category_id, track_id, created_at)
SELECT c.id, t.id, CURRENT_TIMESTAMP(3)
FROM t_music_categories c
JOIN t_music_tracks t ON t.title IN ('极光之夜', '星河入梦', '旅途序曲', '晨光微风')
WHERE c.name = '分类3'
AND c.parent_id IS NOT NULL
AND NOT EXISTS (
SELECT 1 FROM t_music_category_tracks x WHERE x.category_id = c.id AND x.track_id = t.id
);