Agent Skill
2/7/2026infra-bc-query-generator
Generates CQRS/read-side query infrastructure for a BC: query DTO/Mapper/Impl and optional app query ports.
R
ryan
0GitHub Stars
1Views
npx skills add ryan-alexander-zhang/persimmon
SKILL.md
| Name | infra-bc-query-generator |
| Description | Generates CQRS/read-side query infrastructure for a BC: query DTO/Mapper/Impl and optional app query ports. |
name: infra-bc-query-generator description: "Generates CQRS/read-side query infrastructure for a BC: query DTO/Mapper/Impl and optional app query ports."
Infra BC Query Generator
Follow
.codex/skills/GENERATOR_SKILL_STRUCTURE.md.
Templates: See references/templates.md.
Use For
- Read-side query implementations under:
{{basePackage}}.infra.query.{{bcName}}.dto{{basePackage}}.infra.query.{{bcName}}.mapper{{basePackage}}.infra.query.{{bcName}}.impl
- Supporting application query services (typically under
{{basePackage}}.app.{{bcName}}.query.*)
Inputs Required
- Business context name (
{{bcName}}) - Query use-case name (what the query returns)
- Output DTO shape (fields + paging)
- Storage source:
- existing write table(s) or dedicated read model/projection
- Whether an app query port is needed:
- If app wants an abstraction, generate
{{basePackage}}.app.{{bcName}}.port.*(optional by design)
- If app wants an abstraction, generate
Outputs
- Query DTO:
{{infraModuleDir}}/src/main/java/{{basePackagePath}}/infra/query/{{bcName}}/dto/<XxxQueryDTO>.java
- Mapper:
.../infra/query/{{bcName}}/mapper/<XxxQueryMapper>.java
- Implementation:
.../infra/query/{{bcName}}/impl/<XxxQueryPortImpl>.java(implements app port when used)
- Optional app port + app query DTO:
{{appModuleDir}}/src/main/java/{{basePackagePath}}/app/{{bcName}}/port/<XxxQueryPort>.java{{appModuleDir}}/src/main/java/{{basePackagePath}}/app/{{bcName}}/query/dto/<XxxResultDTO>.java
- Tests:
- Unit tests for mapping logic
*ITif query SQL is non-trivial or relies on indexes/constraints
Naming & Packaging
- Query DTOs are infra-only; do not expose to domain.
- App query DTOs (if any) should be app-owned and stable.
- Prefer
*QueryMapperand*QueryPortImpl.
Implementation Rules
- Query paths should not load full aggregates; return lightweight DTOs.
- Keep SQL/persistence details in query mapper.
- If app defines a query port, infra implementation must only depend on app types (DTOs/ports), not adapter types.
Reference Implementations
- Package rules:
{{infraModuleDir}}/src/main/java/{{basePackagePath}}/infra/query/package-info.java{{infraModuleDir}}/src/main/java/{{basePackagePath}}/infra/query/{{bcName}}/impl/package-info.java
- App port guidance:
{{appModuleDir}}/src/main/java/{{basePackagePath}}/app/{{bcName}}/port/package-info.java
Tests
- Prefer unit tests for mapping; use
*ITfor SQL correctness.
Pitfalls
- Reusing infra query DTOs as web DTOs (adapter owns web DTOs).
- Accidentally depending on
domainaggregates in read models.
Skills Info
Original Name:infra-bc-query-generatorAuthor:ryan
Download