{"id":18884749,"url":"https://github.com/leandroppf/gostack-desafio-fundamentos-node","last_synced_at":"2026-02-22T21:30:17.724Z","repository":{"id":42882767,"uuid":"255846215","full_name":"leandroppf/gostack-desafio-fundamentos-node","owner":"leandroppf","description":null,"archived":false,"fork":false,"pushed_at":"2023-01-24T02:10:12.000Z","size":1454,"stargazers_count":0,"open_issues_count":14,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-12-31T04:25:42.527Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/leandroppf.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-04-15T08:00:12.000Z","updated_at":"2020-04-22T09:39:41.000Z","dependencies_parsed_at":"2023-02-13T11:01:24.582Z","dependency_job_id":null,"html_url":"https://github.com/leandroppf/gostack-desafio-fundamentos-node","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":"rocketseat-education/gostack-template-fundamentos-node","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leandroppf%2Fgostack-desafio-fundamentos-node","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leandroppf%2Fgostack-desafio-fundamentos-node/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leandroppf%2Fgostack-desafio-fundamentos-node/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leandroppf%2Fgostack-desafio-fundamentos-node/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/leandroppf","download_url":"https://codeload.github.com/leandroppf/gostack-desafio-fundamentos-node/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239857396,"owners_count":19708686,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-08T07:14:05.517Z","updated_at":"2026-02-22T21:30:17.675Z","avatar_url":"https://github.com/leandroppf.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg alt=\"GoStack\" src=\"https://storage.googleapis.com/golden-wind/bootcamp-gostack/header-desafios.png\" /\u003e\n\n\u003ch3 align=\"center\"\u003e\n  Desafio 05: Primeiro projeto Node.js\n\u003c/h3\u003e\n\n\u003cp align=\"center\"\u003e“Para quem fica melhor a cada dia, ficar pronto é utopia”!\u003c/blockquote\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"GitHub language count\" src=\"https://img.shields.io/github/languages/count/leandroppf/gostack-desafio-fundamentos-node?color=%2304D361\"\u003e\n\n  \u003ca href=\"https://rocketseat.com.br\"\u003e\n    \u003cimg alt=\"Made by Leandro Pedroso\" src=\"https://img.shields.io/badge/made%20by-Leandroppf-%2304D361\"\u003e\n  \u003c/a\u003e\n\n  \u003cimg alt=\"License\" src=\"https://img.shields.io/badge/license-MIT-%2304D361\"\u003e\n\n  \u003ca href=\"https://github.com/leandroppf/gostack-desafio-fundamentos-node/stargazers\"\u003e\n    \u003cimg alt=\"Stargazers\" src=\"https://img.shields.io/github/stars/leandroppf/gostack-desafio-fundamentos-node?style=social\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n## :rocket: Sobre o desafio\n\nNesse desafio, o objetivo era criar uma aplicação para continuar treinando o que aprendi até agora no Node.js junto ao TypeScript, utilizando o conceito de models, repositories e services!\n\nEssa será uma aplicação para que deve armazenar transações financeiras de entrada e saída, que deve permitir o cadastro e a listagem dessas transações.\n\n### Rotas da aplicação\n\nPara esse desafio eu recebi um template de exemplo com rotas pré definidas, porém sem código de execução, meu objetivo era desenvolver o código para atingir os objetivos de cada rota, utilizando o conceito de models, repositories e services!\n\n- **`POST /transactions`**: A rota deve receber `title`, `value` e `type` dentro do corpo da requisição, sendo `type` o tipo da transação, que deve ser `income` para entradas (depósitos) e `outcome` para saidas (retiradas). Ao cadastrar uma nova transação, ela deve ser armazenada dentro de um objeto com o formato como o seguinte:\n\n```json\n{\n  \"id\": \"uuid\",\n  \"title\": \"Salário\",\n  \"value\": 3000,\n  \"type\": \"income\"\n}\n```\n\n- **`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:\n\n```json\n{\n  \"transactions\": [\n    {\n      \"id\": \"uuid\",\n      \"title\": \"Salário\",\n      \"value\": 4000,\n      \"type\": \"income\"\n    },\n    {\n      \"id\": \"uuid\",\n      \"title\": \"Freela\",\n      \"value\": 2000,\n      \"type\": \"income\"\n    },\n    {\n      \"id\": \"uuid\",\n      \"title\": \"Pagamento da fatura\",\n      \"value\": 4000,\n      \"type\": \"outcome\"\n    },\n    {\n      \"id\": \"uuid\",\n      \"title\": \"Cadeira Gamer\",\n      \"value\": 1200,\n      \"type\": \"outcome\"\n    }\n  ],\n  \"balance\": {\n    \"income\": 6000,\n    \"outcome\": 5200,\n    \"total\": 800\n  }\n}\n```\n\n### Especificação dos testes\n\nO template também possui testes automatizados e um dos objetivos é que o código criado passe em todos os testes listados abaixo:\n\n- **`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.\n\n- **`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.\n\n- **`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 tipo `outcome` 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 }`\n\n---\n\nDesafio concluído no dia 15/04/2020 por Leandro Pinto Pedroso Filho\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleandroppf%2Fgostack-desafio-fundamentos-node","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fleandroppf%2Fgostack-desafio-fundamentos-node","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleandroppf%2Fgostack-desafio-fundamentos-node/lists"}