YC科技资讯网

OpenSpec实践:两轮 OpenSpec 变更与实现小结

本次我们围绕用户管理能力做了两轮 OpenSpec 变更与实现:第一轮:补齐用户 CRUD(含扩展字段与唯一约束)。第二

本次我们围绕用户管理能力做了两轮 OpenSpec 变更与实现:

第一轮:补齐用户 CRUD(含扩展字段与唯一约束)。

第二轮:将删除改为软删除(status 语义升级)并新增 title 字段。

一、第一轮变更:add-user-management-api

1. 产出 OpenSpec 工件

创建 proposal/design/specs/tasks 并达到 apply-ready。

路径在归档后为:2026-04-08-add-user-management-api

2. 实现代码(按 tasks 落地)

新增用户模块 Controller/Service/Mapper/DTO/Entity/异常处理/统一返回。

完成 6 个 API:POST/GET(id)/GET(page)/PUT/PATCH/DELETE。

核心文件包括:

UserController.javaUserServiceImpl.javaUserMapper.javaUserMapper.xmlschema.sql

3. 测试与文档

扩展了集成测试,覆盖 CRUD 正常路径与异常路径。

补充了 API 示例文档:HELP.md

4. 归档

该变更已归档完成。

二、第二轮变更:user-soft-delete-and-title

1. 产出 OpenSpec 工件

proposal -> design -> specs -> tasks 全部完成。

变更后完成 apply(19/19 任务),并最终归档:2026-04-11-user-soft-delete-and-title

2. 关键业务变更

删除改为软删除:DELETE 不再物理删行,改为 status=-1。有效状态统一:status=0 为有效。新增 title 字段并贯通创建/查询/更新链路。查询与分页默认只返回有效用户(status=0)。

3. 代码层改造

模型层新增 title 字段(Entity/DTO/Response)。SQL 层增加 status=0 过滤、删除改 softDeleteById。Service 层确保默认 status=0、已软删用户按不存在处理。测试覆盖软删除后不可查、不可更新、重复删除等场景。

4. 规范同步与归档

delta spec 已同步到主规范:spec.md

归档前完成了 artifact/tasks/sync 全量检查与确认。

三、数据库迁移部分

要求“现有数据与表结构怎么处理”,已提供并落地迁移脚本:

2026-04-10-user-status-backfill.sql

脚本包含

迁移前检查备份表创建与数据备份按需新增 titlestatus 归一化与默认值修正可选索引创建迁移后检查回滚草案

四、最终状态

两个变更都已完成并归档。

主规范已同步到最新用户管理语义(含软删除与 title)。

代码、测试、文档、迁移脚本均已覆盖并联动。

当前 active change 为空,处于“可继续新需求”的干净状态。