Files
yidaima/RuoYi-Vue/docs/superpowers/plans/2026-06-26-database-generation-metadata-and-seed-data.md

9.7 KiB

Database Generation Metadata And Seed Data Implementation Plan

For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (- [ ]) syntax for tracking.

Goal: Make generated database projects use auto-increment primary keys by default, separate UI field labels from database comments, generate Chinese dictionary options, and include 10 seed rows per generated business table.

Architecture: Add field-label and dictionary-option metadata to the database design DTO and persisted front-project column model, then thread that metadata through AI normalization, manual save/load, generation conversion, qing Vue templates, and schema SQL generation. Keep DDL comments sourced from columnComment; use columnLabel only for UI labels and generated sample text. Generate mock seed SQL on the backend from normalized table metadata so AI and manual database designs behave consistently.

Tech Stack: Java, Spring services, MyBatis mapper XML, Velocity templates, Vue single-file component source checks, JUnit 4, Mockito, Node test runner.


Task 1: Metadata Persistence

Files:

  • Modify: ruoyi-generator/src/main/java/com/ruoyi/generator/domain/front/dto/DatabaseColumnDesign.java

  • Modify: ruoyi-generator/src/main/java/com/ruoyi/generator/domain/front/FrontProjectColumn.java

  • Modify: ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTableColumn.java

  • Modify: ruoyi-generator/src/main/resources/mapper/front/FrontProjectColumnMapper.xml

  • Modify: ruoyi-generator/src/main/java/com/ruoyi/generator/service/front/FrontProjectServiceImpl.java

  • Modify: ruoyi-generator/src/main/java/com/ruoyi/generator/service/front/AiGenerateServiceImpl.java

  • Modify: ruoyi-generator/src/main/java/com/ruoyi/generator/service/front/FrontProjectConverter.java

  • Modify: sql/db.sql

  • Modify: sql/front_workbench.sql

  • Test: ruoyi-generator/src/test/java/com/ruoyi/generator/service/front/FrontProjectServiceImplTest.java

  • Test: ruoyi-generator/src/test/java/com/ruoyi/generator/service/front/AiGenerateServiceImplTest.java

  • Step 1: Write failing tests

Add assertions that saved columns preserve columnLabel and dictOptions, and that AI-generated columns default columnLabel separately from columnComment.

  • Step 2: Run tests to verify failure

Run: mvn -q -pl ruoyi-generator -Dtest=FrontProjectServiceImplTest,AiGenerateServiceImplTest test

Expected: compilation or assertion failure because metadata fields do not exist or are not persisted.

  • Step 3: Add metadata fields and persistence

Add columnLabel and dictOptions string properties with getters/setters. Update mapper select/insert/update SQL and schema SQL with column_label varchar(100) and dict_options text. Copy these fields in service converter methods.

  • Step 4: Run tests to verify pass

Run: mvn -q -pl ruoyi-generator -Dtest=FrontProjectServiceImplTest,AiGenerateServiceImplTest test

Expected: tests pass.

Task 2: Primary Key Defaults And Admin Form Rendering

Files:

  • Modify: ruoyi-generator/src/main/java/com/ruoyi/generator/service/front/AiGenerateServiceImpl.java

  • Modify: ruoyi-generator/src/main/java/com/ruoyi/generator/service/front/FrontProjectServiceImpl.java

  • Modify: ruoyi-generator/src/main/resources/qing/admin-index.vue.vm

  • Modify: ruoyi-generator/src/test/java/com/ruoyi/generator/service/front/FrontProjectServiceImplTest.java

  • Test: ruoyi-generator/src/test/java/com/ruoyi/generator/service/front/AiGenerateServiceImplTest.java

  • Step 1: Write failing tests

Add coverage that manual save without a primary key gets an id auto-increment column, and generated admin forms hide auto-increment fields on create while showing them disabled on edit.

  • Step 2: Run tests to verify failure

Run: mvn -q -pl ruoyi-generator -Dtest=FrontProjectServiceImplTest,AiGenerateServiceImplTest test

Expected: manual missing-primary-key test fails under current validation, and template source check fails because admin template lacks autoIncrementField.

  • Step 3: Implement defaults and template guard

Normalize every table before validation. Ensure the primary key is auto-increment integer-like, isInsert=0, isEdit=0, isList=0, htmlType=input. In qing/admin-index.vue.vm, use the same v-if="form.<pk>" and disabled rendering that the frontend template already uses.

  • Step 4: Run tests to verify pass

Run: mvn -q -pl ruoyi-generator -Dtest=FrontProjectServiceImplTest,AiGenerateServiceImplTest test

Expected: tests pass.

Task 3: Chinese Dictionary Options

Files:

  • Modify: ruoyi-generator/src/main/java/com/ruoyi/generator/service/front/AiGenerateServiceImpl.java

  • Create: ruoyi-generator/src/main/java/com/ruoyi/generator/service/front/DictOptionSupport.java

  • Modify: ruoyi-generator/src/main/resources/qing/vue-dict.js.vm

  • Modify: ruoyi-generator/src/main/resources/qing/index.vue.vm

  • Modify: ruoyi-generator/src/main/resources/qing/admin-index.vue.vm

  • Test: ruoyi-generator/src/test/java/com/ruoyi/generator/service/front/AiGenerateServiceImplTest.java

  • Test: ruoyi-generator/src/test/java/com/ruoyi/generator/service/front/DictOptionSupportTest.java

  • Step 1: Write failing tests

Add tests that English dictionary values like pending/approved/rejected normalize to Chinese labels and values such as 待审核/已通过/已驳回.

  • Step 2: Run tests to verify failure

Run: mvn -q -pl ruoyi-generator -Dtest=AiGenerateServiceImplTest,DictOptionSupportTest test

Expected: tests fail because dictionary option support does not exist.

  • Step 3: Implement dictionary option normalization

Represent options as JSON stored in dictOptions. Normalize common status, yes/no, gender, enabled/disabled, and publish states to Chinese values. Generate vue-dict.js.vm data from column.dictOptions, falling back to empty arrays for remote dictionaries.

  • Step 4: Run tests to verify pass

Run: mvn -q -pl ruoyi-generator -Dtest=AiGenerateServiceImplTest,DictOptionSupportTest test

Expected: tests pass.

Task 4: Mock Seed SQL

Files:

  • Create: ruoyi-generator/src/main/java/com/ruoyi/generator/service/front/MockDataSqlBuilder.java

  • Modify: ruoyi-generator/src/main/java/com/ruoyi/generator/service/front/MysqlDdlBuilder.java

  • Modify: ruoyi-generator/src/main/java/com/ruoyi/generator/service/front/AiGenerateServiceImpl.java

  • Modify: ruoyi-generator/src/main/java/com/ruoyi/generator/service/front/FrontProjectServiceImpl.java

  • Modify: ruoyi-generator/src/main/resources/qing/sql.vm

  • Test: ruoyi-generator/src/test/java/com/ruoyi/generator/service/front/MockDataSqlBuilderTest.java

  • Test: ruoyi-generator/src/test/java/com/ruoyi/generator/service/front/AiGenerateServiceImplTest.java

  • Test: ruoyi-generator/src/test/java/com/ruoyi/generator/service/front/FrontProjectServiceImplTest.java

  • Step 1: Write failing tests

Add tests proving generated SQL includes exactly 10 insert values per business table, excludes auto-increment primary keys, and uses Chinese dictionary values when present.

  • Step 2: Run tests to verify failure

Run: mvn -q -pl ruoyi-generator -Dtest=MockDataSqlBuilderTest,AiGenerateServiceImplTest,FrontProjectServiceImplTest test

Expected: tests fail because seed SQL is not generated.

  • Step 3: Implement seed SQL builder

Generate deterministic values per column type: Chinese text for string fields, numbers for integer/decimal fields, date/datetime literals for temporal fields, dictionary option values for dictionary fields, and file/image placeholders for upload fields. Append seed SQL to createTableSql after DDL so qing/sql.vm emits both.

  • Step 4: Run tests to verify pass

Run: mvn -q -pl ruoyi-generator -Dtest=MockDataSqlBuilderTest,AiGenerateServiceImplTest,FrontProjectServiceImplTest test

Expected: tests pass.

Task 5: Frontend Editor And Template Source Checks

Files:

  • Modify: easycode-web/src/components/DatabaseDesigner.vue

  • Modify: easycode-web/src/components/databaseDesigner.test.mjs

  • Modify: ruoyi-generator/src/test/java/com/ruoyi/generator/service/front/FrontProjectSchemaScriptTest.java

  • Step 1: Write failing tests

Add source checks that the database designer exposes columnLabel and dictOptions, and that schema scripts include the new metadata columns.

  • Step 2: Run tests to verify failure

Run: node --test easycode-web/src/components/databaseDesigner.test.mjs

Run: mvn -q -pl ruoyi-generator -Dtest=FrontProjectSchemaScriptTest test

Expected: source checks fail before UI and schema updates.

  • Step 3: Update editor defaults

Add display-name and dictionary-options inputs to the field table. Normalize columnLabel and dictOptions, and set primary-key defaults to non-insert/non-edit in newly added tables.

  • Step 4: Run focused tests

Run: node --test easycode-web/src/components/databaseDesigner.test.mjs

Run: mvn -q -pl ruoyi-generator -Dtest=FrontProjectSchemaScriptTest test

Expected: tests pass.

Task 6: Final Verification

Files:

  • Run affected Java and Node tests.

  • Step 1: Run Java focused tests

Run: mvn -q -pl ruoyi-generator -Dtest=AiGenerateServiceImplTest,FrontProjectServiceImplTest,DictOptionSupportTest,MockDataSqlBuilderTest,FrontProjectSchemaScriptTest test

Expected: all focused Java tests pass.

  • Step 2: Run frontend focused tests

Run: node --test easycode-web/src/components/databaseDesigner.test.mjs

Expected: all focused Node tests pass.

  • Step 3: Inspect diff

Run: git diff --stat and git diff --check

Expected: no whitespace errors; diff limited to database generation metadata, seed SQL, qing templates, and focused tests.