Nesse projeto foi utilizado fastify, typescript, prisma, postgres, docker e json-2-csv
OBS: no lugar do completed_at, foi usado o isDone.
Desafio referente ao módulo: Fundamentos do Node.js
Faaala Dev,
Sejam todos muito bem-vindos ao primeiro desafio da trilha de Node.js do Ignite.
Nesse desafio você reforçará de forma prática os conceitos que aprendemos nesse módulo.
Como se trata de um desafio, ele necessita de alguns conhecimentos além dos abordados nesse módulo, então é importante que tenha autonomia para conseguir pesquisar essas coisas caso não saiba como resolver. Por isso, lembre-se, tenha calma e acredite no seu processo.
O aprendizado daqui é muito importante e com certeza você conseguirá sair com muito conhecimento bacana 💜
Nesse desafio você desenvolverá uma API para realizar o CRUD de suas tasks (tarefas).
A API deve conter as seguintes funcionalidades:
- Criação de uma task
- Listagem de todas as tasks
- Atualização de uma task pelo
id
- Remover uma task pelo
id
- Marcar pelo
id
uma task como completa - E o verdadeiro desafio: Importação de tasks em massa por um arquivo CSV
Antes das rotas, vamos entender qual a estrutura (propriedades) que uma task deve ter:
id
- Identificador único de cada tasktitle
- Título da taskdescription
- Descrição detalhada da taskcompleted_at
- Data de quando a task foi concluída. O valor inicial deve sernull
created_at
- Data de quando a task foi criada.updated_at
- Deve ser sempre alterado para a data de quando a task foi atualizada.
Rotas:
-
POST - /tasks
Deve ser possível criar uma task no banco de dados, enviando os campos
title
edescription
por meio dobody
da requisição.Ao criar uma task, os campos:
id
,created_at
,updated_at
ecompleted_at
devem ser preenchidos automaticamente, conforme a orientação das propriedades acima. -
GET - /tasks
Deve ser possível listar todas as tasks salvas no banco de dados.
Também deve ser possível realizar uma busca, filtrando as tasks pelo
title
edescription
-
PUT - /tasks/:id
Deve ser possível atualizar uma task pelo
id
.No
body
da requisição, deve receber somente otitle
e/oudescription
para serem atualizados.Se for enviado somente o
title
, significa que odescription
não pode ser atualizado e vice-versa.Antes de realizar a atualização, deve ser feito uma validação se o
id
pertence a uma task salva no banco de dados. -
DELETE - /tasks/:id
Deve ser possível remover uma task pelo
id
.Antes de realizar a remoção, deve ser feito uma validação se o
id
pertence a uma task salva no banco de dados. -
PATCH - /tasks/:id/complete
Deve ser possível marcar a task como completa ou não. Isso significa que se a task estiver concluída, deve voltar ao seu estado “normal”.
Antes da alteração, deve ser feito uma validação se o
id
pertence a uma task salva no banco de dados.
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
.
Algumas sugestões do que pode ser implementado:
- Validar se as propriedades
title
edescription
das rotasPOST
ePUT
estão presentes nobody
da requisição. - Nas rotas que recebem o
/:id
, além de validar se oid
existe no banco de dados, retornar a requisição com uma mensagem informando que o registro não existe.
Após concluir o desafio, você deve enviar a URL do seu código no GitHub para a plataforma.
Além disso, que tal fazer um post no LinkedIn compartilhando o seu aprendizado e contando como foi a experiência? É uma excelente forma de demonstrar seus conhecimentos e atrair novas oportunidades!
Feito com 💜 por Rocketseat 👋
Antes de acessar o repositório com o desafio concluído, recomendamos fortemente que tente realizar o desafio.
Caso tenha dúvidas/dificuldades técnicas, temos o fórum para te ajudar.