Integrantes:
- Lincoln Roncato — RM 565944
- Rafael Malaguti — RM 561830
- Natalia Cristina Souza — RM 564099
FLOW é uma plataforma de padronização e execução de processos operacionais. No MVP backend, vamos modelar processos, suas etapas, usuários e execuções.
API RESTful desenvolvida em Java com Quarkus seguindo o padrão Domain Driven Design (DDD), utilizando apenas tecnologias ensinadas nas aulas de "Domain Driven Design Using Java" da FIAP.
- Java 17+
- Quarkus (RESTEasy/JAX-RS)
- JDBC Oracle (ConnectionFactory, PreparedStatement, ResultSet)
- Maven
- Bean Validation (jakarta.validation: @NotBlank, @NotNull, @PastOrPresent, @Min, @Valid)
- Jackson via Quarkus para JSON
- CORSFilter conforme aula
src/main/java/br/com/fiap/flow/
├── to/ # Transfer Objects (Model/DTO)
├── dao/ # Data Access Objects (JDBC)
├── bo/ # Business Objects (Regras de Negócio)
├── resource/ # Endpoints REST (JAX-RS)
├── factory/ # ConnectionFactory
└── exception/ # Exceções de Domínio
- Java 17 ou superior
- Maven 3.6+
- Oracle Database (ou Docker com Oracle)
- Insomnia (ou Postman) para testes
-
Configurar variáveis de ambiente:
export DB_URL=jdbc:oracle:thin:@localhost:1521:xe export DB_USER=system export DB_PASSWORD=oracle
Ou edite
src/main/resources/application.propertiese descomente as linhas de fallback noConnectionFactory.java. -
Criar o banco de dados: Execute o script
docs/sql/ddl.sqlno Oracle para criar as tabelas e sequences.Importante: Se a tabela DDD_EXECUCOES já existir sem a coluna
cod_processo, execute também o scriptdocs/sql/alter_table.sqlpara adicionar essa coluna. -
Popular dados iniciais (opcional): Execute o script
docs/sql/dml.sqlpara inserir dados de teste. -
Compilar e executar:
mvn clean compile quarkus:dev
-
Acessar a API: A API estará disponível em
http://localhost:8081
| Método | URI | Status de Sucesso | Descrição |
|---|---|---|---|
| GET | /usuarios |
200 OK | Lista todos os usuários |
| GET | /usuarios/{codigo} |
200 OK | Busca usuário por código |
| POST | /usuarios |
201 Created | Cria novo usuário |
| PUT | /usuarios/{codigo} |
201 Created | Atualiza usuário |
| DELETE | /usuarios/{codigo} |
204 No Content | Remove usuário |
| Método | URI | Status de Sucesso | Descrição |
|---|---|---|---|
| GET | /processos |
200 OK | Lista todos os processos |
| GET | /processos/{codigo} |
200 OK | Busca processo por código |
| POST | /processos |
201 Created | Cria novo processo |
| PUT | /processos/{codigo} |
201 Created | Atualiza processo |
| DELETE | /processos/{codigo} |
204 No Content | Remove processo |
| Método | URI | Status de Sucesso | Descrição |
|---|---|---|---|
| GET | /etapas |
200 OK | Lista todas as etapas |
| GET | /etapas/{codigo} |
200 OK | Busca etapa por código |
| GET | /etapas/processo/{codProcesso} |
200 OK | Lista etapas de um processo |
| POST | /etapas |
201 Created | Cria nova etapa |
| PUT | /etapas/{codigo} |
201 Created | Atualiza etapa |
| DELETE | /etapas/{codigo} |
204 No Content | Remove etapa |
| Método | URI | Status de Sucesso | Descrição |
|---|---|---|---|
| GET | /execucoes |
200 OK | Lista todas as execuções |
| GET | /execucoes/{codigo} |
200 OK | Busca execução por código |
| GET | /execucoes/usuario/{codUsuario} |
200 OK | Lista execuções de um usuário |
| POST | /execucoes |
201 Created | Cria nova execução |
| PUT | /execucoes/{codigo} |
201 Created | Atualiza execução |
| DELETE | /execucoes/{codigo} |
204 No Content | Remove execução |
| Método | URI | Status de Sucesso | Descrição |
|---|---|---|---|
| POST | /execucoes/iniciar |
201 Created | Inicia execução de um processo para um usuário |
| GET | /execucoes/processo/{codProcesso}/usuario/{codUsuario} |
200 OK | Busca execução atual de um usuário em um processo |
| PUT | /execucoes/{codExecucao}/etapas/{codEtapa}/concluir |
200 OK | Conclui etapa atual e avança para próxima |
| PUT | /execucoes/{codExecucao}/finalizar |
200 OK | Finaliza a execução do processo |
{
"codigo": 1,
"nome": "João Silva",
"email": "joao.silva@flow.com",
"cargo": "Analista de Processos"
}{
"codigo": 1,
"titulo": "Processo de Onboarding",
"descricao": "Processo de integração de novos colaboradores",
"dataCriacao": "2024-01-15"
}{
"codigo": 1,
"codProcesso": 1,
"titulo": "Cadastro de Dados",
"descricao": "Cadastro inicial do novo colaborador no sistema",
"ordem": 1,
"tempoEstimadoMin": 30
}{
"codigo": 1,
"codUsuario": 1,
"codProcesso": 1,
"codEtapa": 1,
"dataExecucao": "2024-01-20",
"status": "CONCLUIDA",
"observacao": "Cadastro realizado com sucesso"
}POST /execucoes/iniciar
{
"codProcesso": 1,
"codUsuario": 1
}O modelo possui 4 entidades principais:
- DDD_USUARIOS: Armazena informações dos usuários do sistema
- DDD_PROCESSOS: Representa os processos operacionais padronizados
- DDD_ETAPAS: Etapas que compõem um processo (relacionamento 1-N com processos)
- DDD_EXECUCOES: Registra as execuções de etapas por usuários (relacionamento N-N entre usuários e etapas)
- Processo 1 — N Etapas: Um processo possui várias etapas
- Etapa 1 — N Execuções: Uma etapa pode ser executada várias vezes
- Usuário 1 — N Execuções: Um usuário pode executar várias etapas
┌─────────────────┐
│ DDD_USUARIOS │
├─────────────────┤
│ codigo (PK) │
│ nome │
│ email │
│ cargo │
└────────┬────────┘
│
│ 1
│
│ N
┌────────▼────────┐
│ DDD_EXECUCOES │
├─────────────────┤
│ codigo (PK) │
│ cod_usuario (FK)│
│ cod_etapa (FK) │
│ data_execucao │
│ status │
│ observacao │
└────────┬────────┘
│
│ N
│
│ 1
┌────────▼────────┐
│ DDD_ETAPAS │
├─────────────────┤
│ codigo (PK) │
│ cod_processo(FK)│
│ titulo │
│ descricao │
│ ordem │
│ tempo_estimado │
└────────┬────────┘
│
│ N
│
│ 1
┌────────▼────────┐
│ DDD_PROCESSOS │
├─────────────────┤
│ codigo (PK) │
│ titulo │
│ descricao │
│ data_criacao │
└─────────────────┘
- UsuarioTO: Modelo de dados para usuários
- ProcessoTO: Modelo de dados para processos
- EtapaTO: Modelo de dados para etapas
- ExecucaoTO: Modelo de dados para execuções
- UsuarioDAO: Acesso a dados de usuários
- ProcessoDAO: Acesso a dados de processos
- EtapaDAO: Acesso a dados de etapas
- ExecucaoDAO: Acesso a dados de execuções
- UsuarioBO: Regras de negócio para usuários
- ProcessoBO: Regras de negócio para processos
- EtapaBO: Regras de negócio para etapas (valida ordem duplicada)
- ExecucaoBO: Regras de negócio para execuções (valida status)
- UsuarioResource: Endpoints REST para usuários
- ProcessoResource: Endpoints REST para processos
- EtapaResource: Endpoints REST para etapas
- ExecucaoResource: Endpoints REST para execuções
- ConnectionFactory: Factory para conexões JDBC com Oracle
- CorsFilter: Filtro CORS para permitir requisições cross-origin
- BusinessException: Exceção de domínio para regras de negócio
- save/update: Não permite ordem duplicada dentro do mesmo processo. Lança
BusinessExceptionse violado.
- save: Status inicial deve ser "PENDENTE" ou "EM_ANDAMENTO". Lança
BusinessExceptionse diferente. - update: Permite mudar para "CONCLUIDA" apenas se já existia e não estiver pendente sem data. Lança
BusinessExceptionse violado.
- Abra o Insomnia
- Crie um novo workspace chamado "FLOW API"
- Método: GET
- URL:
http://localhost:8081/usuarios - Headers: Nenhum necessário
- Método: GET
- URL:
http://localhost:8081/usuarios/1
- Método: POST
- URL:
http://localhost:8081/usuarios - Headers:
Content-Type: application/json
- Body (JSON):
{
"nome": "Pedro Costa",
"email": "pedro.costa@flow.com",
"cargo": "Desenvolvedor"
}- Método: PUT
- URL:
http://localhost:8081/usuarios/1 - Headers:
Content-Type: application/json
- Body (JSON):
{
"nome": "João Silva Atualizado",
"email": "joao.silva@flow.com",
"cargo": "Analista Sênior"
}- Método: DELETE
- URL:
http://localhost:8081/usuarios/1
Repita o mesmo padrão para:
/processos/etapas/execucoes
- Método: GET
- URL:
http://localhost:8081/etapas/processo/1
- Método: GET
- URL:
http://localhost:8081/execucoes/usuario/1
Tente criar um usuário sem nome:
{
"email": "teste@flow.com",
"cargo": "Teste"
}Deve retornar 400 Bad Request.
Tente criar duas etapas com a mesma ordem no mesmo processo:
{
"codProcesso": 1,
"titulo": "Etapa Teste",
"ordem": 1,
"tempoEstimadoMin": 30
}Deve retornar 400 Bad Request com mensagem: "Já existe uma etapa com essa ordem para este processo."
Tente criar uma execução com status "CONCLUIDA" diretamente:
{
"codUsuario": 1,
"codEtapa": 1,
"dataExecucao": "2024-01-20",
"status": "CONCLUIDA",
"observacao": "Teste"
}Deve retornar 400 Bad Request com mensagem: "Status inicial deve ser PENDENTE ou EM_ANDAMENTO."
Teste fazer requisições de um frontend em http://localhost:3000 (ou outra porta). O CORS deve permitir as requisições devido ao CorsFilter configurado.
- Todos os endpoints retornam JSON
- Status HTTP seguem o padrão RESTful (200, 201, 204, 400, 404)
- Validações são feitas via Bean Validation
- Regras de negócio são validadas nos BOs
- CORS está habilitado para todas as origens
- O projeto segue estritamente o padrão visto nas aulas, sem tecnologias extras