Projeto desenvolvido com Spring Boot utilizando arquitetura hexagonal (ports & adapters).
O sistema consome dados climáticos de uma API pública e os armazena em um banco relacional, permitindo consultas via endpoints REST.
| Pasta | Descrição |
|---|---|
| application | Contém a lógica de negócio (casos de uso) e as interfaces (ports) que definem como o domínio se comunica com o mundo externo. |
| domain | Modelos de domínio e exceções — representa a camada central independente de frameworks. |
| infrastructure/input/rest | Adaptadores de entrada: controladores REST e mapeadores para comunicação HTTP. |
| infrastructure/output/persistence | Adaptadores de saída: entidades JPA, repositórios e mapeamentos com o banco. |
| config | Configurações gerais da aplicação (Swagger, Feign, Jackson, etc). |
| utils | Constantes e catálogos de erro reutilizáveis. |
- Java 25+
- Maven 4.0.0+
- Docker (opcional, para subir o banco rapidamente)
docker-compose up -dIsso criará um container PostgreSQL configurado conforme docker-compose.yaml.
Modo local (sem Docker):
./mvnw spring-boot:runModo containerizado (API + banco):
docker-compose up --build| Método | Endpoint | Descrição |
|---|---|---|
GET |
/api/weather/v1 |
Lista todos os registros armazenados |
GET |
/api/weather/v1/{id} |
Busca um registro específico pelo ID |
POST |
/api/weather/v1 |
Cria um novo registro informando lon e lat |
Coleção Postman disponível em: Weather_API.postman_collection.json
A aplicação foi construída para desacoplar as regras de negócio de frameworks e tecnologias externas.
Isso facilita a manutenção, testes e evolução do sistema.
Generated: 11/9/2025, 12:44:21 PM
Root Path: c:\weather
├── .mvn
│ └── wrapper
│ └── maven-wrapper.properties
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── service
│ │ │ └── weather
│ │ │ ├── application
│ │ │ │ ├── ports
│ │ │ │ │ ├── input
│ │ │ │ │ │ └── WeatherServicePort.java
│ │ │ │ │ └── output
│ │ │ │ │ └── WeatherPersistencePort.java
│ │ │ │ └── service
│ │ │ │ └── WeatherService.java
│ │ │ ├── cleint
│ │ │ │ └── WeatherClient.java
│ │ │ ├── config
│ │ │ │ ├── JacksonConfig.java
│ │ │ │ ├── MapperConfig.java
│ │ │ │ ├── SwaggerConfig.java
│ │ │ │ └── WeatherFeignConfig.java
│ │ │ ├── domain
│ │ │ │ ├── exception
│ │ │ │ │ └── WeatherNotFounException.java
│ │ │ │ └── model
│ │ │ │ ├── Coordinate.java
│ │ │ │ ├── DateValue.java
│ │ │ │ ├── ErrorResponse.java
│ │ │ │ ├── Weather.java
│ │ │ │ └── WeatherData.java
│ │ │ ├── infrastructure
│ │ │ │ ├── input
│ │ │ │ │ └── rest
│ │ │ │ │ ├── mapper
│ │ │ │ │ ├── model
│ │ │ │ │ └── GlobalControllerAdvice.java
│ │ │ │ └── output
│ │ │ │ ├── persistence
│ │ │ │ │ ├── entity
│ │ │ │ │ ├── mapper
│ │ │ │ │ └── repository
│ │ │ │ └── WeatherPersistenceAdapter.java
│ │ │ ├── utils
│ │ │ │ └── ErrorCatalog.java
│ │ │ └── WeatherApplication.java
│ │ └── resources
│ │ ├── static
│ │ ├── templates
│ │ └── application.yaml
│ └── test
│ └── java
│ └── com
│ └── service
│ └── weather
│ └── WeatherApplicationTests.java
├── .gitattributes
├── .gitignore
├── docker-compose.yaml
├── mvnw
├── mvnw.cmd
└── pom.xml
Generated by FileTree Pro Extension