Skip to content
cccskills
FreePublished on GitHub

crud-migration

PowerX CRUD Migration 规则(集中迁移挂载与入口约束)。

The English summary is being prepared. Showing the original description.

Works withPostgreSQLMySQL
See how to install

Files included (1)

  • SKILL.md5.8 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

PowerX CRUD Migration

步骤

  1. 打开 本文件内嵌规则。
  2. 按规则执行实现/校对。
  3. 完成后按核对清单验收。

核对点

  • 与 PowerX 当前代码结构、路径与命名一致。
  • 仅在传输层/契约层做职责内改动,不跨层越界。

规则(内嵌)

migration.yaml

kind: ruleset
name: crud_migration
version: 1.2.0
owner: powerx
status: stable

meta:
  intent: >
    约束 CoreX 数据库迁移的集中式挂载模式:
    - 总入口仅在 cmd/database/migrate.go 定义 MigrateDatabase/ResetDatabase(负责编排,不直接写模型迁移逻辑)。
    - 所有 CoreX 模型迁移必须集中在 pkg/corex/db/database/migration.go,通过 MigrateCoreModels(及内部 migrate<Domain>Models)统一调用 GORM AutoMigrate/Migrator。
    - plan.md 与 tasks.md 需显式说明增量模型将挂载到 pkg/corex/db/database/migration.go;禁止生成 pkg/corex/db/migration/<domain> 之类的分散入口或裸 .sql。
    - 若与以上冲突,以本块为准;否则视为失败。

scope:
  codebase:
    migrate_entry: "cmd/database/migrate.go"
    core_migration_file: "pkg/corex/db/database/migration.go"
    legacy_glob: "pkg/corex/db/migration/**"

principles:
  - “入口 + 集中挂载”双层结构:入口统一编排;具体 AutoMigrate 均集中在 pkg/corex/db/database/migration.go 内部函数。
  - 默认 Postgres:重置以 schema 为粒度,schema 名来自 model.PowerXSchema。
  - 允许 MySQL 降级:逐表 DROP(关闭外键检查)作为兼容路径。
  - 不交付裸 .sql 文件;优先 AutoMigrate/Migrator。
  - 生产保护:重置操作需具备显式的环境保护(如 APP_ENV != production)。

checks:
  # ---- 入口文件存在与函数签名 ----
  - id: migrate.entry.exists
    level: error
    when: { file: "cmd/database/migrate.go" }
    assert:
      - must_define: "func MigrateDatabase(ctx context.Context, db *gorm.DB) error"
      - must_define: "func ResetDatabase(ctx context.Context, db *gorm.DB) error"

  # ---- 入口逻辑:必须调用核心与 agent 模块迁移 ----
  - id: migrate.entry.calls.core_and_agent
    level: error
    when: { file: "cmd/database/migrate.go" }
    assert:
      - contains: "database.MigrateCoreModels(db)"
      - contains: "persistence.MigrateAgentModels(db)"

  # ---- ResetDatabase:必须使用 PowerXSchema 且包含 PG 的 DROP/CREATE 语句 ----
  - id: migrate.reset.uses_schema_constant
    level: error
    when: { file: "cmd/database/migrate.go" }
    assert:
      - contains: "model.PowerXSchema"
  - id: migrate.reset.pg_drop_create
    level: error
    when: { file: "cmd/database/migrate.go" }
    assert:
      - contains_any:
          - 'DROP SCHEMA " + model.PowerXSchema + " CASCADE; CREATE SCHEMA " + model.PowerXSchema + ";"'
          - "DROP SCHEMA "
          - "CASCADE; CREATE SCHEMA "

  # ---- ResetDatabase:允许 MySQL 逐表删除作为降级方案(可选)----
  - id: migrate.reset.mysql_fallback
    level: warn
    when: { file: "cmd/database/migrate.go" }
    assert:
      - contains_any:
          - "SHOW TABLES"
          - "SET FOREIGN_KEY_CHECKS=0"
          - "DROP TABLE IF EXISTS"

  # ---- 生产环境保护 ----
  - id: migrate.reset.env_guard
    level: warn
    when: { file: "cmd/database/migrate.go" }
    assert:
      - contains_any: ["APP_ENV", "production", "ensureNotProduction"]

  # ---- CoreX 迁移集中定义 ----
  - id: migrate.core.registry
    level: error
    when: { file: "pkg/corex/db/database/migration.go" }
    assert:
      - must_define: "func MigrateCoreModels(db *gorm.DB) (err error)"
      - must_call_one_of: ["db.AutoMigrate(", "db.Migrator()."]
      - contains: "func migrate"

  # ---- 避免遗留的 pkg/corex/db/migration/<domain> 目录 ----
  - id: migrate.no_legacy_packages
    level: warn
    when: { glob: "pkg/corex/db/migration/**/migrate.go" }
    assert:
      - should_empty: true

  # ---- 避免散落裸 SQL 文件 ----
  - id: migration.no_raw_sql_files
    level: warn
    when: { glob: "**/*.sql" }
    assert:
      - should_empty: true

