resources/skills/quarkus-resource/SKILL.md
Generates a Quarkus RESTEasy Reactive @Path resource with DTOs, mapper, and tests.
npx skillsauth add edercnj/claude-environment quarkus-resourceInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Generates a complete Quarkus inbound adapter (resource) layer following the hexagonal architecture pattern. Produces:
@Path resource class (RESTEasy Reactive)record types with @RegisterForReflection)ExceptionMapper<RuntimeException> (or extends existing)@QuarkusTest unit tests/quarkus-resource <ResourceName> [--operations GET,POST,DELETE] — generate full resource for a resource/quarkus-resource <ResourceName> --crud — generate standard CRUD/quarkus-resource <ResourceName> --read-only — generate GET endpoints only| Parameter | Required | Description |
|-----------|----------|-------------|
| ResourceName | Yes | PascalCase resource name (e.g., Merchant, Transaction) |
| --operations | No | Comma-separated HTTP methods (default: all) |
| --crud | No | GET list, GET by id, POST, PUT, DELETE |
| --read-only | No | GET list and GET by id only |
| --path | No | Override API path (default: /api/v1/{resource-name-plural}) |
| --port | No | Port interface name (default: {ResourceName}ManagementPort) |
Read existing conventions:
knowledge/stack-patterns/quarkus/index.md — Quarkus patternsknowledge/layer-templates.md — Layer template patternsknowledge/architecture-hexagonal.md — Hexagonal architecture conventionssrc/main/java/**/adapter/inbound/ for naming conventions// src/main/java/{package}/adapter/inbound/rest/{ResourceName}Request.java
@RegisterForReflection
public record {ResourceName}Request(
@NotBlank @Size(max = N) String field1,
@NotNull Type field2
) {}
// src/main/java/{package}/adapter/inbound/rest/{ResourceName}Response.java
@RegisterForReflection
public record {ResourceName}Response(Long id, String field1, Type field2) {}
// src/main/java/{package}/adapter/inbound/rest/{ResourceName}DtoMapper.java
public final class {ResourceName}DtoMapper {
private {ResourceName}DtoMapper() {}
public static {DomainType} toDomain({ResourceName}Request request) { ... }
public static {ResourceName}Response toResponse({DomainType} domain) { ... }
}
Follow knowledge/stack-patterns/quarkus/index.md §4 RESTEasy Reactive pattern:
// src/main/java/{package}/adapter/inbound/rest/{ResourceName}Resource.java
@Path("{path}")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class {ResourceName}Resource {
// @Inject constructor injection of port
// Endpoints per --operations with @Transactional on writes
}
Check if SimulatorExceptionMapper (or similar) exists in adapter/inbound/rest/:
@Provider ExceptionMapper<RuntimeException> following §4 pattern// src/test/java/{package}/adapter/inbound/rest/{ResourceName}ResourceTest.java
@QuarkusTest
class {ResourceName}ResourceTest {
@InjectMock {ResourceName}ManagementPort port;
// RestAssured-based tests per endpoint per scenario
}
@RegisterForReflection@NotBlank, @NotNull, @Size)@Transactional on POST/PUT/DELETE endpoints@Inject (not field injection)Response.status(201), 204 DELETE@QuarkusTest + RestAssured (not @SpringBootTest)knowledge/stack-patterns/quarkus/index.md — Quarkus patterns (§4 RESTEasy, exception mapper)knowledge/layer-templates.md — Layer template patternsknowledge/architecture-hexagonal.md — Hexagonal architecturetools
Documentation automation v2: stack-aware generation from documentation.targets.
development
Generates or updates CI/CD pipelines per project stack with actionlint validation.
tools
Generates ADRs from architecture-plan mini-ADRs with sequential numbering and index update.
development
Formats source code; first step of the pre-commit chain (format -> lint -> compile).