mcpField
D
database-table-creator

database-table-creator

github.com/c0x12c数据与数据库109111 次安装19 周前更新
代码仓库

关于 database-table-creator

此 Skill 面向遵循 PostgreSQL 与 Exposed ORM 约定的 Kotlin 项目开发者,用于生成数据库表实现。它按迁移、代码到测试的顺序提供流程,并明确软删除与架构规则。

主要功能

  1. 01生成 PostgreSQL 迁移
  2. 02生成 Kotlin 表与实体
  3. 03实现 CRUD 仓库
  4. 04注册 Factory bean
  5. 05生成仓库测试

适用场景

  1. 01为 Kotlin 服务添加数据表
  2. 02创建软删除 CRUD 仓库
  3. 03生成迁移与仓库测试

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/c0x12c/ai-toolkit --skill database-table-creator

安装后在 Claude Code 中输入/database-table-creator确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

examples.md
kotlin-templates.md
migration-template.sql
validation-checklist.md

详细介绍

数据库表创建技能

创建完整的数据库表实现,包括 SQL 迁移、Kotlin 代码和全面的测试。

此技能的功能

生成:

  1. SQL 迁移 — 包含软删除、索引和触发器的 PostgreSQL 表
  2. Kotlin 表对象 — Exposed ORM 表定义(继承 UUIDTable)
  3. 实体数据类 — 实现 Entity<Instant> 的 Kotlin 实体
  4. Repository 接口 + 实现 — 支持软删除的 CRUD 操作
  5. Repository 测试 — 全面的测试覆盖(7 项以上测试)
  6. Factory Bean — 依赖注入注册

关键规则

数据库设计(rules/database/SCHEMA.md)

SQL 要求:

  • ❌ 不得使用外键约束(绝不可使用 REFERENCES 或 FOREIGN KEY)
  • ✅ 字符串使用 TEXT(不要使用 VARCHAR)
  • ✅ 包含:id(UUID)、created_at、updated_at、deleted_at
  • ✅ 所有索引都必须带有 WHERE deleted_at IS NULL
  • ✅ 添加软删除索引:WHERE deleted_at IS NOT NULL
  • ✅ 为 updated_at 添加更新触发器

Kotlin 要求:

  • ✅ 表必须继承 UUIDTable(不要继承 Table)
  • ✅ 实体必须实现 Entity<Instant>
  • ✅ 所有查询都必须使用 deletedAt.isNull() 进行筛选
  • ❌ 禁止使用 !! 运算符(提交前钩子会禁止)
  • ✅ 只使用软删除(设置 deletedAt,绝不硬删除)

工作流

步骤 1:创建 SQL 迁移

位置:database-migration/sql/{number}-{description}.sql

-- ============================================================================
-- Description: [Describe what this migration does]
-- Table: {table_name}
-- ============================================================================

CREATE TABLE {table_name} (
    -- Primary key (REQUIRED)
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),

    -- Business columns
    name TEXT NOT NULL,
    email TEXT,
    status TEXT DEFAULT 'active',
    user_id UUID,
    count INTEGER DEFAULT 0,
    is_active BOOLEAN DEFAULT true,
    metadata JSONB,

    -- Standard timestamps (REQUIRED)
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP,
    deleted_at TIMESTAMP
);

-- Unique index (allows duplicate soft-deleted records)
CREATE UNIQUE INDEX idx_{table_name}_email_unique
    ON {table_name}(email) WHERE deleted_at IS NULL;

-- Foreign key index (NO FK constraint, just index)
CREATE INDEX idx_{table_name}_user_id
    ON {table_name}(user_id) WHERE deleted_at IS NULL;

-- Soft delete index (REQUIRED)
CREATE INDEX idx_{table_name}_deleted_at
    ON {table_name}(deleted_at) WHERE deleted_at IS NOT NULL;

-- Update trigger (REQUIRED)
CREATE TRIGGER update_{table_name}_updated_at
BEFORE UPDATE ON {table_name}
FOR EACH ROW
EXECUTE FUNCTION update_updated_at();

关键事项:

  • 使用 TEXT,不要使用 VARCHAR
  • 不得使用 REFERENCES 或 FOREIGN KEY
  • 所有索引都要带有 WHERE 子句
  • 必须添加软删除索引
  • 必须添加更新触发器
步骤 2:运行迁移
./gradlew :app:module-repository:flywayMigrate

确认成功后再继续。

步骤 3–10:Kotlin 实现

所有 Kotlin 代码模板(Table、Entity、Repository、Factory Bean、测试)请参阅 kotlin-templates.md。

按以下顺序执行:

  1. 步骤 3 — 表对象(继承 UUIDTable,使用 text(),不要使用 varchar())
  2. 步骤 4 — 实体数据类(实现 Entity<Instant>)
  3. 步骤 5 — 常量/枚举(如需要)
  4. 步骤 6 — Repository 接口
  5. 步骤 7 — Repository 实现(写入使用 db.primary,读取使用 db.replica,始终使用 deletedAt.isNull() 进行筛选)
  6. 步骤 8 — 注册 Factory Bean
  7. 步骤 9 — Repository 测试(至少 7 项测试,必须包含软删除验证)
  8. 步骤 10 — 运行测试:./gradlew test

应避免的常见错误

常见错误和反模式请参阅 examples.md。

成功标准

✅ SQL 迁移成功运行 ✅ 使用 TEXT(而非 VARCHAR) ✅ 不使用外键约束 ✅ 所有索引都带有 WHERE 子句 ✅ Kotlin 表继承 UUIDTable ✅ 实体实现 Entity<Instant> ✅ 所有查询都使用 deletedAt.isNull() 进行筛选 ✅ 不使用 !! 运算符 ✅ 仅使用软删除(不进行硬删除) ✅ 已注册 Factory Bean ✅ 7 项以上测试全部通过

评论

支持 Markdown