No description
- TypeScript 99.7%
- JavaScript 0.2%
fix: updating seed_inscricao Closes #10 See merge request matheus.lucas.batista/ifro-dados-selecao-api!10 |
||
|---|---|---|
| src | ||
| .dockerignore | ||
| .editorconfig | ||
| .env.example | ||
| .gitignore | ||
| docker-compose.yml | ||
| Dockerfile | ||
| jest.config.mjs | ||
| package.json | ||
| README.md | ||
| server.ts | ||
| tsconfig.json | ||
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.
Popular o banco de dados
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
Popular o banco de dados
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 loginPOST /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çãoGET /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