Files
lpt-be/AGENTS.md
T

2.0 KiB
Raw Blame History

项目规范

数据库迁移(Flyway Migration

命名规则

  • 脚本格式:V{YYYYMMDD}_{序号}__{描述}.sql
  • 日期必须使用实际编写日期,不得使用过去的日期
  • 序号从 1 开始,同一天多个脚本递增
  • 描述使用下划线分隔的英文短语

核心原则

  • 不可变性:已执行的迁移脚本永远不得修改
  • 只增不减:数据库变更只能通过新增迁移脚本实现
  • 向后兼容:新脚本应兼容已有数据

操作规范

  • 删除表:创建新迁移脚本,使用 DROP TABLE IF EXISTS
  • 修改表结构:使用 ALTER TABLE 语句
  • 新增表:创建新迁移脚本,使用 CREATE TABLE

框架机制

行级数据隔离(多租户拦截器)

  • 配置类: MybatisPlusConfig 注册 TenantLineInnerInterceptor
  • 租户字段: created_by(每个业务表的创建人字段)
  • 租户值来源: StpUtil.getLoginIdAsString()(当前登录用户)
  • 自动注入: 所有 SELECT/UPDATE/DELETE 语句自动追加 WHERE created_by = #{当前用户}
  • 归属校验: 查询单条记录时拦截器自动校验 created_by,非本人数据直接返回空
  • 排除表: userflyway_schema_historydatabasechangelogdatabasechangeloglock

自动填充(MetaObjectHandler

  • created_by / updated_by 插入/更新时自动填充为当前登录用户
  • created_time / updated_time 插入/更新时自动填充当前时间

认证鉴权(Sa-Token

  • 会话管理: 基于 StpUtil 的登录/登出/会话查询
  • 权限校验: @SaCheckPermission 注解式权限控制
  • 未登录处理: 全局异常处理器捕获 NotLoginException 返回 401

编码规范

数据访问层

  • 优先使用纯 MyBatis-Plus Java APIWrappers.<T>lambdaQuery()selectListselectById 等),避免手写 XML SQL
  • 复杂查询通过 Wrappers 链式构建条件,必要时使用 .apply() 拼接原生 SQL 片段