Skip to content

TSKsteff/Weather-Service-API

Repository files navigation

Weather Service API

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.


Estrutura do Projeto

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.

Como Rodar o Projeto

Pré-requisitos

  • Java 25+
  • Maven 4.0.0+
  • Docker (opcional, para subir o banco rapidamente)

Subindo o Banco de Dados com Docker

docker-compose up -d

Isso criará um container PostgreSQL configurado conforme docker-compose.yaml.


Executando a Aplicação

Modo local (sem Docker):

./mvnw spring-boot:run

Modo containerizado (API + banco):

docker-compose up --build

Endpoints Principais

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


Arquitetura Hexagonal

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.

File Tree: weather

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

About

Api Spring + Java 25 arquitetura hexagonal

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages