Esta API RESTful foi desenvolvida para facilitar o gerenciamento de usuários e seus endereços, restaurantes e seus respectivos cardápios. A aplicação permite criar, consultar, atualizar e remover registros de forma simples, segura e escalável aplicando as melhores praticas do Clean Architecture com os princípios do SOLID.
🚀 Funcionalidades
- Usuários
- ✅ Cadastro de novos usuários
- 🔍 Consulta de usuários por ID ou listagem geral
- ✏️ Atualização de informações do usuário
- ❌ Remoção de usuários
- Endereço
- ✅ Cadastro de novos endereços
- 🔍 Consulta de endereços por ID do endereço
- 🔍 listagem de todos os endereços de um usuário
- ✏️ Atualização das informações do endereço
- ❌ Remoção de endereços
- Restaurantes
- ✅ Registro de restaurantes
- 🔍 Consulta de restaurantes por ID ou listagem dos restaurantes
- ✏️ Atualização de dados do restaurante
- ❌ Remoção de restaurantes
- Cardápios
- ✅ Adição de itens ao cardápio de um restaurante
- 🔍 Consulta de um item por ID ou listagem de todos os itens de um restaurante
- ✏️ Edição de itens do cardápio
- ❌ Exclusão de itens do cardápio
- Login
- 🔍 Validação de acesso
- ✏️ Atualização de senha
- Java 21
- Spring Boot
- Spring Data JPA
- Spring Validation
- Lombok
- Swagger/OpenAPI
- Docker
- MySQL
- Maven
- Jacoco
src/main/java/com/fiap/tech_challenge
├── config # Configurações gerais (Swagger) e Beans de instanciação dos UseCase
├── core # Camada responsavel por encapsular camadas internas
│ ├── adapters # Interfaces gateway
│ ├── application # Controller Rest que utiliza os UseCase
│ ├── domain # Camada que encapsula Entity e UseCase
│ │ ├── model # Entidades de dominio e validações
│ │ └── usecases # Regra de negocio
│ │ ├── address # Operações com endereços
│ │ ├── login # Login e autenticação
│ │ ├── menu # Operações com os itens dos cardapios
│ │ ├── restaurant # Operações com os restaurantes
│ │ └── user # Lógica relacionada a usuários
│ ├── dto # Objetos de entrada e saída
│ └── exceptiontype # Classes de exceção e handler global
├── infrastructure # Camada que encapsula camadas externas
│ └── persistence # Camada para permanência de dados
│ ├── entity # Entidades JPA
│ ├── gateway # Implementação dos gateways com o framework
│ ├── mapper # Conversores (MapStruct)
│ └── repository # Interfaces JPA
└── TechChallengeApplication.java
- Java 21 ou superior
- Maven
- MySQL
git clone https://github.com/MatheusBragaRibeiroFiap/tech-challenge.git ./mvnw clean installRenomei o arquivo “.env.example” para ".env" e preencha-o da seguinte maneira:
DB_URI=jdbc:mysql://mysql-container:3306/db-user-management?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
DB_USER=usuario_do_banco
DB_PASSWORD=senha_do_banco
Navegue até o diretório do projeto
cd tech-challengeExecute o docker-compose
docker-compose up --buildou
Utilize a interface interativa disponibilizada pelo Swagger
📍 http://localhost:8080/swagger-ui.html
Após rodar o projeto, acesse a documentação Swagger:
👉 http://localhost:8080/swagger-ui.html
ou
👉 http://localhost:8080/v3/api-docs
{
"name": "John Doe",
"documentNumber": "12345678909",
"email": "johndoe@email.com",
"phone": "11999999999",
"password": "A123456*",
"userType": "RESTAURANT_OWNER",
"address": [
{
"street": "Rua das Flores",
"number": "123",
"complement": "Apto 1",
"neighborhood": "Centro",
"city": "São Paulo",
"state": "SP",
"country": "Brasil",
"postalCode": "01001000"
}
]
}Para cobertura de testes foi utilizado a ferramenta Jacoco atingindo o percentual total de 82%. Para rodar os testes unitários, na raiz do projeto, execute o seguinte comando:
mvn clean verify
O relatório de cobertura pode ser encontrado dentro da pasta ./target. Para acessar o relatório web acesse:
target/site/jacoco-merged/index.html
- Desenvolvido por Mayara Bomfim, Webber Chagas, Matheus Braga e Antonio C. Theodoro Jr
- Projeto acadêmico da pós-graduação em Java pela FIAP.
