Um projeto para previsão do tempo com backend em Laravel, frontend em React e containerização com Docker.
Este projeto é um sistema completo para previsão do tempo, incluindo busca de condições climáticas de cidades, comparação entre cidades e salvamento de consultas no banco de dados. Ele foi desenvolvido utilizando Laravel para o backend, React para o frontend e Docker para facilitar a configuração do ambiente.
- Consultar previsão do tempo por cidade ou CEP.
- Comparar condições meteorológicas entre duas cidades.
- Salvar consultas como favoritas.
- Visualizar histórico de previsões.
A organização dos arquivos e o design do sistema seguem princípios de Clean Code e Clean Architecture para garantir um código claro, escalável e fácil de manter.
- Separação entre lógica de negócios (Services/Repositories) e lógica de persistência (Models).
- Facilita manutenção e substituição de implementações no futuro.
- Controllers minimalistas que delegam as operações ao Service Layer e Repository Layer.
- Centralização de regras de negócios no repositório, promovendo reutilização de código.
- Migration: Cada tabela tem uma migration dedicada para facilitar rastreamento de mudanças no banco.
- Validation: Regras de validação aplicadas nos Controllers para garantir integridade dos dados.
- Rotas bem definidas para manter o padrão REST, como:
/weather
: Previsões do tempo./forecast-comparisons
: Comparações meteorológicas.
- Divisão do frontend em componentes reutilizáveis como
WeatherCard
,CityCard
eComparisonCard
. - Props e State: Uso extensivo de
props
euseState
para gerenciar dados entre os componentes.
- CSS organizado por páginas e componentes (
HomePage.css
,ComparePage.css
) para manter separação de estilos. - Design adaptado para desktop e dispositivos móveis.
- Configuração de uma variável de ambiente
REACT_APP_API_URL
para gerenciar URLs da API.
- Funções reutilizáveis para filtros (
handleChange
,limparFiltros
). - Componentes desacoplados para evitar duplicação de código.
- Configurado para rodar o backend (PHP-Laravel), frontend (React) e banco de dados (MySQL) em containers separados.
- Facilita o setup em qualquer máquina, reduzindo problemas de configuração.
- Backend: PHP 8.0 com dependências do Laravel.
- Frontend: Node.js 16 para rodar o React.
- Database: MySQL 8.0 com volumes persistentes para dados.
- Todos os containers estão conectados a uma rede Docker chamada
weather-network
, permitindo comunicação direta entre eles.
- Código organizado em métodos pequenos e autossuficientes.
- Nomes de variáveis e funções descritivos.
- Eliminação de duplicação de código.
- Divisão entre Controller, Service, e Repository para responsabilidades bem definidas.
- Laravel: Framework PHP para construção de APIs RESTful.
- MySQL: Banco de dados relacional.
- Carbon: Biblioteca para manipulação de datas.
- React: Biblioteca JavaScript para interfaces.
- Axios: Para requisições HTTP.
- CSS3: Para estilização responsiva.
- Docker: Para containerização.
- Adminer: Interface para gerenciar o banco de dados MySQL.
- Git: Controle de versão.
- Docker e Docker Compose instalados.
-
Clone o repositório:
git clone https://github.com/IzaacBaptista/Weather-app.git
-
Copie o arquivo de configuração do backend:
cp backend/.env.example backend/.env
-
Suba os containers:
cd weather-app/docker docker-compose up -d
-
Rode as migrations:
cd backend docker exec -it weather-backend sh php artisan migrate
-
Acesse o frontend:
Abra http://localhost:3000 no navegador.
-
Acesse o backend (API):
Abra http://localhost:8000/api/v1/weather-history no navegador.
-
Gerenciar e acessar o banco de dados:
Acesse o Adminer em http://localhost:8081 Sistema: MySQL Servidor: weather-mysql Usuário: user Senha: userpassword Base de dados: weather_app