Skip to content

Latest commit

History

15 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

 _________________ __ _______________________
___ ____/__ /_ \/ / ___ |__ __ \___ _/
__ /_ __ / __ /________ /| |_ /_/ /__ / _ __/ _ /___ /_/_____/ ___ | ____/__/ / /_/ /_____/_/ /_/ |_/_/ /___/ by Catmaitachi

DockerJava 25Spring BootMySQL

✈️ Sobre o projeto

Fly-API é uma aplicação RESTful desenvolvida em Java com Spring Boot, que gerencia informações de aeroportos. Ao iniciar, a aplicação importa dados de aeroportos a partir de um arquivo CSV disponibilizado pela OpenFlights, normaliza os nomes dos países para seus códigos ISO2, converte altitudes de pés para metros e armazena os aeroportos únicos em um banco de dados MySQL. A API oferece operações CRUD (Create, Read, Update, Delete) para manipular os dados dos aeroportos.

Esse projeto foi desenvolvido como método de aprendizado e avaliação da diciplina de Programação Modular do curso de Engenharia de Software da PUC Minas.

🚀 Execução com Docker

Pré-requisitos

  • Docker & Docker Compose
  • Portas livres: 8080 (API) e 3306 (MySQL)

Passos

git clone https://github.com/catmaitachi/Fly-API.git
cd Fly-API/app
docker compose up --build -d

Verificar containers

docker compose ps

Logs

docker compose logs -f app
docker compose logs -f mysql

Acesso

http://localhost:8080

🗄️ Banco de Dados

Configuração padrão (Docker Compose):

  • Banco: flyapi
  • Usuário: root
  • Senha: 777
  • Porta: 3306

Conexão:

mysql -h 127.0.0.1 -P 3306 -u root -p
# Senha: 777

🔧 Comandos Úteis

# Parar containers
docker compose down
# Parar e remover volumes (apaga dados)
docker compose down -v
# Reconstruir após mudanças no código
docker compose up --build -d
# Reiniciar somente a aplicação
docker compose restart app
# Entrar no container da aplicação
docker compose exec app bash
# Acessar MySQL dentro do container
docker compose exec mysql mysql -u root -p

🐳 Dockerfile (Resumo)

Multi-stage:

  1. test: Executa ./mvnw test (falha interrompe pipeline)
  2. build: Baixa dependências + empacota
  3. runtime: Copia JAR final e expõe porta 8080

📝 Desenvolvimento Local (sem Docker)

Pré-requisitos: Java 25 + Maven + MySQL.

cd app
./mvnw spring-boot:run

Variáveis e credenciais podem ser ajustadas em src/main/resources/application.properties.

⚙️ Configuração / Ambiente

  • Importação CSV: arquivo src/main/resources/data/airports.csv
  • Países: conversão robusta (nomes alternativos + ISO2/ISO3)
  • Validações: anotadas no DTO AeroportoRequest

🔌 Endpoints REST

Base URL: http://localhost:8080/api/v1/aeroportos

MétodoRotaDescriçãoRespostas
GET/Lista aeroportos200 (JSON) ou 204 (sem conteúdo)
GET/{iata}Busca aeroporto pelo código IATA200 (JSON) ou 404 (não encontrado)
POST/Cria aeroporto200 (criado) / 400 (validação)
PUT/{iata}Atualiza aeroporto200 (OK), 400 (IATA destino já existe), 404 (origem não existe)
DELETE/{iata}Remove aeroporto204 (Sem conteúdo)

Exemplo de criação:

curl -X POST http://localhost:8080/api/v1/aeroportos \
-H "Content-Type: application/json" \
-d '{ "nome": "Aeroporto Exemplo", "iata": "ABC", "cidade": "Cidade", "pais": "BR", "latitude": -10.0, "longitude": -50.0, "altitude": 100 }'

📦 Modelo de Dados

{
"id": 1,
"nome": "Aeroporto Exemplo",
"iata": "ABC",
"cidade": "Cidade",
"pais": "BR",
"latitude": -10.0,
"longitude": -50.0,
"altitude": 100// em metros
}

🧪 Testes

Estratégia dupla:

  • Unitários: *Test.java (Surefire) – serviços e utilidades com Mockito/JUnit.
  • Integração: *IT.java (Failsafe) – sobe contexto web e testa endpoints reais.

Comandos principais:

# Dentro do diretório appcd app
# Somente testes unitários
./mvnw test# Unitários + integração 
./mvnw verify

Testes via Docker

O docker compose up usa a imagem de estágio test para garantir que os testes passem antes de subir app.

🔍 Troubleshooting

# Ver processo usando porta 8080
lsof -i :8080
# Alterar porta em compose.yaml# ports:# - "8081:8080"# Ver saúde do MySQL
docker compose ps
docker compose logs mysql
# Rebuild completo
docker compose down -v
docker rmi fly-api:local
docker compose up --build -d

📁 Estrutura

app/ # 📂 Projeto
├── Dockerfile # 🐳 Build multi-stage
├── compose.yaml # 🧩 Orquestração Docker
├── pom.xml # 📦 Dependências Maven
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com/example/app/
│ │ │ ├── controller/ # 🌐 Endpoints REST
│ │ │ ├── service/ # ⚙️ Regras de negócio / importação
│ │ │ ├── repository/ # 🗄️ Persistência (Spring Data JPA)
│ │ │ ├── dto/ # 🔄 Estrutura de entrada e saída + mappers
│ │ │ └── model/ # 🧱 Entidades (Aeroporto)
│ │ └── resources/
│ │ ├── application.properties # 🔧 Configurações
│ │ └── data/
│ │ └── airports.csv # ✈️ Fonte de dados (CSV)
│ └── test/
│ └── java/ # 🧪 Testes unitários + integração
└── target/ # 🚀 Artefatos gerados (build)

About

Trabalho Prático API Rest: Gerenciamento de Aeroportos

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages