6.3 KiB
Template Reverse Generator 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: Build a backend-admin template reverse generator that uploads a complete project ZIP, identifies backend/admin frontend/user frontend/SQL assets, produces an extraction report, and prepares the data needed to publish a template bundle.
Architecture: Keep the first implementation safe by separating scan/report generation from template bundle publishing. The scanner is a pure Java service that classifies project files; the controller exposes upload/analyze endpoints in the RuoYi admin backend; the ruoyi-ui page shows the report and keeps publish actions explicit.
Tech Stack: Java 8, Spring Boot, MyBatis/RuoYi admin APIs, Vue 2 + Element UI, JUnit 4.
Task 1: Core Project Scanner
Files:
-
Create:
ruoyi-generator/src/main/java/com/ruoyi/generator/domain/template/TemplateImportComponent.java -
Create:
ruoyi-generator/src/main/java/com/ruoyi/generator/domain/template/TemplateImportReport.java -
Create:
ruoyi-generator/src/main/java/com/ruoyi/generator/service/TemplateImportScanner.java -
Test:
ruoyi-generator/src/test/java/com/ruoyi/generator/service/TemplateImportScannerTest.java -
Step 1: Write failing tests
Create tests that build temporary project trees and verify:
-
A RuoYi-style project with backend, admin frontend, user frontend, and SQL is reported as four components.
-
Build artifacts and dependency folders are skipped.
-
A backend/admin/sql-only project does not claim
frontendsupport. -
Step 2: Run scanner tests and verify failure
Run: mvn -pl ruoyi-generator -Dtest=TemplateImportScannerTest test
Expected: FAIL because TemplateImportScanner does not exist.
- Step 3: Implement minimal scanner
Implement path walking with ignored directories: .git, .idea, node_modules, target, dist, build.
Classify:
-
backend: directory containingpom.xmlandsrc/main/java. -
admin_frontend: Vue project withpackage.jsonplus admin markers such assrc/permission.js,src/layout,src/views/system,src/views/tool/gen, or Element UI dependency. -
frontend: Vue project withpackage.jsonplussrc/viewsorsrc/pages, without admin markers. -
sql: any.sqlfiles outside ignored directories. -
Step 4: Run scanner tests and verify pass
Run: mvn -pl ruoyi-generator -Dtest=TemplateImportScannerTest test
Expected: PASS.
Task 2: Upload And Analysis Service
Files:
-
Create:
ruoyi-generator/src/main/java/com/ruoyi/generator/domain/template/TemplateImportAnalyzeResult.java -
Create:
ruoyi-generator/src/main/java/com/ruoyi/generator/service/ITemplateImportService.java -
Create:
ruoyi-generator/src/main/java/com/ruoyi/generator/service/TemplateImportServiceImpl.java -
Test:
ruoyi-generator/src/test/java/com/ruoyi/generator/service/TemplateImportServiceImplTest.java -
Step 1: Write failing tests
Verify ZIP extraction rejects path traversal entries such as ../evil.txt, stores files under a configured workspace, and delegates to TemplateImportScanner.
- Step 2: Run tests and verify failure
Run: mvn -pl ruoyi-generator -Dtest=TemplateImportServiceImplTest test
Expected: FAIL because the service does not exist.
- Step 3: Implement upload analysis
Use ZipInputStream, normalize each target path, reject entries escaping the task workspace, and return the scanner report. Keep the first version in filesystem workspace only; publishing to template tables is a later task.
- Step 4: Run tests and verify pass
Run: mvn -pl ruoyi-generator -Dtest=TemplateImportServiceImplTest test
Expected: PASS.
Task 3: Admin Backend API
Files:
-
Create:
ruoyi-generator/src/main/java/com/ruoyi/generator/controller/TemplateImportController.java -
Modify:
ruoyi-admin/src/main/resources/application.yml -
Step 1: Add API endpoints
Expose:
POST /generator/templateImport/analyzewithMultipartFile file,bundleCode, andbundleName.GET /generator/templateImport/capabilitiesreturning supported component types.
Use permission generator:template:import.
- Step 2: Verify compilation
Run: mvn -pl ruoyi-generator -DskipTests compile
Expected: SUCCESS.
Task 4: Admin Frontend Page
Files:
-
Create:
ruoyi-ui/src/api/generator/templateImport.js -
Create:
ruoyi-ui/src/views/generator/templateImport/index.vue -
Step 1: Add API wrapper
Implement analyzeTemplateImport(formData) and getTemplateImportCapabilities().
- Step 2: Add page
Build a Vue 2 + Element UI admin page with ZIP upload, bundle code/name fields, analyze button, component cards for backend, admin_frontend, frontend, and sql, warnings, and file counts.
- Step 3: Build frontend
Run: cd ruoyi-ui && npm run build:prod
Expected: SUCCESS.
Task 5: Publishing Preparation
Files:
-
Modify:
ruoyi-generator/src/main/java/com/ruoyi/generator/service/TemplateImportScanner.java -
Create:
ruoyi-generator/src/main/java/com/ruoyi/generator/domain/template/TemplateImportPublishDraft.java -
Step 1: Extend scanner output
Add safe draft data: supportBackend, supportAdminFrontend, supportFrontend, supportSql, detected root paths, skipped file count, and suggested template types.
- Step 2: Verify tests
Run: mvn -pl ruoyi-generator -Dtest=TemplateImportScannerTest test
Expected: PASS.
Task 6: Final Verification
Files:
-
No new files.
-
Step 1: Backend tests
Run: mvn -pl ruoyi-generator test
Expected: PASS.
- Step 2: Frontend build
Run: cd ruoyi-ui && npm run build:prod
Expected: PASS.
- Step 3: Manual smoke test
Upload a sample ZIP containing backend, admin frontend, user frontend, and SQL. Confirm all four cards appear and frontend is optional when absent.
Self-Review
- Spec coverage: Covers backend/admin frontend/frontend/sql detection, admin-side upload, safe ZIP handling, and report UI.
- Scope: Publishing into live template tables is deliberately separated from first scan/report delivery, because enabling templates changes generation behavior globally.
- No placeholders: Each task has concrete files, commands, and expected behavior.