acceptance:
  checklist:
    - "[ ] cmd/database/migrate.go 定义了 MigrateDatabase 与 ResetDatabase"
    - "[ ] MigrateDatabase 依次调用 database.MigrateCoreModels 与 persistence.MigrateAgentModels"
    - "[ ] ResetDatabase 使用 model.PowerXSchema 并包含 PG 的 DROP SCHEMA ... CASCADE; CREATE SCHEMA ... 实现"
    - "[ ] (可选)MySQL 降级路径:SHOW TABLES + 逐表 DROP + FK 开关"
    - "[ ] pkg/corex/db/database/migration.go 中新增或更新 migrate<Domain>Models,并通过 AutoMigrate/Migrator 挂载"
    - "[ ] 无裸 .sql 交付;生产环境有 reset 保护;未新增 pkg/corex/db/migration/<domain> 之类入口"

templates:
  migrate_entry_go_hint: |
    // cmd/database/migrate.go 的关键片段(示意):
    func MigrateDatabase(ctx context.Context, db *gorm.DB) error {
      if err := database.MigrateCoreModels(db); err != nil { return err }
      if err := persistence.MigrateAgentModels(db); err != nil { return err }
      return nil
    }
    func ResetDatabase(ctx context.Context, db *gorm.DB) error {
      // Postgres:DROP SCHEMA <schema> CASCADE; CREATE SCHEMA <schema>;
      // MySQL(可选):SHOW TABLES → 关闭 FK → 逐表 DROP → 恢复 FK
      return nil
    }
  migrate_core_registry_hint: |
    // pkg/corex/db/database/migration.go 的增量挂载示意:
    func MigrateCoreModels(db *gorm.DB) (err error) {
      if err = db.AutoMigrate(&modelTenant.Tenant{}); err != nil { return err }
      if err = migrateCapabilityModels(db); err != nil { return err }
      return nil
    }
    func migrateCapabilityModels(db *gorm.DB) error {
      return db.AutoMigrate(&modelCapability.CapabilityContract{})
    }

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

PowerX API 命名、前缀配置、版本迁移与插件网关路径规范(/admin、/internal 边界)。

The English summary is being prepared. Showing the original description.

ArtisanCloud/PowerX382Updated Oct 20, 2026

PowerX 底座 Capability 治理与发布准入规则。用于审计 REST/OpenAPI/gRPC/Gin 生成的能力候选、正式 platform_capabilities 目录、Capability Registry 登记、agent_usable/permission_code/risk_level 元数据、ignore 清单和缺失能力;当用户要求“重新识别能力”“能力是否能发布”“补齐能力登记”“检查 capability-gen/audit/check”“底座接口暴露给插件/agent”时使用。

The English summary is being prepared. Showing the original description.

ArtisanCloud/PowerX382Updated Oct 20, 2026

PowerX REST 契约规则(资源命名、分页、错误、版本化)。

The English summary is being prepared. Showing the original description.

ArtisanCloud/PowerX382Updated Oct 20, 2026

PowerX CRUD 依赖注入规则(Deps 单入口、构造注入、跨传输复用)。

The English summary is being prepared. Showing the original description.

ArtisanCloud/PowerX382Updated Oct 20, 2026

PowerX CRUD DTO 规则(输入输出分离、分页、校验)。

The English summary is being prepared. Showing the original description.

ArtisanCloud/PowerX382Updated Oct 20, 2026

PowerX CRUD gRPC 开发规范(proto、server、拦截器、错误映射)。

The English summary is being prepared. Showing the original description.

ArtisanCloud/PowerX382Updated Oct 20, 2026

See all skills by ArtisanCloud

Report a problem with this skill