No description
  • TypeScript 99.7%
  • JavaScript 0.2%
Find a file
2025-11-22 00:28:46 +00:00
src fix: updating seed_inscricao 2025-11-21 20:28:20 -04:00
.dockerignore docker: implementing container to the application 2025-11-21 15:46:31 -04:00
.editorconfig feat: initial commit 2025-11-18 14:43:49 -04:00
.env.example docker: implementing container to the application 2025-11-21 15:46:31 -04:00
.gitignore feat: initial commit 2025-11-18 14:43:49 -04:00
docker-compose.yml docker: implementing container to the application 2025-11-21 15:46:31 -04:00
Dockerfile docker: implementing container to the application 2025-11-21 15:46:31 -04:00
jest.config.mjs docs: adding description to usuarios 2025-11-21 14:46:50 -04:00
package.json docker: implementing container to the application 2025-11-21 15:46:31 -04:00
README.md Update README.md 2025-11-21 21:08:18 +00:00
server.ts feat: implementing the initial structure to the project 2025-11-18 19:35:56 -04:00
tsconfig.json feat: implementing jest setup 2025-11-20 22:42:13 -04:00

IFRO Dados Seleção

API REST para gerenciamento de inscrições do Instituto Federal de Rondônia.

Sobre o Projeto

Esta API foi desenvolvida para gerenciar o processo de inscrições de candidatos, permitindo:

  • Cadastro e gestão de usuários com diferentes níveis de permissão
  • Registro de inscrições de candidatos
  • Avaliação de inscrições por avaliadores
  • Aprovação/reprovação de candidatos por coordenadores
  • Documentação interativa com Swagger

Decisões Técnicas

Arquitetura e Padrões

Arquitetura em Camadas

  • Optei o padrão de arquitetura em camadas (Controller → Service → Repository) para:
    • Separação clara de responsabilidades
    • Facilitar manutenção e testes unitários
    • Permitir reutilização de lógica de negócio

Segurança

  • bcrypt: Hash de senhas com salt, resistente a ataques de força bruta
  • JWT: Tokens com expiração e refresh tokens para sessões seguras
  • Middleware de permissões: Sistema de roles (Admin, Coordenador, Avaliador)
  • Validação de entrada: Zod previne injeção e dados inválidos
  • Variáveis de ambiente: Credenciais e secrets nunca commitadas no código

Tecnologias Utilizadas

  • TypeScript e Node.js
  • Express - Framework web
  • MongoDB com Mongoose - Banco de dados
  • JWT - Autenticação
  • bcrypt - Hash de senhas
  • Zod - Validação de dados
  • Swagger - Documentação da API
  • Jest - Testes

Executando a Aplicação

Opção 1: Rodando com Docker (Recomendado)

Pré-requisitos

  • Docker
  • Docker Compose

Iniciar a aplicação

# Clone o repositório
git clone <https://gitlab.fslab.dev/matheus.lucas.batista/ifro-dados-selecao-api.git>

# Acesse o diretório do projeto
cd ifro-dados-selecao-api

# Construir e iniciar os containers
docker compose up --build -d

Link da API: http://localhost:5011.

docker compose exec app npm run seed

Executar testes no container

docker compose exec app npm run test

Parar os containers

docker compose down

Parar e remover volumes

docker compose down -v

Opção 2: Rodando Localmente (sem Docker)

Pré-requisitos

  • Node.js 18+
  • MongoDB instalado e rodando localmente
  • npm ou yarn

Configuração

# Clone o repositório
git clone <https://gitlab.fslab.dev/matheus.lucas.batista/ifro-dados-selecao-api.git>

# Acesse o diretório do projeto
cd ifro-dados-selecao-api

# Instale as dependências
npm install

# Configure o arquivo .env
cp .env.example .env
# Edite o .env com suas configurações locais

Desenvolvimento

npm run dev
npm run seed

Executar testes

npm run test

Documentação da API

A documentação swagger da API está disponível em:

http://localhost:5011/api-docs

Endpoints

Autenticação

  • POST /login - Realizar login
  • POST /logout - Realizar logout (requer autenticação)

Usuários

  • POST /usuario - Criar usuário (requer autenticação)
  • GET /usuario - Listar usuários (requer autenticação)
  • GET /usuario/:id - Obter usuário por ID (requer autenticação)
  • DELETE /usuario/:id - Excluir usuário (requer autenticação)

Inscrições

  • POST /inscricao - Criar inscrição
  • GET /inscricao - Listar inscrições (requer autenticação)
  • GET /inscricao/:id - Obter inscrição por ID (requer autenticação)
  • GET /inscricao/avaliadas - Listar inscrições avaliadas (requer autenticação)
  • PATCH /inscricao/:id/avaliar - Avaliar inscrição (requer autenticação)
  • PATCH /inscricao/:id/aprovar - Aprovar inscrição (requer autenticação)

Estrutura do projeto

src/
├── app.ts                 # Configuração principal da aplicação
├── server.ts              # Ponto de entrada do servidor
├── config/                # Configurações
│   └── DbConnect.ts       # Conexão com banco de dados
├── controller/            # Controladores da API
├── docs/                  # Documentação Swagger
│   ├── paths/            # Definições dos endpoints
│   ├── schemas/          # Definições dos schemas
│   └── utils/            # Utilitários da documentação
├── middlewares/          # Middlewares personalizados
├── models/               # Modelos do MongoDB
├── repository/           # Camada de acesso a dados
├── routes/               # Definição das rotas
├── service/              # Lógica de negócio
├── test/                 # Testes
└── utils/                # Utilitários diversos

Papéis do usuário

  • Administrador: Acesso completo ao sistema
  • Coordenador: Listagem de usuários e inscrições e aprovação de inscrições
  • Avaliador: Listagem e avaliação de inscrições