“Aos poucos, quanto mais você se esforça, tudo fica mais simples!”
Nesse desafio, o objetivo era criar uma aplicação de gestão de transações utilizando a Stack Node.js, TypeScript, mas dessa vez incluindo o uso de banco de dados com o TypeORM e envio de arquivos com o Multer!
Objetivos de cada rota:
POST /transactions
: A rota deve recebertitle
,value
,type
, ecategory
dentro do corpo da requisição, sendo otype
o tipo da transação, que deve serincome
para entradas (depósitos) eoutcome
para saídas (retiradas). Ao cadastrar uma nova transação, ela deve ser armazenada dentro do seu banco de dados, possuindo os camposid
,title
,value
,type
,category_id
,created_at
,updated_at
.
{
"id": "uuid",
"title": "Salário",
"value": 3000,
"type": "income",
"category": "Alimentação"
}
GET /transactions
: Essa rota deve retornar uma listagem com todas as transações que você cadastrou até agora, junto com o valor da soma de entradas, retiradas e total de crédito. Essa rota deve retornar um objeto com o formato a seguir:
{
"transactions": [
{
"id": "uuid",
"title": "Salário",
"value": 4000,
"type": "income",
"category": {
"id": "uuid",
"title": "Salary"
}
},
{
"id": "uuid",
"title": "Freela",
"value": 2000,
"type": "income",
"category": {
"id": "uuid",
"title": "Others"
}
},
{
"id": "uuid",
"title": "Pagamento da fatura",
"value": 4000,
"type": "outcome",
"category": {
"id": "uuid",
"title": "Others"
}
},
{
"id": "uuid",
"title": "Cadeira Gamer",
"value": 1200,
"type": "outcome",
"category": {
"id": "uuid",
"title": "Recreation"
}
}
],
"balance": {
"income": 6000,
"outcome": 5200,
"total": 800
}
}
Para esse desafio temos os seguintes testes:
⚠️ Antes de rodar os testes, crie um banco de dados com o nome "gostack" para que todos os testes possam executar corretamente.
should be able to create a new transaction
: A aplicação deve permitir que uma transação seja criada, e retorne um json com a transação criado.
should create tags when inserting new transactions
: A aplicação deve permitir que ao criar uma nova transação com uma categoria que não existe, essa seja criada e inserida no campo category_id da transação com oid
que acabou de ser criado.
should not create tags when they already exists
: A aplicação deve permitir que ao criar uma nova transação com uma categoria que já existe, seja atribuído ao campo category_id da transação com oid
dessa categoria existente, não permitindo a criação de categorias com o mesmotitle
.
should be able to list the transactions
: A aplicação deve permitir que seja retornado um array de objetos contendo todas as transações junto ao balanço de income, outcome e total das transações que foram criadas até o momento.
should not be able to create outcome transaction without a valid balance
: A aplicação não deve permitir que uma transação do tipooutcome
extrapole o valor total que o usuário tem em caixa (total de income), retornando uma resposta com código HTTP 400 e uma mensagem de erro no seguinte formato:{ error: string }
.
should be able to delete a transaction
: A aplicação deve permitir que a sua rota de delete exclua uma transação, e ao fazer a exclusão, ele retorne uma resposta vazia, com status 204.
should be able to import transactions
: A aplicação deve permitir que seja importado um arquivo csv, contendo o seguinte modelo. Com o arquivo importado, deve permitir que seja criado no banco de dados todos os registros e categorias que estavam presentes nesse arquivo, e retornar todas as transactions que foram importadas.
Esse projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
--