Skip to content

In this module, a gofinances challenge was created, using the concept of models and repositories together with the use of multer to create csv files that are registered in the api database

Notifications You must be signed in to change notification settings

Guilherme2020/gostack-challenge-06-gofinances

Repository files navigation

GoStack

Desafio 06: Banco de dados e upload de arquivos no Node.js

“Só deseje as coisas as quais você está disposto a lutar”!

GitHub language count Made by Rocketseat License Stargazers

Sobre o desafio   |    Licença

🚀 Sobre o desafio

Nesse desafio, continuei a desenvolver a aplicação de gestão de transações, treinando o conheicimento adiquirido até agora no Node.js junto ao TypeScript, mas dessa vez incluindo o uso de banco de dados com o TypeORM e envio de arquivos com o Multer!

Essa é uma aplicação que armazena transações financeiras de entrada e saída e permite o cadastro e a listagem dessas transações, além de permitir a criação de novos registros no banco de dados a partir do envio de um arquivo csv usando a biblioteca multer.

Agora navegue até a pasta criada e abra no Visual Studio Code, lembre-se de executar o comando yarn no seu terminal para instalar todas as dependências.

Features

  • ⚛️ NodeJs: Web framework that allows server-side Javascript execution environment. - Use Express a minimalist web framework for node. - Use of TypeScript - Use of TypeOrm - Use of Multer for upload files.

Rotas da aplicação

License MIT

License MIT

License MIT

  • POST /transactions: A rota deve receber title, value, type, e category dentro do corpo da requisição, sendo o type o tipo da transação, que deve ser income para entradas (depósitos) e outcome para saídas (retiradas). Ao cadastrar uma nova transação, ela deve ser armazenada dentro do banco de dados, possuindo os campos id, 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çõe cadastradas até agora, junto com o valor da soma de entradas, retiradas e total de crédito. Essa rota deve retornar um objeto o seguinte formato:
{
  "transactions": [
    {
      "id": "uuid",
      "title": "Salário",
      "value": 4000,
      "type": "income",
      "category": {
        "id": "uuid",
        "title": "Salary",
        "created_at": "2020-04-20T00:00:49.620Z",
        "updated_at": "2020-04-20T00:00:49.620Z"
      },
      "created_at": "2020-04-20T00:00:49.620Z",
      "updated_at": "2020-04-20T00:00:49.620Z"
    },
    {
      "id": "uuid",
      "title": "Freela",
      "value": 2000,
      "type": "income",
      "category": {
        "id": "uuid",
        "title": "Others",
        "created_at": "2020-04-20T00:00:49.620Z",
        "updated_at": "2020-04-20T00:00:49.620Z"
      },
      "created_at": "2020-04-20T00:00:49.620Z",
      "updated_at": "2020-04-20T00:00:49.620Z"
    },
    {
      "id": "uuid",
      "title": "Pagamento da fatura",
      "value": 4000,
      "type": "outcome",
      "category": {
        "id": "uuid",
        "title": "Others",
        "created_at": "2020-04-20T00:00:49.620Z",
        "updated_at": "2020-04-20T00:00:49.620Z"
      },
      "created_at": "2020-04-20T00:00:49.620Z",
      "updated_at": "2020-04-20T00:00:49.620Z"
    },
    {
      "id": "uuid",
      "title": "Cadeira Gamer",
      "value": 1200,
      "type": "outcome",
      "category": {
        "id": "uuid",
        "title": "Recreation",
        "created_at": "2020-04-20T00:00:49.620Z",
        "updated_at": "2020-04-20T00:00:49.620Z"
      },
      "created_at": "2020-04-20T00:00:49.620Z",
      "updated_at": "2020-04-20T00:00:49.620Z"
    }
  ],
  "balance": {
    "income": 6000,
    "outcome": 5200,
    "total": 800
  }
}
  • DELETE /transactions/:id: A rota deve deletar uma transação com o id presente nos parâmetros da rota;
  • POST /transactions/import: A rota deve permitir a importação de um arquivo com formato .csv contendo as mesmas informações necessárias para criação de uma transação id, title, value, type, category_id, created_at, updated_at, onde cada linha do arquivo CSV deve ser um novo registro para o banco de dados, e por fim retorne todas as transactions que foram importadas para seu banco de dados. O arquivo csv, deve seguir o seguinte modelo

Específicação dos testes

Em cada teste, tem uma breve descrição no que a aplicação deve cumprir para que o teste passe.

Para esse desafio, temos os seguintes testes:

⚠️ Antes de rodar os testes, crie um banco de dados com o nome "gostack_desafio06_tests" para que todos os testes possam executar corretamente ⚠️

  • 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 create tags when inserting new transactions: Para que esse teste passe, 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 o id que acabou de ser criado.
  • should not create tags when they already exists: Para que esse teste passe, 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 o id dessa categoria existente, não permitindo a criação de categorias com o mesmo title.
  • should be able to list the transactions: Para que esse teste passe, 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: Para que esse teste passe, a aplicação não deve permitir que uma transação do tipo outcome 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: Para que esse teste passe, 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: Para que esse teste passe, a aplicação deve permitir que seja importado um arquivo csv, contendo o seguinte modelo. Com o arquivo importado, a aplicação 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.

📝 Licença

Esse projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.


Feito com 💜 by Rocketseat 👋 Entre na nossa comunidade!

About

In this module, a gofinances challenge was created, using the concept of models and repositories together with the use of multer to create csv files that are registered in the api database

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published