Releases
- 1.0.0 Primeira versão da API, com CRUD completo na rota
/task. - 1.1.0 Dockerfile.
1.1.1 RCAjuste no tratamento do payload das requisições.- Latest Processo auxiliar para leitura de arquivos CSV.
- O projeto foi desenvolvido e testado em Node v.22.
- Para iniciá-lo,
- execute
npm iou o comando equivalente do seu gerenciador de pacotes favorito. - execute o comando
npm start.
- execute
- 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.
- Nomeie o arquivo como planilha.csv e o coloque na pasta storage do projeto;
Quando executado num container, um volume deve ser vinculado à pasta storage, no diretório raiz do projeto, para que os dados sejam persistidos.
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.
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.
Cada tarefa deve ser composta pelas seguintes propriedades:
id: Um identificador único para cada tarefatitle: O título da tarefadescription: Uma descrição detalhada da tarefacompleted_at: A data de conclusão da tarefa, que deve iniciar como nullcreated_at: A data de criação da tarefaupdated_at: A data da última atualização da tarefa, que deve ser alterada a cada modificação
A API deve possuir as seguintes rotas e regras de negócio:
POST /tasks
- Cria uma nova tarefa.
- Recebe
titleedescriptionno corpo da requisição. - Os campos
id,created_at,updated_atecompleted_atdevem ser preenchidos automaticamente.
GET /tasks
- Lista todas as tarefas existentes.
- Permite a busca por tarefas, filtrando pelos campos
titleedescription.
PUT /tasks/:id
- Atualiza uma tarefa específica pelo
id. - Recebe
titlee/oudescriptionno corpo da requisição para atualização. - Antes de atualizar, deve validar se o
idfornecido corresponde a uma tarefa existente.
DELETE /tasks/:id
- Remove uma tarefa específica pelo
id. - Antes de remover, deve validar se o
idfornecido 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
idfornecido corresponde a uma tarefa existente.
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).
Algumas sugestões do que pode ser implementado:
- Validar se as propriedades
titleedescriptiondas rotas POST e PUT estão presentes nobodyda 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.