- 实体/双 SQL 加列+idx_att_ref;upload 增 scene 白名单(banner/link/site) - AttachmentService 新增 markUsed/release/markSiteConfigUsed(webUrl 反查,幂等) - 未使用=articleId 与 refType 均空;page 返回 unusedCount(前后端同步改名无兼容别名) - Banner/Link 保存先解引用再回写(换图旧图回未使用);Site 配置 logo/favicon 引用回写(@Lazy 解循环依赖) - 新增13例(Attachment6/Banner3/Link2/Site2)+既有语义断言更新;mvn -o test 全绿
138 lines
8.5 KiB
SQL
138 lines
8.5 KiB
SQL
-- ============================================================
|
||
-- bsch_cms_test 单测库表结构(每次 Spring 上下文启动先 DROP 重建,保证干净起点)
|
||
-- 以 src/main/resources/sql/cms_init.sql 为蓝本;
|
||
-- 2026-09-05 起本机为 MySQL 8.0.45,JSON 列恢复原生类型(与 cms_init.sql / 实体 columnDefinition 一致)
|
||
-- ============================================================
|
||
|
||
DROP TABLE IF EXISTS `cms_attachment`;
|
||
DROP TABLE IF EXISTS `cms_article`;
|
||
DROP TABLE IF EXISTS `cms_category`;
|
||
DROP TABLE IF EXISTS `cms_banner`;
|
||
DROP TABLE IF EXISTS `cms_link`;
|
||
DROP TABLE IF EXISTS `cms_site`;
|
||
|
||
CREATE TABLE `cms_site` (
|
||
`id` INT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||
`code` VARCHAR(64) NOT NULL COMMENT '站点编码,URL 路径用(/portal/{code})',
|
||
`parent_site_id` INT NOT NULL DEFAULT 0 COMMENT '上级站点ID(0=顶层校站点;院系子站挂主站 id)',
|
||
`sch_id` INT NULL COMMENT '学校ID(逻辑外键 → UserBase sys_group.id)',
|
||
`sch_name` VARCHAR(128) NULL COMMENT '学校名称(冗余展示)',
|
||
`name` VARCHAR(128) NOT NULL COMMENT '站点名称',
|
||
`theme` VARCHAR(64) NULL DEFAULT 'default' COMMENT '皮肤包名',
|
||
`config_json` JSON NULL COMMENT '站点配置(logo/联系方式/页脚等;预留 wechat 节点)',
|
||
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态:0=停用 1=启用',
|
||
`create_by` VARCHAR(64) NULL,
|
||
`create_time` DATETIME NULL,
|
||
`update_by` VARCHAR(64) NULL,
|
||
`update_time` DATETIME NULL,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_site_code` (`code`),
|
||
KEY `idx_site_sch` (`sch_id`),
|
||
KEY `idx_site_parent` (`parent_site_id`)
|
||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = 'CMS 站点';
|
||
|
||
CREATE TABLE `cms_category` (
|
||
`id` INT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||
`site_id` INT NOT NULL COMMENT '所属站点',
|
||
`parent_id` INT NOT NULL DEFAULT 0 COMMENT '父栏目ID(0=根)',
|
||
`name` VARCHAR(64) NOT NULL COMMENT '栏目名称',
|
||
`type` TINYINT NOT NULL DEFAULT 1 COMMENT '栏目类型:1=文章列表 2=单页 3=外链',
|
||
`link_url` VARCHAR(500) NULL COMMENT '外链地址(type=3 必填)',
|
||
`template` VARCHAR(64) NULL COMMENT '栏目模板覆盖',
|
||
`content` LONGTEXT NULL COMMENT '单页栏目内容',
|
||
`sort_no` INT NOT NULL DEFAULT 0 COMMENT '同级排序(升序)',
|
||
`seo_title` VARCHAR(200) NULL COMMENT 'SEO 标题',
|
||
`seo_description` VARCHAR(500) NULL COMMENT 'SEO 描述',
|
||
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '0=隐藏 1=显示',
|
||
`create_by` VARCHAR(64) NULL,
|
||
`create_time` DATETIME NULL,
|
||
`update_by` VARCHAR(64) NULL,
|
||
`update_time` DATETIME NULL,
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_cat_tree` (`site_id`, `parent_id`, `sort_no`)
|
||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = 'CMS 栏目';
|
||
|
||
CREATE TABLE `cms_article` (
|
||
`id` INT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||
`site_id` INT NOT NULL COMMENT '所属站点',
|
||
`category_id` INT NOT NULL COMMENT '所属栏目',
|
||
`title` VARCHAR(200) NOT NULL COMMENT '标题',
|
||
`summary` VARCHAR(500) NULL COMMENT '摘要',
|
||
`content` LONGTEXT NULL COMMENT '正文 HTML',
|
||
`cover_image` VARCHAR(500) NULL COMMENT '封面图 URL',
|
||
`author_account` VARCHAR(64) NULL COMMENT '作者账号',
|
||
`author_name` VARCHAR(64) NULL COMMENT '作者姓名',
|
||
`source` VARCHAR(128) NULL COMMENT '来源',
|
||
`status` TINYINT NOT NULL DEFAULT 0 COMMENT '0=草稿 1=已发布 2=已下架',
|
||
`topmost` TINYINT NOT NULL DEFAULT 0 COMMENT '置顶:0/1',
|
||
`publish_time` DATETIME NULL COMMENT '发布时间',
|
||
`offline_time` DATETIME NULL COMMENT '下架时间',
|
||
`view_count` INT NOT NULL DEFAULT 0 COMMENT '浏览量',
|
||
`ext_json` JSON NULL COMMENT '扩展字段(保留键:wechat=推送回执预留、albums=图集演进)',
|
||
`create_by` VARCHAR(64) NULL,
|
||
`create_time` DATETIME NULL,
|
||
`update_by` VARCHAR(64) NULL,
|
||
`update_time` DATETIME NULL,
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_art_list` (`site_id`, `category_id`, `status`, `publish_time`),
|
||
KEY `idx_art_site_top` (`site_id`, `status`, `topmost`)
|
||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = 'CMS 文章';
|
||
|
||
CREATE TABLE `cms_attachment` (
|
||
`id` INT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||
`site_id` INT NOT NULL COMMENT '所属站点',
|
||
`article_id` INT NULL COMMENT '关联文章',
|
||
`ref_type` VARCHAR(16) NULL COMMENT '场景引用类型:banner/link/site(B2)',
|
||
`ref_id` INT NULL COMMENT '场景引用对象ID(B2)',
|
||
`file_name` VARCHAR(255) NOT NULL COMMENT '原始文件名',
|
||
`file_path` VARCHAR(500) NOT NULL COMMENT '存储路径',
|
||
`web_url` VARCHAR(500) NOT NULL COMMENT 'Web 访问 URL',
|
||
`file_size` BIGINT NULL COMMENT '字节数',
|
||
`mime_type` VARCHAR(128) NULL COMMENT 'MIME 类型',
|
||
`create_by` VARCHAR(64) NULL,
|
||
`create_time` DATETIME NULL,
|
||
`update_by` VARCHAR(64) NULL,
|
||
`update_time` DATETIME NULL,
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_att_article` (`article_id`),
|
||
KEY `idx_att_site` (`site_id`),
|
||
KEY `idx_att_ref` (`ref_type`, `ref_id`)
|
||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = 'CMS 附件';
|
||
|
||
CREATE TABLE `cms_banner` (
|
||
`id` INT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||
`site_id` INT NOT NULL COMMENT '所属站点',
|
||
`position` VARCHAR(32) NOT NULL DEFAULT 'home' COMMENT '展示位标识',
|
||
`title` VARCHAR(200) NOT NULL COMMENT '标题',
|
||
`image_url` VARCHAR(500) NOT NULL COMMENT '图片 URL',
|
||
`link_type` TINYINT NOT NULL DEFAULT 1 COMMENT '跳转类型:1=文章 2=栏目 3=外链',
|
||
`link_value` VARCHAR(500) NULL COMMENT '跳转目标',
|
||
`sort_no` INT NOT NULL DEFAULT 0 COMMENT '同级排序(升序)',
|
||
`start_time` DATETIME NULL COMMENT '上线时间',
|
||
`end_time` DATETIME NULL COMMENT '下线时间',
|
||
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '0=停用 1=启用',
|
||
`create_by` VARCHAR(64) NULL,
|
||
`create_time` DATETIME NULL,
|
||
`update_by` VARCHAR(64) NULL,
|
||
`update_time` DATETIME NULL,
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_banner` (`site_id`, `position`, `status`, `sort_no`)
|
||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = 'CMS 轮播/推荐位';
|
||
|
||
CREATE TABLE `cms_link` (
|
||
`id` INT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||
`site_id` INT NOT NULL COMMENT '所属站点',
|
||
`group_name` VARCHAR(64) NOT NULL DEFAULT 'default' COMMENT '分组',
|
||
`name` VARCHAR(128) NOT NULL COMMENT '链接名称',
|
||
`logo_url` VARCHAR(500) NULL COMMENT 'Logo URL',
|
||
`link_url` VARCHAR(500) NOT NULL COMMENT '链接地址',
|
||
`sort_no` INT NOT NULL DEFAULT 0 COMMENT '组内排序',
|
||
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '0=隐藏 1=显示',
|
||
`create_by` VARCHAR(64) NULL,
|
||
`create_time` DATETIME NULL,
|
||
`update_by` VARCHAR(64) NULL,
|
||
`update_time` DATETIME NULL,
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_link` (`site_id`, `group_name`, `sort_no`)
|
||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = 'CMS 友情链接';
|