Status: Concluído ✅
Uma API RESTful moderna construída com C# e ASP.NET Core Minimal APIs para gerir o registo de veículos. A aplicação implementa um sistema de autenticação seguro com JWT e autorização baseada em perfis (Roles) para controlar o acesso às operações de CRUD.
Este projeto foi desenvolvido para demonstrar competências no ecossistema .NET, incluindo acesso a dados com Entity Framework Core, implementação de segurança e escrita de testes automatizados.
- Funcionalidades Principais
- Tecnologias Utilizadas
- Como Executar Localmente
- Documentação dos Endpoints
- Testes
- Arquitetura Minimal API: Endpoints construídos de forma concisa e performática, utilizando a abordagem mais recente do ASP.NET Core.
- Persistência com Entity Framework Core: Abordagem "Code-First", onde o esquema da base de dados é gerado e gerido através de Migrations a partir das classes de modelo C#.
- Autenticação com JWT: Sistema de login que gera um JSON Web Token (JWT) para autenticar requisições subsequentes.
- Autorização Baseada em Perfis (Roles): Controlo de acesso granular.
- Editor: Pode criar e ler veículos.
- Administrador: Tem acesso total, incluindo atualizar e apagar veículos.
- Testes Automatizados: Cobertura de testes de unidade e de persistência para a camada de serviço, utilizando xUnit, Moq e uma base de dados em memória.
- Documentação Interativa: Geração automática de uma UI do Swagger para visualização e teste dos endpoints.
| Categoria | Tecnologia |
|---|---|
| Framework & Core | .NET 9, ASP.NET Core |
| Persistência de Dados | Entity Framework Core, Npgsql (Provider PostgreSQL) |
| Segurança | Microsoft.AspNetCore.Authentication.JwtBearer |
| Testes | xUnit, Moq, EF Core In-Memory Database |
| API & Documentação | Minimal APIs, Swashbuckle (Swagger) |
| Hashing de Senhas | BCrypt.Net-Next |
- .NET 9 SDK
- Entity Framework Core Tools (
dotnet tool install --global dotnet-ef) - PostgreSQL instalado e a rodar.
-
Clone o repositório:
git clone https://github.com/Arthur-Fialho/API-VehicleRegistry cd VehicleRegistryAPI -
Configure a Base de Dados:
- Crie uma base de dados no PostgreSQL chamada
vehicleregistry. - No ficheiro
appsettings.json, atualize aDefaultConnectioncom as suas credenciais do PostgreSQL e defina um segredo forte para o JWT:{ "ConnectionStrings": { "DefaultConnection": "Host=localhost;Port=5432;Database=vehicleregistry;Username=<seu-usuario>;Password=<sua-senha>" }, "Jwt": { "Key": "<SEU_SEGREDO_SUPER_SECRETO_GERADO_AQUI>" } }
- Crie uma base de dados no PostgreSQL chamada
-
Aplique as Migrations: Este comando irá criar as tabelas
VehicleseUsersna sua base de dados.dotnet ef database update
-
Execute o projeto:
dotnet run
A API estará disponível num endereço local (ex:
http://localhost:5167). A UI do Swagger estará disponível em/swagger.
Todos os endpoints, exceto /login, são protegidos e exigem um token JWT no cabeçalho Authorization: Bearer <seu-token>.
Clique para expandir a documentação da API
POST /login- Realiza o login e retorna um token JWT. Utilizadores padrão são criados na primeira inicialização (
editor/senha123eadmin/senhaforte).
- Realiza o login e retorna um token JWT. Utilizadores padrão são criados na primeira inicialização (
GET /vehicles: Lista todos os veículos. (RequerEditorouAdministrator)GET /vehicles/{id}: Busca um veículo por ID. (RequerEditorouAdministrator)POST /vehicles: Cria um novo veículo. (RequerEditorouAdministrator)PUT /vehicles/{id}: Atualiza um veículo. (RequerAdministrator)DELETE /vehicles/{id}: Deleta um veículo. (RequerAdministrator)
Exemplo de corpo para POST ou PUT de Veículo:
{
"make": "Toyota",
"model": "Corolla",
"year": 2025,
"licensePlate": "BRA2E19"
}A solução inclui um projeto dedicado (VehicleRegistryAPI.Tests) com testes de unidade e persistência.
Para executar todos os testes a partir da raiz da solução, use o comando:
dotnet testVocê deverá ver uma saída a indicar que todos os testes passaram com sucesso.
Arthur Fialho