https://github.com/patricks-js/simplified-payment-api
A modular and scalable API for financial transactions and transaction statistics. Built with TypeScript for performance and reliability.
https://github.com/patricks-js/simplified-payment-api
design-patterns mongodb nestjs postgresql redis restful-api solid typescript
Last synced: 3 months ago
JSON representation
A modular and scalable API for financial transactions and transaction statistics. Built with TypeScript for performance and reliability.
- Host: GitHub
- URL: https://github.com/patricks-js/simplified-payment-api
- Owner: patricks-js
- License: mit
- Created: 2025-01-24T02:47:46.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-01-24T03:39:58.000Z (over 1 year ago)
- Last Synced: 2025-01-24T04:23:25.684Z (over 1 year ago)
- Topics: design-patterns, mongodb, nestjs, postgresql, redis, restful-api, solid, typescript
- Language: TypeScript
- Homepage:
- Size: 79.1 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# š Simplified Payment API
Este é um desafio de backend que consiste em desenvolver uma API RESTful para gerenciamento de movimentação financeira de usuÔrios. A aplicação permite que os usuÔrios depositem dinheiro em suas carteiras e realizem transferências entre si de forma segura e eficiente.
## š Tecnologias Utilizadas
- **[NestJS](https://nestjs.com/)** - Framework TypeScript para desenvolvimento de APIs escalƔveis.
- **[TypeORM](https://typeorm.io/)** - ORM para interação com bancos de dados relacionais.
- **[PostgreSQL](https://www.postgresql.org/)** - Banco de dados utilizado na aplicação.
- **[Docker](https://www.docker.com/)** - Containerização do ambiente.
- **[Swagger (OpenAPI)](https://swagger.io/)** - Documentação da API.
- **[Vitest](https://vitest.dev/)** - Testes automatizados.
---
## āļø Funcionalidades
- **Cadastro de UsuƔrios**: Permite que usuƔrios comuns e lojistas se cadastrem.
- **Depósito em Carteira**: UsuÔrios podem adicionar saldo às suas carteiras.
- **Transferência de Valores**: UsuÔrios comuns podem transferir dinheiro para outros usuÔrios ou lojistas.
- **Consulta de EstatĆsticas**: Permite visualizar transferĆŖncias recentes.
- **Integração com Serviços Externos**:
- Validação de transações via serviço autorizador.
- Notificação de transferências via serviço externo.
---
## š Como Executar o Projeto
### PrƩ-requisitos
Antes de comeƧar, certifique-se de ter os seguintes itens instalados:
- **[Node.js](https://nodejs.org/)** (v20+)
- **[Docker e Docker Compose](https://www.docker.com/)**
### Configuração
1. **Clone o repositório**:
```bash
git clone https://github.com/patricks-js/simplified-payment-api.git
cd simplified-payment-api
```
2. **Configure as variƔveis de ambiente**:
Crie um arquivo `.env` na raiz do projeto e adicione:
```bash
DATABASE_URL=postgres://user:password@localhost:5432/simplified_payment
AUTH_SERVICE_URL=https://util.devi.tools/api/v2/authorize
NOTIFICATION_SERVICE_URL=https://util.devi.tools/api/v1/notify
```
3. **Suba os containers do banco de dados**:
```bash
docker-compose up -d
```
4. **Instale as dependĆŖncias**:
```bash
pnpm install
```
5. **Execute as migraƧƵes do banco de dados**:
```bash
pnpm db:migrate
```
6. **Inicie a aplicação**:
```bash
pnpm start:dev
```
7. **Acesse a documentação da API** via Swagger:
- `http://localhost:3000/api/docs`
---
## š Endpoints Principais
### Cadastro de UsuƔrio
**POST `/auth/register`**
- Registra um usuƔrio no sistema.
- Tipos de usuƔrios: **common** (pode transferir e receber) e **merchant** (somente recebe).
š **Exemplo de request**:
```json
{
"name": "João da Silva",
"document": "12345678900",
"email": "joao@exemplo.com",
"password": "senhaSegura123",
"type": "common"
}
```
---
### Depósito em Carteira
**POST `/wallets/deposit`**
- Adiciona saldo à carteira do usuÔrio.
š **Exemplo de request**:
```json
{
"userId": 4,
"amount": 150.0
}
```
---
### TransferĆŖncia de Valores
**POST `/transactions/perform`**
- Realiza transferência de dinheiro entre usuÔrios.
š **Exemplo de request**:
```json
{
"amount": 100.0,
"senderId": 4,
"receiverId": 15
}
```
ā
**Fluxo da TransferĆŖncia**:
1. Validação dos dados.
2. Verificação de saldo.
3. Consulta ao serviƧo autorizador externo.
4. Transação financeira segura.
5. Notificação ao recebedor.
---
### Consulta de Saldo
**GET `/users/balance`**
š **Exemplo de resposta**:
```json
{
"userId": 4,
"balance": 350.0
}
```
---
### EstatĆsticas de TransferĆŖncias
**GET `/estatistica`**
š **Exemplo de resposta**:
```json
{
"count": 10,
"sum": 1000.0,
"avg": 100.0,
"min": 50.0,
"max": 200.0
}
```
---
## ā
Testes e Qualidade de Código
O projeto inclui testes unitÔrios e de integração para garantir a qualidade do código.
### Executar testes
```bash
npm run test
```
### Executar testes com cobertura
```bash
npm run test:cov
```
---
## š LicenƧa
DistribuĆdo sob a licenƧa MIT. Veja o arquivo [LICENSE](./LICENSE) para mais informaƧƵes.