Dashboard do Clima
Este projeto é uma solução completa de monitoramento climático desenvolvida como parte do processo seletivo para a vaga de Desenvolvedor(a) .NET Júnior. O sistema coleta dados meteorológicos em tempo real, armazena o histórico e exibe estatísticas através de um dashboard responsivo.
📋 Sobre o Projeto
A aplicação foi desenhada seguindo princípios de Clean Architecture simplificada e SOLID, garantindo o desacoplamento entre as camadas de apresentação, regras de negócio e acesso a dados.
Funcionalidades Principais
Coleta Automática: Um Worker Service corre em segundo plano a cada 15 minutos para buscar dados na API OpenWeatherMap.
Persistência: Uso de banco de dados em memória (EF Core) para alta performance em testes.
Dashboard: Interface frontend responsiva (HTML5/CSS3) com gráficos interativos.
API REST: Endpoints documentados via Swagger para consumo de dados históricos e estatísticos.
🏗️ Arquitetura e Design
- Arquitetura Lógica
O sistema foi dividido em camadas para garantir a testabilidade e facilidade de manutenção:
API (Presentation): Responsável apenas por receber requisições HTTP e validar entradas.
Application (Services): Contém as regras de negócio (cálculo de médias, máximas e mínimas).
Domain (Models): Entidades que representam o núcleo do negócio (WeatherRecord).
Infrastructure (Data & External): Implementação do Repositório (EF Core) e Cliente HTTP para a API externa.
- Arquitetura Física (Implantação)
A solução é composta por dois artefatos principais: o Servidor Backend (.NET) e o Cliente Frontend (Navegador), comunicando-se via HTTP. O banco de dados reside na memória do processo do servidor.
Suposições e Decisões de Design
Repository Pattern: Utilizado para isolar o Entity Framework. Isto permite que, no futuro, o banco em memória seja trocado por SQL Server sem impactar a regra de negócio.
BackgroundService (Worker): A coleta de dados foi isolada num serviço hospedado (IHostedService) para não bloquear a thread principal da API e garantir a execução pontual a cada 15 minutos, independentemente de haver utilizadores logados.
Frontend Vanilla: Optou-se por HTML5 e CSS puro (sem frameworks pesados) para demonstrar domínio dos fundamentos da web e garantir leveza no carregamento, conforme recomendado no escopo do teste.
🚀 Como Executar o Projeto
Pré-requisitos
.NET 8 SDK instalado.
Chave de API do OpenWeatherMap (Gratuita).
Passo 1: Configuração do Backend
Clone o repositório:
git clone https://github.com/withor-dev/AppClima.git cd WeatherApp
Configure a sua chave de API. Abra o ficheiro appsettings.json e insira a sua chave:
"OpenWeatherMap": { "ApiKey": "SUA_CHAVE_AQUI", "BaseUrl": "https://api.openweathermap.org/data/2.5/" }
Restaure as dependências e compile:
dotnet restore dotnet build
Execute a aplicação:
dotnet run --project WeatherApp
O Backend iniciará em http://localhost:5222 (ou porta similar exibida no terminal).
Passo 2: Executando o Frontend
Como o frontend é estático (HTML/JS puro), não requer processo de build complexo.
Navegue até à pasta Frontend.
Abra o ficheiro index.html em qualquer navegador moderno.
Nota: Certifique-se de que a URL da API no ficheiro app.js corresponde à porta exata onde o seu backend está a correr localmente.
🧪 Testes Automatizados
O projeto conta com testes unitários cobrindo as principais regras de negócio, utilizando xUnit e Moq.
Para executar os testes, corra o seguinte comando na raiz da solução:
dotnet test
📚 Documentação da API
Com o backend a correr, aceda ao Swagger para visualizar e testar os endpoints interativamente:
URL: http://localhost:5222/swagger
Lá encontrará a especificação detalhada dos endpoints:
GET /api/weather/historico/{cidade}: Histórico completo para os gráficos.
GET /api/weather/resumo/{cidade}: Estatísticas consolidadas do dia (Média, Mínima, Máxima).
Desenvolvido por Withor - 2026

