Agent Skill
2/7/2026infra-bc-repository-generator
Generates BC-first repository implementation in infra: PO/Mapper/Converter/RepositoryImpl implementing domain repository ports.
R
ryan
0GitHub Stars
1Views
npx skills add ryan-alexander-zhang/persimmon
SKILL.md
| Name | infra-bc-repository-generator |
| Description | Generates BC-first repository implementation in infra: PO/Mapper/Converter/RepositoryImpl implementing domain repository ports. |
name: infra-bc-repository-generator description: "Generates BC-first repository implementation in infra: PO/Mapper/Converter/RepositoryImpl implementing domain repository ports."
Infra BC Repository Generator
Follow
.codex/skills/GENERATOR_SKILL_STRUCTURE.md.
Templates: See references/templates.md.
Use For
- Write-side persistence for a business context under:
{{basePackage}}.infra.repository.{{bcName}}.po{{basePackage}}.infra.repository.{{bcName}}.mapper{{basePackage}}.infra.repository.{{bcName}}.converter{{basePackage}}.infra.repository.{{bcName}}.impl
- Implementing domain repository ports:
{{basePackage}}.domain.{{bcName}}.repository.*
Inputs Required
- Business context name (
{{bcName}}) - Domain repository port to implement (interface name + methods)
- Aggregate root / entity names and identifiers
- Storage model:
- table name(s)
- unique keys / optimistic locking needs
- Persistence stack choice:
- MyBatis-Plus
BaseMapperfor standard CRUD - explicit SQL for conditional updates / locking semantics
- MyBatis-Plus
Outputs
- Flyway migration(s) if new table(s) are needed
- PO:
{{infraModuleDir}}/src/main/java/{{basePackagePath}}/infra/repository/{{bcName}}/po/<XxxPO>.java
- Mapper:
.../infra/repository/{{bcName}}/mapper/<XxxMapper>.java
- Converter:
.../infra/repository/{{bcName}}/converter/<XxxConverter>.java
- Repository implementation:
.../infra/repository/{{bcName}}/impl/<XxxRepositoryImpl>.java
- Tests:
- Unit tests for converters when mapping is non-trivial
*ITfor DB semantics (constraints/transactions) when needed
Naming & Packaging
- Package follows
package-info.javaunderinfra.repositoryandinfra.repository.{{bcName}}.*. - Types:
- PO suffix:
PO - Mapper suffix:
Mapper - Converter suffix:
Converter - Implementation suffix:
Impl(must implement a domain port)
- PO suffix:
Implementation Rules
- Repository impl must accept/return domain types (no PO leakage).
- Converter is the only layer that maps PO ↔ domain model.
- Translate persistence exceptions into meaningful domain/app failures (do not leak driver exceptions).
- Use explicit SQL when correctness depends on exact predicates (status/lock/lease).
Reference Implementations
- Package rules:
{{infraModuleDir}}/src/main/java/{{basePackagePath}}/infra/repository/package-info.java{{infraModuleDir}}/src/main/java/{{basePackagePath}}/infra/repository/{{bcName}}/impl/package-info.java
- Mapper/PO baseline:
{{infraModuleDir}}/src/main/java/{{basePackagePath}}/infra/repository/{{bcName}}/po/package-info.java{{infraModuleDir}}/src/main/java/{{basePackagePath}}/infra/repository/{{bcName}}/mapper/package-info.java
Tests
- If behavior depends on DB constraints (unique/check) or transaction semantics, add
*IT.
Pitfalls
- Putting conversion logic in repository impl (should be in converter).
- Using BaseMapper for conditional transitions that require strict predicates.
Skills Info
Original Name:infra-bc-repository-generatorAuthor:ryan
Download