{"id":20491203,"url":"https://github.com/maiquinho/desafio-ignite-nodejs-01","last_synced_at":"2026-04-29T04:38:27.250Z","repository":{"id":248027607,"uuid":"826987089","full_name":"Maiquinho/desafio-ignite-nodejs-01","owner":"Maiquinho","description":"API para realizar um CRUD de tasks (tarefas).","archived":false,"fork":false,"pushed_at":"2024-07-16T19:05:47.000Z","size":30,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-05T17:39:35.121Z","etag":null,"topics":["crud","crud-api","node-fundamentals","nodejs","task-api"],"latest_commit_sha":null,"homepage":"","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/Maiquinho.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-07-10T19:33:16.000Z","updated_at":"2024-07-16T19:05:51.000Z","dependencies_parsed_at":"2024-11-19T02:47:03.958Z","dependency_job_id":null,"html_url":"https://github.com/Maiquinho/desafio-ignite-nodejs-01","commit_stats":null,"previous_names":["maiquinho/desafio-ignite-nodejs-01"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Maiquinho/desafio-ignite-nodejs-01","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Maiquinho%2Fdesafio-ignite-nodejs-01","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Maiquinho%2Fdesafio-ignite-nodejs-01/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Maiquinho%2Fdesafio-ignite-nodejs-01/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Maiquinho%2Fdesafio-ignite-nodejs-01/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Maiquinho","download_url":"https://codeload.github.com/Maiquinho/desafio-ignite-nodejs-01/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Maiquinho%2Fdesafio-ignite-nodejs-01/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261761345,"owners_count":23205921,"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":["crud","crud-api","node-fundamentals","nodejs","task-api"],"created_at":"2024-11-15T17:20:41.402Z","updated_at":"2026-04-29T04:38:22.213Z","avatar_url":"https://github.com/Maiquinho.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🚀 Desafio 01 - Fundamentos do Node.js (Ignite)\n\nDesafio referente ao módulo: Fundamentos do Node.js\n\n## 📚 Introdução\n\nOlá, pessoal!\n\nEste projeto é parte do primeiro desafio da trilha de Node.js do Ignite, oferecida pela [Rocketseat](https://www.rocketseat.com.br/). O objetivo do desafio é colocar em prática os conceitos aprendidos no módulo de Fundamentos do Node.js, desenvolvendo uma API para realizar o CRUD de tasks (tarefas).\n\n## 🛠️ Funcionalidades\n\nA API desenvolvida possui as seguintes funcionalidades:\n\n- **Criação de uma task**: Permite criar uma nova task no banco de dados.\n- **Listagem de todas as tasks**: Permite listar todas as tasks salvas no banco de dados, com a opção de filtrar por título e descrição.\n- **Atualização de uma task pelo `id`**: Permite atualizar o título e/ou descrição de uma task específica.\n- **Remover uma task pelo `id`**: Permite remover uma task específica do banco de dados.\n- **Marcar pelo `id` uma task como completa**: Permite marcar uma task como completa ou reverter para o estado não completo.\n- **Importação de tasks em massa por um arquivo CSV**: Permite importar múltiplas tasks a partir de um arquivo CSV utilizando Streams.\n\n### 📋 Estrutura das Tasks\n\nCada task possui as seguintes propriedades:\n\n- `id`: Identificador único de cada task.\n- `title`: Título da task.\n- `description`: Descrição detalhada da task.\n- `completed_at`: Data de quando a task foi concluída. O valor inicial é `null`.\n- `created_at`: Data de quando a task foi criada.\n- `updated_at`: Data de quando a task foi atualizada.\n\n### 🔄 Rotas da API\n\n- `POST - /tasks`\n    \n    Cria uma task no banco de dados, enviando os campos `title` e `description` no corpo da requisição.\n    \n    Ao criar uma task, os campos: `id`, `created_at`, `updated_at` e `completed_at` são preenchidos automaticamente.\n\n- `GET - /tasks`\n    \n    Lista todas as tasks salvas no banco de dados.\n    \n    Também permite realizar buscas filtrando as tasks pelo `title` e `description`.\n\n- `PUT - /tasks/:id`\n    \n    Atualiza uma task pelo `id`.\n    \n    No corpo da requisição, recebe somente o `title` e/ou `description` para serem atualizados.\n    \n    Antes de realizar a atualização, valida se o `id` pertence a uma task salva no banco de dados.\n\n- `DELETE - /tasks/:id`\n    \n    Remove uma task pelo `id`.\n    \n    Antes de realizar a remoção, valida se o `id` pertence a uma task salva no banco de dados.\n\n- `PATCH - /tasks/:id/complete`\n    \n    Marca a task como completa ou não. Se a task estiver concluída, reverte para o estado não completo.\n    \n    Antes da alteração, valida se o `id` pertence a uma task salva no banco de dados.\n\n### 📥 Importação de CSV\n\nA importação de tasks a partir de um arquivo CSV é feita utilizando a biblioteca `CSV Parse`. O arquivo CSV deve estar dentro do próprio projeto. \n\nPara importar as tasks, a API lê o arquivo CSV e utiliza Streams para processar os dados de forma eficiente.\n\nPara mais detalhes sobre a importação via CSV com Stream, acesse a [explicação detalhada](https://www.notion.so/Cria-o-via-CSV-com-Stream-21ba6d279991473792787d9265212181?pvs=21).\n\n## 🚀 Como rodar o projeto\n\n```bash\n# Clone este repositório\n$ git clone https://github.com/seu-usuario/nome-do-repositorio.git\n\n# Acesse a pasta do projeto no terminal/cmd\n$ cd nome-do-repositorio\n\n# Instale as dependências\n$ npm install\n\n# Execute a aplicação em modo de desenvolvimento\n$ npm run dev\n\n# O servidor iniciará na porta 3333 - acesse http://localhost:3333\n```\n\n## 🎉 Considerações Finais\n\nFoi uma experiência incrível desenvolver essa API e reforçar os conceitos aprendidos. A [Rocketseat](https://www.rocketseat.com.br/) proporciona um ambiente excelente para o aprendizado e crescimento como desenvolvedor.\n\nFeito com 💜 por [Maiquinho](https://michaelmatheus.dev).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaiquinho%2Fdesafio-ignite-nodejs-01","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaiquinho%2Fdesafio-ignite-nodejs-01","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaiquinho%2Fdesafio-ignite-nodejs-01/lists"}