An open API service indexing awesome lists of open source software.

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.

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.