- TypeScript 74.1%
- HTML 19.2%
- JavaScript 4.2%
- CSS 2.4%
| coverage | ||
| src | ||
| .dockerignore | ||
| .DS_Store | ||
| .env.example | ||
| .gitignore | ||
| docker-compose.yml | ||
| Dockerfile | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
| vitest.config.ts | ||
Desafio IFRO Dados
Sistema de gestão de projetos e candidatos desenvolvido para o processo seletivo do Projeto IFRO Dados.
Instruções de Execução
Opção 1: Usar Docker Compose (Recomendado)
- Clone o projeto
git clone https://gitlab.fslab.dev/R.Lopes/desafio-ifrodados.git
cd desafio-ifrodados
- Inicie os serviços
docker-compose up --build
O servidor estará disponível em http://localhost:1350
A documentação Swagger estará em http://localhost:1350/api-docs
Opção 2: Executar Localmente
- Clone e instale as dependências
git clone https://gitlab.fslab.dev/R.Lopes/desafio-ifrodados.git
cd desafio-ifrodados
npm install
- Configure as variáveis de ambiente
Crie um arquivo
.envna raiz do projeto:
PORT=1350
DB_URL=mongodb://localhost:27017/desafio-ifro
JWT_SECRET=sua-chave-secreta-super-segura-mude-em-producao
- Inicie o MongoDB (se não estiver usando Docker)
# Certifique-se de que o MongoDB está rodando na porta 27017
- Execute o projeto
# Desenvolvimento com reload automático
npm run dev
# Ou em produção
npm start
- Popular o banco com dados de teste (opcional)
npm run seed
Endpoints da API
Todos os endpoints requerem autenticação via JWT (exceto /auth/login e GET /)
🔐 Autenticação
POST /api/auth/login
Realiza login e retorna token JWT
- Entrada:
{
"login": "usuario@email.com",
"senha": "senha123"
}
- Saída: Token JWT e dados do usuário
- Sem autenticação
POST /api/auth/logout
Realiza logout (invalida a sessão)
- Requer: Token JWT
- Saída: Mensagem de sucesso
POST /api/auth/invalidar
Invalida um token manualmente
- Entrada:
{
"token": "token-jwt-aqui"
}
- Saída: Mensagem de sucesso
👥 Usuários
POST /api/usuario
Cria um novo usuário
- Permissão: Coordenador e Avaliador
- Entrada:
{
"nome": "Ana Costa",
"login": "ana.costa@ifro.edu.br",
"senha": "Senha@123",
"funcao": "AVALIADOR"
}
- Saída: Usuário criado com ID
GET /api/usuario
Lista todos os usuários
- Permissão: Coordenador e Avaliador
- Parâmetros: Nenhum
- Saída: Array de usuários
PATCH /api/usuario/:id
Atualiza um usuário
- Permissão: Coordenador e Avaliador
- Entrada: Campos a atualizar (nome, senha, funcao)
- Saída: Usuário atualizado
DELETE /api/usuario/:id
Deleta um usuário
- Permissão: Apenas Coordenador
- Saída: Mensagem de sucesso
📋 Projetos
POST /api/projeto
Cria um novo projeto
- Permissão: Apenas Coordenador
- Entrada:
{
"nome": "Sistema de Gestão Acadêmica",
"periodoDuracao": 12,
"dataLimiteInscricao": "2025-12-31T23:59:59.000Z",
"instituicaoCliente": "IFRO - Instituto Federal de Rondônia",
"coordenador": "Prof. Carlos Silva"
}
- Saída: Projeto criado com ID
GET /api/projeto
Lista todos os projetos
- Permissão: Coordenador e Avaliador
- Saída: Array de projetos
PATCH /api/projeto/:id
Atualiza um projeto
- Permissão: Apenas Coordenador
- Entrada: Campos a atualizar
- Saída: Projeto atualizado
DELETE /api/projeto/:id
Deleta um projeto
- Permissão: Apenas Coordenador
- Saída: Mensagem de sucesso
🎓 Candidatos
GET /api/candidato
Lista todos os candidatos com filtros opcionais
- Permissão: Coordenador e Avaliador
- Query Parameters:
nome- Filtro por nome (busca parcial)email- Filtro por email (busca parcial)estudante- Filtro por estudante (true/false)statusInscricao- Filtro por status (Pendente, Aprovado, Rejeitado)minAvaliacao- Avaliação mínimamaxAvaliacao- Avaliação máxima
- Saída: Array de candidatos
POST /api/candidato
Cria um novo candidato
- Entrada:
{
"nome": "Maria Santos",
"email": "maria.santos@example.com",
"estudante": true,
"projetosAcademicos": [
{
"nome": "Sistema Web",
"descricao": "Sistema de gestão de vendas",
"duracao": 6,
"links": ["https://github.com/usuario/projeto"]
}
],
"projetosProfissionais": []
}
- Saída: Candidato criado com ID
PATCH /api/candidato/:id
Atualiza dados de um candidato
- Permissão: Coordenador e Avaliador
- Entrada: Campos a atualizar
- Saída: Candidato atualizado
PATCH /api/candidato/avaliar/:id
Avalia um candidato (atribui nota de 0 a 10)
- Permissão: Coordenador e Avaliador
- Entrada:
{
"avaliacao": 8.5
}
- Saída: Candidato com avaliação atualizada
PATCH /api/candidato/status/:id
Altera o status da inscrição do candidato
- Permissão: Apenas Coordenador
- Entrada:
{
"statusInscricao": "Aprovado"
}
- Status válidos: Pendente, Aprovado, Rejeitado
- Saída: Candidato com status atualizado
DELETE /api/candidato/:id
Deleta um candidato
- Permissão: Apenas Coordenador
- Saída: Mensagem de sucesso
Documentação Swagger
A documentação interativa da API está disponível em:
http://localhost:1350/api-docs
Lá você pode testar todos os endpoints diretamente!
Scripts Disponíveis
npm run dev # Inicia em modo desenvolvimento com reload
npm start # Inicia em modo produção
npm run seed # Popular banco de dados com dados de teste
npm run swagger # Gera documentação Swagger
npm run test # Executa os testes
npm run clean # Remove node_modules e dist
Decisões Técnicas
Node.js + TypeScript
Escolhi Node.js pela facilidade de desenvolver APIs REST e TypeScript para ter validação de tipos e evitar erros em tempo de desenvolvimento.
Express
Framework simples e direto para criar APIs. Tem boa documentação e muita comunidade.
MongoDB + Mongoose
MongoDB é flexível para projetos em evolução. O Mongoose facilita a definição de modelos e queries de forma type-safe.
JWT
Autenticação com JWT por ser simples de implementar e manter.
Docker
Facilita a instalação do MongoDB e padroniza o ambiente de desenvolvimento.
Arquitetura em Camadas
Separei o código em camadas (controller → service → repository) para melhor organização e manutenibilidade.
Swagger/Swagger UI
Documentação automática e interativa da API.
Tecnologias
- Node.js - Runtime JavaScript
- TypeScript - Linguagem com tipagem
- Express - Framework web
- MongoDB - Banco de dados NoSQL
- Mongoose - ODM para MongoDB
- JWT - Autenticação
- Docker - Containerização
- Swagger - Documentação da API
- Vitest - Framework de testes