project-naming-conventions

Enforces naming and safe renaming conventions for Java Spring Boot REST projects.

39|3|Updated Jul 28, 2025
One-click install
npx skills add https://github.com/mzivkovicdev/spring-crud-generator --skill project-naming-conventions-mzivkovicdev
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: project-naming-conventions
Source: https://github.com/mzivkovicdev/spring-crud-generator/tree/main/.agents/skills/project-naming-conventions
Command: npx skills add https://github.com/mzivkovicdev/spring-crud-generator --skill project-naming-conventions-mzivkovicdev

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve? Inconsistent naming across Java code, REST APIs, database objects, configuration keys, and observability signals creates ambiguity, breaks contracts, and makes renames risky. This Skill provides a single rule hierarchy and vocabulary for choosing and safely renaming identifiers in Java 21+ Spring Boot projects. ## Core Features & Use Cases - Layered naming conventions: Covers Java types, packages, Spring components, tests, REST paths, JSON fields, OpenAPI operationIds, database objects, migrations, configuration properties, feature flags, events, cache keys, metrics, spans, and log fields. - Safe rename migrations: Treats any name that escapes its compilation unit as a contract migration, with inventory, compatibility mechanisms, and never-rename rules. - Project terminology preservation: Enforces the established TO–Domain–Entity vocabulary (UserTO, UserDomain, UserEntity) and deterministic operationId derivation from path plus HTTP method. - Use Case: When adding a new REST endpoint, derive the operationId (e.g., usersUserIdGet), name the controller method to match, choose snake_case table and constraint names, and verify no contract is broken before renaming anything existing. ## Quick Start Ask the assistant to review or propose names for a new Spring Boot endpoint, entity, configuration property, or metric using the project naming conventions.

Frequently Asked Questions about project-naming-conventions

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I name REST endpoints and OpenAPI operationIds in Spring Boot?▼

Use lowercase hyphenated plural resource paths like /users/{userId}, and derive operationId mechanically from the path plus HTTP method, such as usersUserIdGet for GET /users/{userId}. The controller handler method name must exactly match the operationId.

What naming convention should Java Spring Boot classes follow?▼

Use UpperCamelCase with role suffixes reflecting actual responsibility: UserController, UserService, UserRepository, UserEntity, UserTO, UserDomain, UserRestMapper. Avoid generic suffixes like Manager, Helper, or Processor when a specific responsibility can be named.

How do I safely rename a database column or API field?▼

Treat any name consumed outside one compilation unit as a contract migration. Inventory consumers, use compatibility mechanisms like aliases or expand-and-contract migrations, define removal criteria, and verify mixed-version deployments before removing the old name.

Does this convention cover infrastructure names like AWS buckets or Kubernetes resources?▼

No. Physical infrastructure names such as cloud resources, IAM roles, buckets, and Kubernetes objects are deferred to the repository's approved platform or DevOps naming standard. Application code should reference them through typed configuration properties named by purpose.

How should configuration properties and environment variables be named in Spring Boot?▼

Use canonical lowercase kebab-case grouped by subsystem, such as clients.catalog.read-timeout, and bind them to a @ConfigurationProperties type. Derive environment variables by replacing dots with underscores, removing dashes, and uppercasing.

What are the rules for naming metrics, spans, and log fields?▼

Use Micrometer lowercase dot notation for meter names like orders.created, with bounded tag keys and values. Never embed user IDs, emails, or unbounded values in metric names, span names, or tags; use route templates instead of concrete paths.