Controlar os gastos de acordo com a renda disponível é fator fundamental para organização do Orçamento Doméstico, uma etapa importante nesse processo é manter um histórico detalhado de despesas, principalmente para os pequenos gastos diários. Nesse intuito você deve construir uma API REST que permita armazenar e exibir registros de despesas.
Orientações gerais:
- Uma DESPESA deve possuir os seguintes dados: Valor, Descrição, Data, Tipo de Pagamento e Categoria;
- Os TIPOS DE PAGAMENTO são: Dinheiro, Débito, Crédito, Pix;
- A listagem de DESPESAS deve mostrar apenas os registros do mês vigente;
- Não será permitido a utilização de ORMs;
- Mantenha uma separação adequada de responsabilidades;
- Utilize conceitos Programação Orientada a Objetos quando achar pertinente;
A API deverá disponibilizar um endpoint que permita o cadastro e exibição de despesas:
Verbo HTTP | Path | Função |
---|---|---|
GET | /api/despesas | Listar despesas |
POST | /api/despesas | Cadastrar despesa |
O JSON enviado para cadastrar uma despesa deve possuir o seguinte formato:
{
"valor": float,
"descricao": string,
"dataCompra": string,
"tipoPagamento": int,
"categoria": int
}
Independente da função executada (listagem ou cadastro) o JSON de retorno deve possuir o seguinte formato:
{
"data": ,
"success":
}
O valor do atributo data
deve ser o resultado da request executada. Para a função "Listar" deve conter a lista de despesas do mês atual cadastradas no banco de dados. Para a função "Cadastrar" deve conter o ID da despesa recém inserida no banco de dados.
O atributo success
será um booleano indicando o êxito, ou não, da função executada.
{
"data": [
{
"id": 1,
"categoria": "alimentação",
"dataCompra": "2022-09-05",
"descricao": "lorem ipsum",
"tipoPagamento": "pix",
"valor": 89.9
},
{
"id": 2,
"categoria": "alimentação",
"dataCompra": "2022-09-05",
"descricao": "lorem ipsum",
"tipoPagamento": "pix",
"valor": 42.0
}
],
"success": true
}
{
"data": 1,
"success": true
}
Neste repositório está a base inicial do desafio, uma aplicação Flask pronta para ser executada, após fazer o clone do projeto siga as instruções de Setup abaixo que preferir.
No diretório raiz do projeto execute:
docker-compose up
Após a finalização do comando o container com projeto em execução estará pronto para o uso.
Caso não utilize Docker, você precisará instalar o Python, preferencialmente a versão 3.9.7, feito isso execute o seguinte comando na raiz do projeto:
pip install -r requirements.txt
Obs: Talvez seja necessário trocar pip
por pip3
caso o comando acima não funcione.
Após instalar as dependências rode o projeto executando o seguinte comando:
python run.py
Obs: Talvez seja necessário trocar python
por python3
caso o comando acima não funcione.
Independente do Setup escolhido confirme se o projeto está em execução acessando a URL http://localhost:5000/api/status. Você deve ver o seguinte resultado:
{
"status": "Service Running"
}
Os principais diretórios do projeto são api/
e data/
, o primeiro é onde devem estar os arquivos com sua solução, atualmente ele possui apenas o código responsável por criar a aplicação Flask e definir uma rota de Status. Você pode adicionar quaisquer outros arquivos que achar necessário para melhor organizar sua solução.
A pasta data/
é onde está o banco de dados SQLite (data/database.db
). A estrutura do banco está pronta com as tabelas para o projeto já criadas, com dados de categorias e tipos_pagamento já preenchidos. Os demais arquivos do diretório não devem ser alterados.
O banco de dados foi criado com base no seguinte diagrama: