Este projeto é um microsserviço backend desenvolvido em Spring Boot, responsável pelo gerenciamento de usuários dentro da arquitetura do sistema proposto no Tech Challenge - Fase 1 da FIAP.
A aplicação tem como objetivo oferecer suporte ao cadastro, atualização, exclusão, autenticação e validação de usuários, permitindo operações fundamentais para o sistema compartilhado de gestão de restaurantes da região. O backend foi estruturado para ser modular, escalável e seguro, atendendo aos critérios de boas práticas de desenvolvimento.
- Java 17
- Spring Boot 3.4.4
- PostgreSQL
- Flyway (migração de banco de dados)
- Spring Security
- JWT (Java Web Token)
- Docker
- Docker Compose
- Maven
- Docker
- Docker Compose
É necessário criar um arquivo ".env" na pasta ms-users, com o acesso ao banco de dados:
DB_USER=
DB_PASS=
Como o sistema será executado localmente, não há credencial fixa para o projeto.
docker compose up --buildVocê pode executar os testes unitários manualmente com:
docker run --rm -v $(pwd):/app -w /app -v $HOME/.m2:/root/.m2 maven:3.9.6-eclipse-temurin-17 mvn testOu usando o script de CI local (explicado abaixo).
Este script realiza um processo completo de CI local:
- Para os serviços com Docker Compose
- Executa os testes automatizados com Maven
- Constrói a imagem Docker com versionamento semântico
- Sobe novamente os serviços
./local-continuous-integration.sh [patch|minor|major] [--skip-tests] [--no-cache]patch,minor,major: nível de incremento de versão (padrão:patch)--skip-tests: pula os testes Maven--no-cache: força build do Maven sem cache local (~/.m2)
Script responsável por gerar novas imagens Docker com controle de versão semântico:
- Detecta a última versão existente (ex:
0.1.5) - Incrementa a versão com base no parâmetro (patch/minor/major)
- Gera imagem com nova tag +
latest
./app-build.sh [patch|minor|major]- PostgreSQL
- Flyway é usado para migração automática de scripts SQL.
- Scripts de versão ficam em:
src/main/resources/db/migration
- Utiliza JWT (
com.auth0:java-jwt) - Spring Security gerencia endpoints seguros
- Testes com Spring Boot Test, JUnit
- Banco de dados H2 em memória usado para testes
- Dependência de teste:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>Todos os endpoints da API estão documentados seguindo boas práticas REST.
Arquivos de coleções do Postman estão disponíveis para testar os endpoints(Coleção Postman - MS-USERS).
Assim como as configurações de ambiente(Ambiente Postman - MS-USERS).
Imagens Docker seguem o padrão de versionamento semântico:
tech-challenge-fiap-01:0.0.1,tech-challenge-fiap-01:latest, etc.
Scripts automatizados cuidam da construção e versionamento.
O CI local remove automaticamente imagens dangling:
docker image prune -fBase path: /users
id(UUID): ID do usuário.
- 200 OK:
UsersResponseDTO
{
"id": "UUID",
"name": "string",
"email": "string",
"login": "string",
"role": "OWNER | CLIENT",
"address": []
}size(int): Número de usuários por página.page(int): Número da página.
- 200 OK:
List<UsersResponseDTO>
{
"name": "string",
"email": "string",
"login": "string",
"password": "string",
"role": "OWNER | CLIENT",
"address": [
{
"zipcode": "string",
"street": "string",
"number": 123,
"complement": "optional",
"neighborhood": "string",
"city": "string",
"state": "SP"
}
]
}- 200 OK:
CreateUserDTO
{
"user": {
"id": "UUID",
"name": "string",
"email": "string",
"login": "string",
"role": "OWNER | CLIENT",
"address": []
},
"tokenJWT": "string"
}{
"login": "string",
"password": "string"
}- 200 OK:
TokenJWTInfoDTO
{
"tokenJWT": "string"
}id(UUID)
activate(boolean)
- 200 OK:
"Usuário ativado com sucesso!"ou"Usuário desativado com sucesso!"
id(UUID)
{
"oldPassword": "string",
"newPassword": "string"
}- 200 OK:
"Senha alterada com sucesso!"
id(UUID)
{
"name": "string",
"email": "string",
"login": "string",
"address": [
{
"zipcode": "string",
"street": "string",
"number": 123,
"complement": "optional",
"neighborhood": "string",
"city": "string",
"state": "SP"
}
]
}- 200 OK:
UsersResponseDTO
Este projeto é parte de um desafio educacional da FIAP. Uso livre para fins acadêmicos.
Após executar o sistema localmente, via Docker, é possível acessar a documentação das APIs também pelo Open API, em adição ao Postman. O link de acesso é: http://localhost:8080/swagger-ui/index.html