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

https://github.com/henriquesebastiao/dotum

Dotum, sistema de contas a pagar e contas a receber
https://github.com/henriquesebastiao/dotum

api api-rest docker fastapi postgresql pytest sql sqlalchemy swagger

Last synced: about 2 months ago
JSON representation

Dotum, sistema de contas a pagar e contas a receber

Awesome Lists containing this project

README

          

# Dotum - Sistema de contas a pagar e contas a receber

[![CI](https://github.com/henriquesebastiao/dotum/actions/workflows/test.yml/badge.svg)](https://github.com/henriquesebastiao/dotum/actions/workflows/test.yml)
[![coverage](https://coverage-badge.samuelcolvin.workers.dev/henriquesebastiao/dotum.svg)](https://coverage-badge.samuelcolvin.workers.dev/redirect/henriquesebastiao/dotum)
[![Static Badge](https://img.shields.io/badge/status-stable-%232FBF50)](https://github.com/henriquesebastiao/dotum/)
[![Website](https://img.shields.io/website?url=https%3A%2F%2Fdotum.henriquesebastiao.com%2F)](https://dotum.henriquesebastiao.com/)
[![GitHub Release](https://img.shields.io/github/v/release/henriquesebastiao/dotum?color=blue)](https://github.com/henriquesebastiao/dotum/releases)
[![GitHub License](https://img.shields.io/github/license/henriquesebastiao/dotum?color=blue)](https://github.com/henriquesebastiao/dotum/blob/main/LICENSE)

Este projeto é uma solução para um desafio de programação back-end, cujo objetivo é desenvolver uma aplicação para o controle de contas a pagar e contas a receber. A proposta foca na construção de uma lógica sólida, estrutura de código bem organizada e cumprimento dos requisitos funcionais.

Acesso do cliente web da aplicação em [dotum-web.henriquesebastiao.com](https://dotum-web.henriquesebastiao.com).

Acesse uma demonstração da API com Swagger em [dotum.henriquesebastiao.com](https://dotum.henriquesebastiao.com).

### Funcionalidades

- Cadastro de contas: permite lançar contas a pagar ou a receber, com valor, descrição e data de vencimento.
- Listagem de contas: exibe todas as contas registradas, com detalhes como valor, descrição, vencimento e status (pago ou pendente).
- Total de contas a pagar: soma o valor de todas as contas a pagar pendentes.
- Total de contas a receber: soma o valor de todas as contas a receber pendentes.
- Total geral de contas: calcula o total combinando as contas a pagar e a receber.
- Autenticação de usuários com JWT (JSON Web Token).
- Criptografiia de senha com Argon2 no banco de dados.

### Tecnologias utilizadas

- Python
- FastAPI
- PostgreSQL
- Docker
- SQLAlchemy
- Pydantic
- PyTest
- GitHub Actions

### Como executar o projeto

1. Clone o repositório e entre nele com o seguinte comando:

```shell
git clone https://github.com/henriquesebastiao/dotum && cd dotum
```

2. Crie um arquivo `.env` que conterá as variáveis de ambiente exigidas pela aplicação, você pode fazer isso apenas copiando o arquivo de exemplo:

```shell
cat .env.example > .env
```

3. Agora execute o docker compose e toda aplicação será construída e iniciada em modo de desenvolvimento 🚀

```shell
docker compose up -d
```

Pronto! Você já pode abrir seu navegador e acessar as seguintes URLs:

- Documentação interativa automática com Swagger UI (do backend OpenAPI): http://localhost:9003
- Redoc, uma versão mais legível da documentação: http://localhost:9003/redoc

### Executando os testes

Para executar os testes com PyTest execute o seguinte comando:

```shell
make test
```

## Exemplos de uso da API

A seguir, alguns exemplos de requisições para consumir os principais endpoints da API do sistema de contas.

### Autenticação (Login)

```http
POST /token
Content-Type: application/x-www-form-urlencoded

username=joao123&password=senha_segura
```

#### Resposta

```json
{
"access_token": "seu_token_de_acesso_aqui",
"token_type": "bearer"
}
```

### Cria usuário

```http
POST /user/
Content-Type: application/json

{
"username": "joao123",
"email": "joao@example.com",
"first_name": "João",
"last_name": "Silva",
"password": "senha_segura"
}
```

### Cadastrar conta

```http
POST /account/
Authorization: Bearer seu_token
Content-Type: application/json

{
"value": 200.0,
"description": "Pagamento de fornecedor",
"due_date": "2025-07-31",
"account_type": "payable",
"paid": false
}
```

### Listas contas

```http
GET /account/
Authorization: Bearer seu_token
```

### Atualizar conta

```http
PATCH /account/{account_id}
Authorization: Bearer seu_token
Content-Type: application/json

{
"paid": true
}
```

### Deletar conta

```http
DELETE /account/{account_id}
Authorization: Bearer seu_token
```

### Total de contas a pagar

```http
GET /account/total-accounts-payable
Authorization: Bearer seu_token
```

### Total de contas a receber

```http
GET /account/total-accounts-receivable
Authorization: Bearer seu_token
```

### Total geral de contas

```http
GET /account/grand-total-of-accounts
Authorization: Bearer seu_token
```