Este projeto é um microsserviço desenvolvido para gerenciar o agendamento de manutenções em veículos.
Ele oferece uma API RESTful que permite a criação, atualização, visualização e cancelamento de agendamentos, além de
gerenciar informações de clientes e veículos associados. A autenticação e autorização são implementadas
com base em roles (papéis) de usuário, como MANAGER
e CUSTOMER
, utilizando tokens JWT (JSON Web Tokens) para
garantir a segurança dos dados e controle de acesso.
- Gerenciamento de Clientes: Criação, atualização e visualização de informações de clientes.
- Gerenciamento de Veículos: Associação de veículos aos clientes, permitindo a criação e atualização de informações dos veículos.
- Agendamento de Manutenções: Criação, visualização, atualização e cancelamento de agendamentos de manutenções.
- Autenticação e Autorização: Controle de acesso baseado em roles de usuário (
MANAGER
eCUSTOMER
), garantindo que apenas usuários autorizados possam acessar determinados endpoints. - Documentação da API: Utilização do Swagger para fornecer uma documentação interativa e fácil de usar dos endpoints da API.
- Testes Unitários: Cobertura de testes para garantir a qualidade e a funcionalidade do código.
Para instalar e usar o projeto tenha em sua máquina os seguintes requisitos:
- Git
- Java 17
- Docker
- Crie uma pasta e clone o projeto para sua máquina:
mkdir microsservicoAgendamento/
cd microsservicoAgendamento/
git clone git@github.com:rafaelmagalhaesguedes/MicrosservicoAgendamento.git
- Rodando o projeto com Docker:
Primeiro verifique se as portas 8080 (web service) e 5432 (postgres) não estão em uso em seu sistema.
Agora, suba os serviços docker com o comando abaixo
docker compose up -d
O serviço estará disponível na porta 8080 em seu localhost
- Abra seu navegador ou API client e acesse http://localhost
-
Java 17
-
Spring Boot
-
Postgres
-
Docker
-
Swagger (Para documentação da API)
-
IntelliJ (IDE de desenvolvimento)
-
Beekeeper Studio (Interface para gerenciar banco de dados)
-
Insomnia Client (API Client)
-
Builder: utilizamos o padrão criacional builder para construir objetos de forma mais controlada.
-
Strategy: utilizamos o padrão strategy para auxiliar na validação de dados sensíveis.
O projeto possui testes unitários para garantir a qualidade e a funcionalidade do código.
Para rodar os testes use o comando no terminal na raiz do projeto:
mvn test
O projeto implementa autenticação de usuários com diferentes roles (papéis) para controlar o acesso aos endpoints. As roles disponíveis são:
- ADMIN: Administrador geral do sistema.
- MANAGER: Gerente que pode gerenciar agendamentos e clientes.
- CUSTOMER: Cliente que pode criar e visualizar seus próprios agendamentos e veículos.
O projeto utiliza o Swagger para documentação dos endpoints, acesse neste link.
O projeto utiliza encriptação para os dados sensíveis da aplicação, para facilitar o processo utilizamos a biblioteca JASYPT.
Lista com os principais endpoints da aplicação
Autenticação:
Rota | Descrição |
---|---|
POST /auth/login | Autenticação no sistema |
POST /auth/logout | Sair do sistema |
Customer:
Rota | Descrição |
---|---|
POST /customer | Cria um novo cliente |
POST /vehicle/customer/{customerId} | Cria um veículo associado a um cliente |
POST /schedule/customer/{customerId} | Cria um agendamento associado a um cliente |
GET /schedule/customer/{customerId} | Lista os agendamento associados a um cliente |
GET /customer/{customerId} | Busca os dados de um cliente |
PUT /schedule/{scheduleId}/customer/{customerId}/ | Cancela um agendamento associado a um cliente |
PUT /address/customer/{customerId} | Atualiza um endereço associado a um cliente |
Manager:
Rota | Descrição |
---|---|
GET /schedule | Lista todos os agendamentos |
POST /order | Cria ordem de serviço |
PATCH /order/{orderId} | Finaliza ordem de serviço |
POST /mechanic | Cria mecânico |
GET /mechanic/{mechanicId} | Busca mecânico |
PUT /mechanic/{mechanicId} | Atualiza dados do mecânico |
DELETE /mechanic/{mechanicId} | Deleta mecânico |
Admin:
Rota | Descrição |
---|---|
POST /manager | Cria gerente |
GET /manager/{managerId} | Busca gerente |
PUT /manager/{managerId} | Atualiza dados do gerente |
DELETE /manager/{managerId} | Deleta gerente |
REQUEST
{
"name": "Rafa Guedes",
"email": "rafa@email.com",
"numberPhone": "31997785451",
"document": "12345678910",
"cep": "31510090"
}
RESPONSE
{
"id": 1,
"name": "Rafa Guedes",
"email": "rafa@email.com",
"numberPhone": "31997785451",
"document": "12345678910",
"address": {
"cep": "31510-090",
"logradouro": "Rua Anita Garibaldi",
"bairro": "Candelária",
"localidade": "Belo Horizonte",
"uf": "MG"
}
}
REQUEST
{
"licensePlate": "RWT9988",
"model": "HB20",
"make": "Hyundai",
"year": 2022
}
RESPONSE
{
"id": 1,
"licensePlate": "RWT9988",
"model": "HB20",
"manufacturer": "Hyundai",
"year": 2022
}
REQUEST
{
"dateSchedule": "2024-10-14T10:10:23.828952827",
"descriptionService": "Manutenção preventiva e substituição da bomba d'água e válvula termostática."
}
RESPONSE
{
"id": 1,
"dateSchedule": "2024-10-14T10:10:23",
"descriptionService": "Manutenção preventiva e substituição da bomba d'água e válvula termostática.",
"scheduleStatus": "PENDENTE",
"customer": {
"id": 1,
"name": "Rafa Guedes",
"email": "rafa@email.com",
"numberPhone": "31997785451",
"vehicles": [
{
"model": "HB20",
"licensePlate": "RWT9988"
}
]
}
}
RESPONSE
[
{
"id": 1,
"dateSchedule": "2024-10-14T10:10:23",
"descriptionService": "Manutenção preventiva.",
"scheduleStatus": "PENDENTE",
"customer": {
"id": 3,
"name": "Rafa Guedes",
"email": "rafael@email.com",
"numberPhone": "31997785451",
"vehicles": [
{
"model": "Ranger",
"licensePlate": "RMT9987"
}
]
}
},
{
"id": 2,
"dateSchedule": "2024-10-14T14:10:23",
"descriptionService": "Manutenção suspensão e freios.",
"scheduleStatus": "PENDENTE",
"customer": {
"id": 3,
"name": "Rafa Guedes",
"email": "rafael@email.com",
"numberPhone": "31997785451",
"vehicles": [
{
"model": "Ranger",
"licensePlate": "RMT9987"
}
]
}
}
]
REQUEST
{
"scheduleId": 1,
"managerId": 2,
"mechanicId": 1
}
RESPONSE
{
"id": 2,
"descriptionService": "Manutenção preventiva.",
"createdAt": "2024-10-07T14:23:48.976291738",
"orderStatus": "IN_PROGRESS"
}
REQUEST
{
"paymentType": "DEBIT_CARD",
"totalAmount": "1000.00"
}
RESPONSE
{
"id": 2,
"descriptionService": "Manutenção preventiva.",
"paymentType": "DEBIT_CARD",
"totalAmount": 1000.0,
"createdAt": "2024-10-07T14:23:48.976292",
"finishedAt": "2024-10-07T14:24:22.395491552",
"orderStatus": "COMPLETED"
}
Rafa Guedes