Este repositório contém uma API Spring Boot de módulo único. O código da aplicação fica em src/main/java/com/example/helloworld/, dividido por responsabilidade em controller/, service/, repository/, model/, dto/ e exception/. A configuração de execução fica em src/main/resources/application.properties. Os testes ficam em src/test/java/com/example/helloworld/. Materiais de apoio ficam em especificacoes/, e a persistência local em JSON é gravada em data/.
Use o Gradle a partir da raiz do projeto.
gradle bootRun: inicia a API emhttp://localhost:8080.gradle test: executa a suíte de testes com JUnit.gradle clean test: limpa a saída de build e executa novamente todos os testes.gradle build: compila, testa e empacota a aplicação.
Se um Gradle Wrapper for adicionado depois, prefira ./gradlew <task> em vez de uma instalação global do Gradle.
Use Java 17 e as convenções padrão do Spring Boot. Mantenha indentação de 4 espaços e evite imports com curinga. Nomeie controllers com *Controller, services com *Service, repositories com *Repository, DTOs com *Request ou *Response, e exceções com nomes claros de domínio, como ItemNotFoundException. Mantenha os caminhos REST em português apenas se isso já estiver alinhado com a API existente, por exemplo /itens.
Os testes usam JUnit 5 com Spring Boot Test e MockMvc. Coloque os testes em src/test/java, espelhando a estrutura de pacotes da aplicação. Nomeie as classes de teste conforme a unidade testada, por exemplo ItemControllerTest, e use nomes de métodos descritivos, como shouldRejectInvalidPayload(). Cubra fluxos CRUD de sucesso, falhas de validação e casos de recurso não encontrado antes de abrir um PR.
O histórico atual contém apenas Initial commit, então ainda não há uma convenção rígida. Use mensagens de commit curtas e no imperativo, como Add item validation tests ou Refactor file repository error handling. Mantenha cada commit focado em uma única mudança. Os PRs devem incluir um breve resumo, a lista de endpoints ou arquivos afetados, evidência de testes (gradle test) e qualquer alteração de configuração em application.properties ou no caminho de armazenamento em data/.
Não versione dados de produção nem segredos. Mantenha app.storage.file específico por ambiente e trate os arquivos em data/ como estado local de desenvolvimento, exceto quando forem explicitamente necessários como fixtures.