Nesse desafio, foi criado uma aplicação para continuar treinando o que estudado até agora no Node.js junto ao TypeScript, utilizando o conceito de models, repositories e services!
Essa aplicação armazena transações financeiras de entrada e saída, que deve permitir o cadastro e a listagem dessas transações.
POST /transactions: A rota deve recebertitle,valueetypedentro do corpo da requisição, sendotypeo tipo da transação, que deve serincomepara entradas (depósitos) eoutcomepara saidas (retiradas). Ao cadastrar uma nova transação, ela deve ser armazenada dentro de um objeto com o formato como o seguinte:
{
"id": "uuid",
"title": "Salário",
"value": 3000,
"type": "income"
}GET /transactions: Essa rota deve retornar uma listagem com todas as transações que você cadastrou até agora, junto com o valor de 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"
},
{
"id": "uuid",
"title": "Freela",
"value": 2000,
"type": "income"
},
{
"id": "uuid",
"title": "Pagamento da fatura",
"value": 4000,
"type": "outcome"
},
{
"id": "uuid",
"title": "Cadeira Gamer",
"value": 1200,
"type": "outcome"
}
],
"balance": {
"income": 6000,
"outcome": 5200,
"total": 800
}
}Dica: Dentro de balance, o income é a soma de todos os valores das transações com type income. O outcome é a soma de todos os valores das transações com type outcome, e o total é o valor de income - outcome.
Dica 2: Para fazer a soma dos valores, você pode usar a função reduce para agrupar as transações pela propriedade type, assim você irá conseguir somar todos os valores com facilidade e obter o retorno do balance.
Em cada teste, tem uma breve descrição no que sua aplicação deve cumprir para que o teste passe.
Para esse desafio temos os seguintes testes:
-
should be able to create a new transaction: Para que esse teste passe, sua aplicação deve permitir que uma transação seja criada, e retorne um json com a transação criado. -
should be able to list the transactions: Para que esse teste passe, sua aplicação deve permitir que seja retornado um objeto 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: Para que esse teste passe, sua aplicação não deve permitir que uma transação do tipooutcomeextrapole o valor total que o usuário tem em caixa, retornando uma resposta com código HTTP 400 e uma mensagem de erro no seguinte formato:{ error: string }
Esse projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Feito com 💜 by Rocketseat 👋 Entre na nossa comunidade!
