https://github.com/joschonarth/refund-api
💸 A RESTful API for controlling and managing refund requests, built with Node.js, TypeScript, and Express.
https://github.com/joschonarth/refund-api
bcrypt cors dotenv eslint express jwt multer nodejs prisma refund sqlite typescript zod
Last synced: about 2 months ago
JSON representation
💸 A RESTful API for controlling and managing refund requests, built with Node.js, TypeScript, and Express.
- Host: GitHub
- URL: https://github.com/joschonarth/refund-api
- Owner: joschonarth
- Created: 2025-03-27T23:17:51.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-04-10T19:05:15.000Z (about 1 year ago)
- Last Synced: 2026-01-03T13:16:35.466Z (5 months ago)
- Topics: bcrypt, cors, dotenv, eslint, express, jwt, multer, nodejs, prisma, refund, sqlite, typescript, zod
- Language: TypeScript
- Homepage: https://github.com/joschonarth/refund-web
- Size: 270 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Refund API
💸 Uma API RESTful para controle e gerenciamento de pedidos de reembolso, construída com Node.js, TypeScript e Express.
## 📑 Índice
- [📖 Visão Geral](#-visão-geral)
- [🛠️ Tecnologias Utilizadas](#️-tecnologias-utilizadas)
- [⚙️ Funcionalidades](#️-funcionalidades)
- [🚀 Como Executar o Projeto](#-como-executar-o-projeto)
- [📋 Pré-requisitos](#-pré-requisitos)
- [🔧 Instalação](#-instalação)
- [▶️ Execução](#️-execução)
- [📡 Rotas da Aplicação](#-rotas-da-aplicação)
- [🌐 Front-End](#-front-end)
- [🤝 Contribuições](#-contribuições)
- [⭐ Apoie este Projeto](#-apoie-este-projeto)
- [📞 Contato](#-contato)
## 📖 Visão Geral
Refund é uma aplicação completa para gerenciamento de pedidos de reembolso, permitindo que usuários façam upload de comprovantes e acompanhem seus pedidos. Este repositório contém o back-end da aplicação, uma API RESTful robusta e segura, construída com Node.js e TypeScript, utilizando uma stack moderna e modularizada.
## 🛠️ Tecnologias Utilizadas
- 🟩 Node.js - Ambiente de execução JavaScript no servidor.
- 🟦 TypeScript - Superset do JavaScript com tipagem estática.
- ⚙️ Express - Framework web minimalista e flexível.
- 🧩 Prisma - ORM moderno para manipulação de banco de dados.
- 🗃️ SQLite - Banco de dados leve e embutido.
- 💎 Zod - Validação de esquemas de dados.
- 🔐 JWT - Autenticação via tokens seguros.
- 🔑 Bcrypt - Criptografia de senhas.
- 🌐 CORS - Compartilhamento de recursos entre origens.
- 📤 Multer - Upload de arquivos multipart/form-data.
- 🌱 Dotenv - Gerenciamento de variáveis de ambiente.
- 🧹 ESLint - Padronização e análise de código.
## ⚙️ Funcionalidades
- **👤 Criar usuário**: Registra um novo usuário na aplicação.
- **🔐 Login**: Autentica um usuário e retorna um token JWT.
- **💸 Criar pedido de reembolso**: Cadastra uma nova solicitação com dados e comprovante.
- **📋 Listar reembolsos**: Retorna todos os reembolsos solicitados pelo usuário.
- **🔎 Visualizar reembolso**: Detalha um reembolso específico.
- **📤 Enviar comprovante**: Realiza upload de arquivos como comprovantes de reembolso.
- **🧾 Buscar comprovante**: Retorna o arquivo enviado.
## 🚀 Como Executar o Projeto
### 📋 Pré-requisitos
- 🟩 [Node.js 20](https://nodejs.org/en/download/)
- 📦 [npm 10](https://www.npmjs.com/)
### 🔧 Instalação
1. Clone o repositório:
```bash
git clone https://github.com/joschonarth/refund-api.git
```
2. Acesse o diretório do projeto:
```bash
cd refund-api
```
3. Instale as dependências:
```bash
npm install
```
### ▶️ Execução
1. Crie um arquivo `.env` a partir do exemplo:
```bash
cp .env.example .env
```
Edite o arquivo `.env` para configurar as variáveis de ambiente necessárias.
2. Execute as migrações do Prisma:
```bash
npx prisma migrate dev
```
3. Inicie a API:
```bash
npm run dev
```
A aplicação estará disponível em: [http://localhost:3333](http://localhost:3333)
## 📡 Rotas da Aplicação
### 👤 Criar Usuário
Registra um novo usuário no sistema.
- **Método:** ``POST``
- **URL:** `/users`
- **Role:** `employee`
- **Exemplo de Requisição:**
```json
{
"name": "John Doe",
"email": "johndoe@example.com",
"password": "123456"
}
```
### 🔐 Login
Autentica o usuário e retorna um token JWT.
- **Método:** ``POST``
- **URL:** `/sessions`
- **Role:** `employee`
- **Exemplo de Requisição:**
```json
{
"email": "johndoe@example.com",
"password": "123456"
}
```
- **Exemplo de Resposta:**
```json
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": {
"id": "eac522fb-6c33-4676-9925-22fd483e45bf",
"name": "John Doe",
"email": "johndoe@example.com",
"role": "employee",
"createdAt": "2025-03-29T19:27:29.365Z",
"updatedAt": "2025-03-29T19:27:29.365Z"
}
}
```
### 💸 Criar Reembolso
Cadastra uma nova solicitação de reembolso.
- **Método:** ``POST``
- **URL:** `/refunds`
- **Autenticação:** Requer token JWT no header `Authorization: Bearer`
- **Role:** `employee`
- **Exemplo de Requisição:**
```json
{
"name": "Reembolso Uber",
"category": "transport",
"amount": 45.90,
"filename": "8a744cc981b36e5c2734-comprovante.png"
}
```
- **Exemplo de Resposta:**
```json
{
"id": "65cc4911-0868-4954-aef8-f058e410d513",
"name": "Reembolso Uber",
"amount": 45.9,
"category": "transport",
"filename": "8a744cc981b36e5c2734-comprovante.png",
"userId": "de837ea6-8080-4506-9e5a-0f7e6df7d1cf",
"createdAt": "2025-04-09T22:21:51.700Z",
"updatedAt": "2025-04-09T22:21:51.700Z"
}
```
### 📋 Listar Reembolsos
Retorna todos os reembolsos do usuário autenticado.
- **Método:** ``GET``
- **URL:** `/refunds`
- **Autenticação:** Requer token JWT no header `Authorization: Bearer`
- **Role:** `manager`
- **Exemplo de Resposta:**
```json
{
"refunds": [
{
"id": "65cc4911-0868-4954-aef8-f058e410d513",
"name": "Reembolso Uber",
"amount": 45.9,
"category": "transport",
"filename": "8a744cc981b36e5c2734-comprovante.png",
"userId": "de837ea6-8080-4506-9e5a-0f7e6df7d1cf",
"createdAt": "2025-04-09T22:21:51.700Z",
"updatedAt": "2025-04-09T22:21:51.700Z",
"user": {
"id": "eac522fb-6c33-4676-9925-22fd483e45bf",
"name": "John Doe",
"email": "johndoe@example.com",
"role": "employee",
"createdAt": "2025-03-29T19:27:29.365Z",
"updatedAt": "2025-03-29T19:27:29.365Z"
}
}
],
"pagination": {
"page": 1,
"perPage": 10,
"totalRecords": 1,
"totalPages": 1
}
}
```
### 🔎 Ver Reembolso
Exibe detalhes de um reembolso específico.
- **Método:** GET
- **URL:** `/refund/:id`
- **Autenticação:** Requer token JWT no header `Authorization: Bearer`
- **Role:** `manager`
- **Exemplo de Resposta:**
```json
{
"id": "65cc4911-0868-4954-aef8-f058e410d513",
"name": "Reembolso Uber",
"amount": 45.9,
"category": "transport",
"filename": "8a744cc981b36e5c2734-comprovante.png",
"userId": "de837ea6-8080-4506-9e5a-0f7e6df7d1cf",
"createdAt": "2025-04-09T22:21:51.700Z",
"updatedAt": "2025-04-09T22:21:51.700Z",
"user": {
"id": "eac522fb-6c33-4676-9925-22fd483e45bf",
"name": "John Doe",
"email": "johndoe@example.com",
"role": "employee",
"createdAt": "2025-03-29T19:27:29.365Z",
"updatedAt": "2025-03-29T19:27:29.365Z"
}
}
```
### 📤 Enviar Comprovante
Faz upload de um comprovante de reembolso.
- **Método:** POST
- **URL:** `/uploads`
- **Formato:** `multipart/form-data` com campo `file`
- **Autenticação:** Requer token JWT no header `Authorization: Bearer`
- **Role:** `employee`
- **Exemplo de Resposta:**
```json
{
"filename": "8a744cc981b36e5c2734-comprovante.png"
}
```
### 📁 Buscar Comprovante
Busca e retorna um comprovante pelo seu ID.
- **Método:** GET
- **URL:** `/uploads/:id`
- **Autenticação:** Requer token JWT no header `Authorization: Bearer`
- **Role:** `manager`
## 🌐 Front-End
A interface web do Refund oferece uma experiência intuitiva, permitindo que usuários realizem solicitações de reembolso e que gerentes acompanhem e gerenciem as solicitações com facilidade.
👉 Acesse o repositório do front-end [aqui](https://github.com/joschonarth/refund-web).
## 🤝 Contribuições
Contribuições são bem-vindas! Sinta-se à vontade para abrir issues ou pull requests com melhorias ou correções.
## ⭐ Apoie este Projeto
Se este projeto te ajudou ou te inspirou de alguma forma, não esqueça de deixar uma ⭐ no repositório! Isso faz toda a diferença! 🚀
## 📞 Contato
[](https://www.linkedin.com/in/joschonarth/)
[](mailto:joschonarth@gmail.com)