Nesse desafio, deve-se criar uma aplicaĆ§Ć£o para continuar treinando o que aprendido atĆ© agora no Node.js junto ao TypeScript, utilizando o conceito de models, repositories e services.
Essa serĆ” uma aplicaĆ§Ć£o que deve armazenar transaƧƵes financeiras de entrada e saĆda, que deve permitir o cadastro e a listagem dessas transaƧƵes.
Deve-se verificar os arquivos da pasta src e completar onde nĆ£o possui cĆ³digo com o cĆ³digo para atingir os objetivos de cada rota.
POST /transactions
: A rota deve recebertitle
,value
etype
dentro do corpo da requisiĆ§Ć£o, sendotype
o tipo da transaĆ§Ć£o, que deve serincome
para entradas (depĆ³sitos) eoutcome
para 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
}
}
Em cada teste, hĆ” uma breve descriĆ§Ć£o no que a aplicaĆ§Ć£o deve cumprir para que o teste passe.
Para esse desafio existem os seguintes testes:
-
should be able to create a new transaction
: Para que esse teste passe, a 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, a 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, a aplicaĆ§Ć£o nĆ£o deve permitir que uma transaĆ§Ć£o do tipooutcome
extrapole 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 }