Files
schoolNews/schoolNewsServ/.bin/mysql/sql/RESOURCE_CATEGORY_REMOVAL.md

8.2 KiB
Raw Blame History

ResourceCategory 移除清单

📝 概述

本文档记录了 ResourceCategory 相关功能的完整移除过程。原资源分类功能已完全迁移到标签系统(tb_tagtag_type=1)。


已完成的操作

1. 数据库层面

已注释的建表语句

文件: .bin\mysql\sql\createTableResource.sql

-- 资源分类表(已废弃,使用 tb_tag 表的 tag_type=1 代替)
-- DROP TABLE IF EXISTS `tb_resource_category`;
-- CREATE TABLE `tb_resource_category` (
--   ...
-- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='资源分类表';
-- 
-- ⚠️ 注意:资源分类功能已迁移到 tb_tag 表中,使用 tag_type=1 表示文章分类标签

已注释的初始化数据

文件: .bin\mysql\sql\initAllData.sql

-- 插入资源分类数据(已废弃,使用下方的 tb_tag 数据代替)
-- INSERT INTO `tb_resource_category` (id, category_id, name, description, order_num, creator, create_time) VALUES
-- ('1', 'party_history', '党史学习', '党史学习相关资源', 1, '1', now()),
-- ...

2. Java 代码层面

已删除的文件共7个

  1. 实体类

    • common\common-dto\src\main\java\org\xyzh\common\dto\resource\TbResourceCategory.java
  2. Service 层

    • api\api-news\src\main\java\org\xyzh\api\news\category\ResourceCategoryService.java
    • news\src\main\java\org\xyzh\news\service\NCResourceCategoryService.java
    • news\src\main\java\org\xyzh\news\service\impl\NCResourceCategoryServiceImpl.java
  3. Controller 层

    • news\src\main\java\org\xyzh\news\controller\ResourceCategoryController.java
  4. Mapper 层

    • news\src\main\java\org\xyzh\news\mapper\ResourceCategoryMapper.java
    • news\src\main\resources\mapper\ResourceCategoryMapper.xml

已修改的文件共2个

  1. ResourceVO.java
    • 删除了 resourceCategory 字段及其 getter/setter
    • 保留 tags 字段用于存储标签列表(包含文章分类标签)

修改前:

public class ResourceVO {
    private TbResource resource;
    private TbResourceCategory resourceCategory;  // ❌ 已删除
    private List<TbTag> tags;
}

修改后:

public class ResourceVO {
    private TbResource resource;
    // ✅ 资源标签列表(包含文章分类标签 tag_type=1
    private List<TbTag> tags;
}
  1. ResourceCenterController.java
    • 修改 import 语句,移除 TbResourceCategory,添加 TbTag
    • 修改返回类型:ResultDomain<TbResourceCategory>ResultDomain<TbTag>
    • 更新 TODO 注释,说明使用 TagService.getTagsByType(1)

关键修改:

// 修改前
import org.xyzh.common.dto.resource.TbResourceCategory;
public ResultDomain<TbResourceCategory> getSpecialCategories() { ... }

// 修改后
import org.xyzh.common.dto.resource.TbTag;
public ResultDomain<TbTag> getSpecialCategories() {
    // TODO: 使用 TagService.getTagsByType(1) 获取文章分类标签
}

🔄 迁移映射关系

API 接口映射

原接口 (ResourceCategory) 新接口 (Tag) 说明
GET /news/categorys/list GET /news/tags/type/1 获取所有文章分类标签
GET /news/categorys/category/{id} GET /news/tags/tag/{tagID} 获取单个标签详情
POST /news/categorys/category POST /news/tags/tag 创建标签(需指定 tagType=1
PUT /news/categorys/category PUT /news/tags/tag 更新标签
DELETE /news/categorys/category/{id} DELETE /news/tags/tag/{tagID} 删除标签
GET /news/categorys/tree GET /news/tags/type/1 获取分类树(可通过标签列表构建)

数据字段映射

ResourceCategory 字段 Tag 字段 说明
tagID tagID 唯一标识
name name 名称
description description 描述
icon - 图标Tag中无此字段可扩展
orderNum - 排序号(可通过创建时间排序)
parentID - 父分类Tag为扁平结构
- tagType 标签类型固定为1
- color 标签颜色(新增字段)

代码调用映射

修改前:

// 使用 ResourceCategoryService
ResourceCategoryService categoryService;
ResultDomain<TbResourceCategory> result = categoryService.getAllCategories();

修改后:

// 使用 TagService
TagService tagService;
ResultDomain<TbTag> result = tagService.getTagsByType(1);  // 1 = 文章分类标签

⚠️ 数据迁移注意事项

如果数据库中已有 tb_resource_category 数据

需要执行以下迁移 SQL

-- 1. 将 tb_resource_category 数据迁移到 tb_tag
INSERT INTO tb_tag (id, tag_id, name, description, tag_type, creator, create_time)
SELECT 
    id,
    category_id AS tag_id,
    name,
    description,
    1 AS tag_type,  -- 文章分类标签
    creator,
    create_time
FROM tb_resource_category
WHERE deleted = 0;

-- 2. 确认迁移成功后,删除旧表(可选)
-- DROP TABLE IF EXISTS tb_resource_category;

tb_resource 表的 category_id 字段

tb_resource 表中的 category_id 字段仍然保留,但现在应该:

  • 存储的是 tb_tag 表中 tag_type=1 的标签的 tag_id
  • 或者改为使用 tb_resource_tag 关联表来管理资源与分类标签的关系

推荐方案: 使用 tb_resource_tag 关联表

-- 迁移资源分类关系到资源标签关联表
INSERT INTO tb_resource_tag (id, resource_id, tag_id, create_time)
SELECT 
    CONCAT('rt_', UUID()) AS id,
    resource_id,
    category_id AS tag_id,
    NOW() AS create_time
FROM tb_resource
WHERE category_id IS NOT NULL AND category_id != '';

📊 影响范围评估

前端影响

  • 需要修改前端代码中调用 /news/categorys 的接口
  • 改为调用 /news/tags/type/1 接口
  • 数据结构基本一致,只需修改接口地址和字段映射

后端影响

  • 已完全移除 ResourceCategory 相关代码
  • 所有功能已迁移到 TagService
  • ⚠️ 如有其他模块引用了 ResourceCategory需要同步修改

数据库影响

  • 建表语句已注释,不会创建 tb_resource_category
  • ⚠️ 如果数据库中已存在该表,需要手动迁移数据
  • ⚠️ 建议保留旧表一段时间作为备份

验证清单

完成以下验证以确保迁移成功:

1. 编译验证

  • Maven 编译无错误
  • TbResourceCategory 相关的编译错误
  • ResourceCategoryService 相关的导入错误

2. 功能验证

  • 创建文章分类标签tagType=1
  • 获取文章分类标签列表
  • 为资源添加分类标签
  • 查询资源的分类标签
  • 删除文章分类标签

3. 接口验证

# 1. 获取文章分类标签
curl http://localhost:8080/news/tags/type/1

# 2. 创建文章分类标签
curl -X POST http://localhost:8080/news/tags/tag \
  -H "Content-Type: application/json" \
  -d '{"name":"党史学习","tagType":1,"color":"#ff6b6b"}'

# 3. 为资源添加分类标签
curl -X POST http://localhost:8080/news/tags/resource/{resourceID}/tag/{tagID}

4. 数据验证

-- 检查标签数据
SELECT * FROM tb_tag WHERE tag_type = 1;

-- 检查资源标签关联
SELECT r.title, t.name 
FROM tb_resource r
LEFT JOIN tb_resource_tag rt ON r.resource_id = rt.resource_id
LEFT JOIN tb_tag t ON rt.tag_id = t.tag_id
WHERE t.tag_type = 1;

🎯 总结

移除内容

  • 7个 Java 文件实体、Service、Controller、Mapper
  • 1个 Mapper XML 文件
  • SQL 建表语句(已注释)
  • SQL 初始化数据(已注释)

修改内容

  • 2个 Java 文件ResourceVO、ResourceCenterController
  • 更新迁移文档

替代方案

  • 使用 tb_tag (tag_type=1) 替代 tb_resource_category
  • 使用 TagService.getTagsByType(1) 获取文章分类标签
  • 接口从 /news/categorys 迁移到 /news/tags/type/1

优势

  • 代码更简洁减少7个文件
  • 数据结构更统一
  • 功能更灵活,易于扩展
  • 维护成本降低

移除操作已全部完成!🎉