Agent Skill
2/7/2026

adapter-web-controller-generator

Generates web adapters (controllers/dtos/assemblers) that map HTTP to app use-cases without business logic leakage.

R
ryan
0GitHub Stars
2Views
npx skills add ryan-alexander-zhang/persimmon

SKILL.md

Nameadapter-web-controller-generator
DescriptionGenerates web adapters (controllers/dtos/assemblers) that map HTTP to app use-cases without business logic leakage.

name: adapter-web-controller-generator description: "Use when generating web adapters (controllers/DTOs/assemblers) that map HTTP requests to app use-cases without business logic leakage."

Adapter Web Controller Generator

Overview

Generates adapter-layer web controllers, DTOs, and assemblers that translate HTTP into app-layer commands and queries. Controllers must be thin — no domain rules.

REQUIRED: Follow GENERATOR_SKILL_STRUCTURE.md. Variables in VARIABLES.md. Templates in references/templates.md.

When to Use

  • Generating or modifying controllers, DTOs, and assemblers under {{basePackage}}.adapter.web.*.

Don't use when

  • The endpoint is an internal MQ consumer (use adapter-mq-consumer-generator) or a scheduled job (use adapter-scheduler-job-generator). Not for domain model changes.

Inputs Required

  • Endpoint path + method
  • Request/response schema
  • Called app use-case (command/query)

Outputs

  • .../adapter/web/{{bcName}}/controller/<XxxController>.java
  • DTOs under .../adapter/web/{{bcName}}/dto
  • Assembler under .../adapter/web/{{bcName}}/assembler when mapping is non-trivial
  • .../adapter/web/common/GlobalExceptionHandler.java (generated once, not per controller)
  • .../adapter/web/common/ErrorResponse.java (generated once, not per controller)

Naming & Packaging

  • Follow BC-first adapter.web.{{bcName}}.* packages
  • Shared only in adapter.web.common

Rules

  • Controllers validate/parse inputs and call app handlers/services.
  • No domain rules implemented here.
  • DTOs should be adapter-specific (do not reuse domain objects as request/response).
  • Invalid query parameters must return HTTP 400 with explicit error code/message; do not silently coerce malformed values.
  • Generate GlobalExceptionHandler and ErrorResponse in adapter/web/common/ if they don't already exist. This is a one-time generation per project.

Reference Implementations

  • {{adapterModuleDir}}/src/main/java/{{basePackagePath}}/adapter/web/{{bcName}}/controller/package-info.java
  • {{adapterModuleDir}}/src/main/java/{{basePackagePath}}/adapter/web/common/package-info.java

Tests

  • Unit tests should validate request mapping and parameter validation when non-trivial.
  • Minimum verification: mvn -q clean test.

Common Mistakes

MistakeWhy It HappensFix
Exposing infra POs in web responsesDevs reuse persistence objects for convenienceCreate adapter-specific DTOs instead
Implementing domain validation in controllersTempting to add checks close to the requestMove validation to domain/app layer
Reusing domain objects as request/response DTOsSeems like less code to writeCreates coupling — use adapter-specific DTOs

Integration

  • Called by: scaffold-router
  • Pairs with: app-usecase-generator

Commit Gate

  • pass required tests (mvn -q clean test minimum, mvn -q clean verify if DB behavior changed)
  • run requesting-code-review
  • resolve Critical/Important findings
  • keep the commit focused
Skills Info
Original Name:adapter-web-controller-generatorAuthor:ryan