Skip to content

layonendlich/rs-desafio-1-fundamentos-node

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CRUD de Tarefas - Fundamentos do Node.js

Releases
  • 1.0.0 Primeira versão da API, com CRUD completo na rota /task.
  • 1.1.0 Dockerfile.
  • 1.1.1 RC Ajuste no tratamento do payload das requisições.
  • Latest Processo auxiliar para leitura de arquivos CSV.

Informações para execução

  • O projeto foi desenvolvido e testado em Node v.22.
  • Para iniciá-lo,
    • execute npm i ou o comando equivalente do seu gerenciador de pacotes favorito.
    • execute o comando npm start.
  • Para realizar a importação de várias tarefas contidas num arquivo CSV:
    • Nomeie o arquivo como planilha.csv e o coloque na pasta storage do projeto;
      • A pasta storage é criada no diretório raiz do projeto, na primeira vez em que a API é executada.
    • Certifique-se de que a API já esteja em execução (npm start); e
    • Execute o comando npm run import-csv.

Quando executado num container, um volume deve ser vinculado à pasta storage, no diretório raiz do projeto, para que os dados sejam persistidos.

Conheça o projeto

rs-desafio-1-fundamentos-node

Nesse desafio você irá desenvolver uma API em Node.js para realizar o gerenciamento completo de tarefas (CRUD). As funcionalidades essenciais incluem a criação, listagem com filtros por título e descrição, atualização, remoção e a marcação de tarefas como concluídas. O principal diferencial do projeto é a implementação de uma rotina de importação de tarefas em massa a partir de um arquivo CSV, utilizando a biblioteca ⁠csv-parse.

Instruções

O desafio consiste na criação de uma API em Node.js para gerenciar tarefas. O principal objetivo é aplicar os conceitos de CRUD (Create, Read, Update, Delete) e manipulação de arquivos.

Estrutura de uma Tarefa

Cada tarefa deve ser composta pelas seguintes propriedades:

  • id: Um identificador único para cada tarefa
  • title: O título da tarefa
  • description: Uma descrição detalhada da tarefa
  • completed_at: A data de conclusão da tarefa, que deve iniciar como null
  • created_at: A data de criação da tarefa
  • updated_at: A data da última atualização da tarefa, que deve ser alterada a cada modificação

Regras das Rotas

A API deve possuir as seguintes rotas e regras de negócio:

POST /tasks

  • Cria uma nova tarefa.
  • Recebe title e description no corpo da requisição.
  • Os campos id, created_at, updated_at e completed_at devem ser preenchidos automaticamente.

GET /tasks

  • Lista todas as tarefas existentes.
  • Permite a busca por tarefas, filtrando pelos campos title e description.

PUT /tasks/:id

  • Atualiza uma tarefa específica pelo id.
  • Recebe title e/ou description no corpo da requisição para atualização.
  • Antes de atualizar, deve validar se o id fornecido corresponde a uma tarefa existente.

DELETE /tasks/:id

  • Remove uma tarefa específica pelo id.
  • Antes de remover, deve validar se o id fornecido corresponde a uma tarefa existente.

PATCH /tasks/:id/completea

  • Altera o status da tarefa entre completa e não completa, modificando o campo completed_at.
  • Antes de alterar, deve validar se o id fornecido corresponde a uma tarefa existente.

E a importação do CSV?

Normalmente em uma API, a importação de um CSV acontece enviando o arquivo pela rota, por meio de outro formato, chamado multipart/form-data. Como esse desafio visa manter a implementação mais simples, você pode realizar essa funcionalidade por meio de um arquivo de script import-csv.js, por exemplo.

Para realizar isso, utilize a lib csv-parse, utilizando o exemplo de iterador async.

Com a biblioteca instalada utilizando o gerenciador de pacotes de sua preferência, crie um arquivo a parte para realizar a leitura do arquivo CSV.

Nesse arquivo, deve ser feito a leitura do CSV e para cada linha, realize uma requisição para a rota POST - /tasks, passando os campos necessários.

Recomendação do formato do CSV:

title,description
Task 01,Descrição da Task 01
Task 02,Descrição da Task 02
Task 03,Descrição da Task 03
Task 04,Descrição da Task 04
Task 05,Descrição da Task 05

Recomendação de implementação

Semelhante ao que foi feito no stream-http-server.js, nas aulas, utilizando o for await, também é possível fazer com o parse da lib informada acima (Lembre-se de pular a primeira linha do CSV).

Indo além

Algumas sugestões do que pode ser implementado:

  • Validar se as propriedades title e description das rotas POST e PUT estão presentes no body da requisição.
  • Nas rotas que recebem o /:id, além de validar se o id existe no banco de dados, retornar a requisição com uma mensagem informando que o registro não existe.

About

API Node com um CRUD de tarefas

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors