Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

API de Clientes – Spring Boot + Design Patterns

Gestão de clientes com enriquecimento automático de endereço via ViaCEP, demonstrando aplicação prática de vários padrões de projeto dentro do ecossistema Spring.

✨ Objetivos

Projeto de estudo (DIO Santander Bootcamp) para:

  • Consolidar uso de Spring Boot 3 (Java 17) + Spring Data JPA + OpenFeign.
  • Demonstrar padrões: Strategy, Singleton, Facade, Repository, (HTTP) Client como Proxy e Injeção de Dependência (IoC/DI).
  • Expor documentação automática com OpenAPI (springdoc) e testar rapidamente via Swagger UI.

🧱 Stack & Dependências

Camada Tecnologia
Linguagem Java 17
Framework Core Spring Boot 3.5.4
API REST spring-boot-starter-web
Persistência Spring Data JPA + H2 (em memória)
Cliente HTTP externo Spring Cloud OpenFeign
Documentação springdoc-openapi-starter-webmvc-ui
Testes spring-boot-starter-test

🧩 Padrões de Projeto Aplicados

Padrão Onde / Como Classe(s) Chave
Strategy Definição de contrato de operações sobre Cliente ClienteService (interface) + ClienteServiceImpl
Singleton Beans Spring são singletons por padrão ClienteServiceImpl, Repositories, ViaCepService
Facade Controller expõe interface simples escondendo integrações (DB + ViaCEP) ClienteRestController
Repository Abstração de acesso a dados ClienteRepository, EnderecoRepository
Proxy (HTTP Client) Feign gera implementação dinâmica para chamada externa ViaCepService (@FeignClient)
Inversão de Controle / DI Injeção automática de dependências @Autowired em ClienteServiceImpl

Fluxo (Salvar Cliente)

POST /clientes
	 -> ClienteRestController (Facade)
			 -> ClienteService (Strategy)
					 -> ClienteServiceImpl
							 -> EnderecoRepository.findById(cep)
									 (miss) -> ViaCepService.consultarCep(cep)  (Proxy Feign)
															-> EnderecoRepository.save()
							 -> ClienteRepository.save()

🗂️ Estrutura (Resumo)

src/main/java
 └─ ...using_design_pattern_spring
		├─ controller/ClienteRestController.java
		├─ service/ (ClienteService, ViaCepService, impl/ClienteServiceImpl)
		├─ repository/ (ClienteRepository, EnderecoRepository)
		├─ model/ (Cliente, Endereco)
		└─ config/OpenApiConfig.java

🔌 Endpoints Principais

Base URL: http://localhost:8080

Método Rota Descrição
GET /clientes Lista todos os clientes
GET /clientes/{id} Busca cliente por ID
POST /clientes Cria cliente (CEP buscado no ViaCEP)
PUT /clientes/{id} Atualiza dados do cliente (reprocessa CEP)
DELETE /clientes/{id} Remove cliente

📄 Modelo JSON

Envie no POST/PUT apenas o CEP dentro de endereco; os demais campos são preenchidos automaticamente.

{
	"nome": "Maria Silva",
	"endereco": { "cep": "01001000" }
}

Resposta (exemplo simplificado):

{
	"id": 1,
	"nome": "Maria Silva",
	"endereco": {
		"cep": "01001000",
		"logradouro": "Praça da Sé",
		"bairro": "",
		"localidade": "São Paulo",
		"uf": "SP",
		"ddd": "11"
	}
}

🧪 Teste Rápido (PowerShell)

# Criar cliente
Invoke-RestMethod -Uri http://localhost:8080/clientes -Method Post -Body '{"nome":"Maria","endereco":{"cep":"01001000"}}' -ContentType 'application/json'

# Listar
Invoke-RestMethod -Uri http://localhost:8080/clientes -Method Get

📘 Documentação Swagger / OpenAPI

Após subir a aplicação:

Metadados configurados em OpenApiConfig via @OpenAPIDefinition.

🚀 Como Executar

Pré-requisitos: Java 17 + Maven 3.9+

# (Opcional) Limpar build anterior
./mvnw.cmd clean

# Rodar aplicação
./mvnw.cmd spring-boot:run

Banco H2 em memória – ao reiniciar, os dados são perdidos. (Você pode adicionar spring.h2.console.enabled=true e configs de datasource se desejar expor o console.)

🔍 Observações Técnicas

  • O CEP é a chave do Endereco (evita duplicidade; múltiplos clientes referenciam o mesmo endereço).
  • Optional.orElseGet evita chamada redundante à API ViaCEP quando CEP já está no cache (DB H2).
  • Nenhum DTO foi criado para manter foco nos padrões principais; em produção é recomendável separar modelos de domínio e transporte.

🧑‍💻 Autor

Julia Krisnarane – jkrisnarane@gmail.com


Se este projeto ajudou nos estudos, deixe uma estrela e evolua as sugestões! 💡

About

API de Clientes – Spring Boot + Design Patterns. Gestão de clientes com enriquecimento automático de endereço via ViaCEP, demonstrando aplicação prática de vários padrões de projeto dentro do ecossistema Spring.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages