No description
  • TypeScript 74.1%
  • HTML 19.2%
  • JavaScript 4.2%
  • CSS 2.4%
Find a file
Ruan Lopes 0108f80155 testes
2025-11-21 14:22:50 -04:00
coverage testes 2025-11-21 14:22:50 -04:00
src testes 2025-11-21 14:22:50 -04:00
.dockerignore first commit ; migrado do GitHub 2025-11-21 14:09:46 -04:00
.DS_Store testes 2025-11-21 14:22:50 -04:00
.env.example first commit ; migrado do GitHub 2025-11-21 14:09:46 -04:00
.gitignore first commit ; migrado do GitHub 2025-11-21 14:09:46 -04:00
docker-compose.yml first commit ; migrado do GitHub 2025-11-21 14:09:46 -04:00
Dockerfile first commit ; migrado do GitHub 2025-11-21 14:09:46 -04:00
package-lock.json testes 2025-11-21 14:22:50 -04:00
package.json testes 2025-11-21 14:22:50 -04:00
README.md first commit ; migrado do GitHub 2025-11-21 14:09:46 -04:00
tsconfig.json first commit ; migrado do GitHub 2025-11-21 14:09:46 -04:00
vitest.config.ts first commit ; migrado do GitHub 2025-11-21 14:09:46 -04:00

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)

  1. Clone o projeto
git clone https://gitlab.fslab.dev/R.Lopes/desafio-ifrodados.git
cd desafio-ifrodados
  1. 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

  1. Clone e instale as dependências
git clone https://gitlab.fslab.dev/R.Lopes/desafio-ifrodados.git
cd desafio-ifrodados
npm install
  1. Configure as variáveis de ambiente Crie um arquivo .env na raiz do projeto:
PORT=1350
DB_URL=mongodb://localhost:27017/desafio-ifro
JWT_SECRET=sua-chave-secreta-super-segura-mude-em-producao
  1. Inicie o MongoDB (se não estiver usando Docker)
# Certifique-se de que o MongoDB está rodando na porta 27017
  1. Execute o projeto
# Desenvolvimento com reload automático
npm run dev

# Ou em produção
npm start
  1. 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ínima
    • maxAvaliacao - 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