API para solicitação, aprovação e gestão de reembolsos corporativos.
Desenvolvido por Pedro Ernesto durante o curso Fullstack da Rocketseat.
A API Refund é uma solução RESTful criada para facilitar o processo de reembolso em empresas, permitindo que funcionários solicitem reembolsos, gestores aprovem ou rejeitem pedidos e todos acompanhem o status das solicitações. O sistema conta com autenticação JWT, upload de comprovantes, controle de acesso por perfil e validação robusta de dados.
- Node.js — Ambiente de execução JavaScript no backend.
- Express.js — Framework web para criação das rotas e middlewares.
- Typescript — Tipagem estática para maior segurança e produtividade.
- Prisma ORM — Mapeamento objeto-relacional para acesso ao banco de dados.
- SQLite — Banco de dados leve e prático para desenvolvimento.
- Zod — Validação de dados das requisições.
- JWT (JSON Web Token) — Autenticação e autorização segura.
- Multer — Upload de arquivos (comprovantes).
- Bcrypt — Hash seguro de senhas.
-
Clone o repositório:
git clone https://github.com/Fel1324/ApiRefund.git cd ApiRefund -
Instale as dependências:
npm install
-
Configure o banco de dados e rode as migrations:
npx prisma migrate dev
-
Inicie o servidor em modo desenvolvimento:
npm run dev
src/
├── app.ts
├── server.ts
├── configs/
├── controllers/
├── database/
├── middlewares/
├── providers/
├── routes/
├── types/
└── utils/
prisma/
├── schema.prisma
└── migrations/
tmp/
└── uploads/
- Usuários: Funcionários (
employee) e Gestores (manager) - Autenticação: JWT via header
Authorization: Bearer <token> - Controle de acesso: Middlewares garantem que apenas usuários autorizados acessem cada rota.
POST /users— Cadastro de usuárioPOST /sessions— Login (retorna token JWT)POST /refunds— Criar solicitação de reembolso (employee)GET /refunds— Listar solicitações (manager)GET /refunds/:id— Detalhar solicitação (employee/manager)POST /uploads— Upload de comprovante (employee)GET /uploads/:filename— Acessar comprovante enviado
Cadastro de Usuário
POST /users
{
"name": "João Silva",
"email": "joao@email.com",
"password": "minhasenha123",
"role": "employee"
}Login
POST /sessions
{
"email": "joao@email.com",
"password": "minhasenha123"
}Criar Solicitação de Reembolso
POST /refunds
Authorization: Bearer <token>
{
"name": "Almoço reunião",
"category": "food",
"amount": 75.50,
"filename": "<nome-do-arquivo-do-upload>"
}