Agent Skill
2/7/2026

infra-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

Nameinfra-bc-repository-generator
DescriptionGenerates 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 BaseMapper for standard CRUD
    • explicit SQL for conditional updates / locking semantics

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
    • *IT for DB semantics (constraints/transactions) when needed

Naming & Packaging

  • Package follows package-info.java under infra.repository and infra.repository.{{bcName}}.*.
  • Types:
    • PO suffix: PO
    • Mapper suffix: Mapper
    • Converter suffix: Converter
    • Implementation suffix: Impl (must implement a domain port)

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