优化页面、修复BUG
This commit is contained in:
127
server/scripts/migrate_video_module.sql
Normal file
127
server/scripts/migrate_video_module.sql
Normal file
@@ -0,0 +1,127 @@
|
||||
-- ============================================================
|
||||
-- 视频模块 + 作品演示视频 数据库迁移脚本
|
||||
-- 文件:server/scripts/migrate_video_module.sql
|
||||
-- 说明:可重复执行(幂等),适用于已有 nl_blog 数据库的增量升级
|
||||
-- 用法:mysql -u root -p your_database < scripts/migrate_video_module.sql
|
||||
-- ============================================================
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- ----------------------------
|
||||
-- 1. 视频分类表
|
||||
-- ----------------------------
|
||||
CREATE TABLE IF NOT EXISTS `video_categories` (
|
||||
`id` int UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '分类ID',
|
||||
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '分类名称',
|
||||
`slug` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'URL标识',
|
||||
`description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '分类描述',
|
||||
`sort_order` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '排序(越小越靠前)',
|
||||
`deleted_at` bigint NOT NULL DEFAULT 0 COMMENT '软删除时间戳',
|
||||
`created_at` bigint NOT NULL DEFAULT 0 COMMENT '创建时间(Unix秒)',
|
||||
`updated_at` bigint NOT NULL DEFAULT 0 COMMENT '更新时间(Unix秒)',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE INDEX `idx_slug`(`slug` ASC) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '视频分类表' ROW_FORMAT = DYNAMIC;
|
||||
|
||||
-- ----------------------------
|
||||
-- 2. 视频专辑表
|
||||
-- ----------------------------
|
||||
CREATE TABLE IF NOT EXISTS `video_albums` (
|
||||
`id` int UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '专辑ID',
|
||||
`name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '专辑名称',
|
||||
`description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '专辑描述',
|
||||
`cover` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '专辑封面URL',
|
||||
`category_id` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '所属视频分类ID',
|
||||
`is_active` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否启用(0否 1是)',
|
||||
`sort_order` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '排序(越小越靠前)',
|
||||
`deleted_at` bigint NOT NULL DEFAULT 0 COMMENT '软删除时间戳',
|
||||
`created_at` bigint NOT NULL DEFAULT 0 COMMENT '创建时间(Unix秒)',
|
||||
`updated_at` bigint NOT NULL DEFAULT 0 COMMENT '更新时间(Unix秒)',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
INDEX `idx_category_id`(`category_id` ASC) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '视频专辑表' ROW_FORMAT = DYNAMIC;
|
||||
|
||||
-- ----------------------------
|
||||
-- 3. 视频表
|
||||
-- ----------------------------
|
||||
CREATE TABLE IF NOT EXISTS `videos` (
|
||||
`id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '视频唯一标识',
|
||||
`title` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '视频标题',
|
||||
`description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '视频描述',
|
||||
`video_url` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '视频文件URL',
|
||||
`cover` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '封面图URL',
|
||||
`poster` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '播放器封面URL',
|
||||
`category_id` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '所属视频分类ID',
|
||||
`duration` int NOT NULL DEFAULT 0 COMMENT '时长(秒)',
|
||||
`is_published` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否发布(0草稿 1已发布)',
|
||||
`deleted_at` bigint NOT NULL DEFAULT 0 COMMENT '软删除时间戳',
|
||||
`created_at` bigint NOT NULL DEFAULT 0 COMMENT '创建时间(Unix秒)',
|
||||
`updated_at` bigint NOT NULL DEFAULT 0 COMMENT '更新时间(Unix秒)',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
INDEX `idx_category_id`(`category_id` ASC) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '视频表' ROW_FORMAT = DYNAMIC;
|
||||
|
||||
-- ----------------------------
|
||||
-- 4. 专辑-视频关联表
|
||||
-- ----------------------------
|
||||
CREATE TABLE IF NOT EXISTS `album_videos` (
|
||||
`album_id` int UNSIGNED NOT NULL COMMENT '专辑ID',
|
||||
`video_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '视频ID',
|
||||
`sort_order` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '专辑内排序',
|
||||
`created_at` bigint NOT NULL DEFAULT 0 COMMENT '创建时间(Unix秒)',
|
||||
PRIMARY KEY (`album_id`, `video_id`) USING BTREE,
|
||||
INDEX `idx_video_id`(`video_id` ASC) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '专辑视频关联表' ROW_FORMAT = DYNAMIC;
|
||||
|
||||
-- ----------------------------
|
||||
-- 5. 作品表新增演示视频字段(幂等添加)
|
||||
-- ----------------------------
|
||||
|
||||
-- 5.1 hero_video:独立上传的视频 URL
|
||||
SET @col_exists = (
|
||||
SELECT COUNT(*) FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'works' AND COLUMN_NAME = 'hero_video'
|
||||
);
|
||||
SET @sql = IF(@col_exists = 0,
|
||||
'ALTER TABLE `works` ADD COLUMN `hero_video` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT ''演示视频URL'' AFTER `hero_img`',
|
||||
'SELECT ''works.hero_video already exists'' AS info'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 5.2 video_id:关联 videos 表 ID(从视频库选择时使用)
|
||||
SET @col_exists = (
|
||||
SELECT COUNT(*) FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'works' AND COLUMN_NAME = 'video_id'
|
||||
);
|
||||
SET @sql = IF(@col_exists = 0,
|
||||
'ALTER TABLE `works` ADD COLUMN `video_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT ''关联视频库ID'' AFTER `hero_video`',
|
||||
'SELECT ''works.video_id already exists'' AS info'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- ----------------------------
|
||||
-- 6. 视频模块后台权限(videos:read/create/update/delete)
|
||||
-- ----------------------------
|
||||
INSERT IGNORE INTO `permissions` (`name`, `resource`, `action`, `deleted_at`, `created_at`, `updated_at`) VALUES
|
||||
('videos:read', 'videos', 'read', 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),
|
||||
('videos:create', 'videos', 'create', 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),
|
||||
('videos:update', 'videos', 'update', 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),
|
||||
('videos:delete', 'videos', 'delete', 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
|
||||
|
||||
-- 为管理员角色(role_id = 1)授予 videos 权限
|
||||
INSERT IGNORE INTO `role_permissions` (`role_id`, `permission_id`)
|
||||
SELECT 1, p.id FROM `permissions` p
|
||||
WHERE p.resource = 'videos' AND p.deleted_at = 0
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM `role_permissions` rp
|
||||
WHERE rp.role_id = 1 AND rp.permission_id = p.id
|
||||
);
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
SELECT 'migrate_video_module.sql executed successfully' AS result;
|
||||
Reference in New Issue
Block a user