{"id":49611434,"url":"https://github.com/kemtch19/taskify-backend","last_synced_at":"2026-05-04T17:35:54.347Z","repository":{"id":300143581,"uuid":"1000488332","full_name":"kemtch19/taskify-backend","owner":"kemtch19","description":"API RESTful para una aplicación de gestión de tareas llamada Taskify","archived":false,"fork":false,"pushed_at":"2025-11-19T14:36:00.000Z","size":343,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-11-19T16:14:14.048Z","etag":null,"topics":["backend","javascript","mongo","node","onrender"],"latest_commit_sha":null,"homepage":"https://taskifyyy.vercel.app/","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/kemtch19.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-11T21:37:50.000Z","updated_at":"2025-11-19T14:42:11.000Z","dependencies_parsed_at":"2025-06-20T04:33:07.482Z","dependency_job_id":"bf526e8e-6d22-4a8c-bb57-22142234def8","html_url":"https://github.com/kemtch19/taskify-backend","commit_stats":null,"previous_names":["kemtch19/taskify-backend"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kemtch19/taskify-backend","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kemtch19%2Ftaskify-backend","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kemtch19%2Ftaskify-backend/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kemtch19%2Ftaskify-backend/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kemtch19%2Ftaskify-backend/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kemtch19","download_url":"https://codeload.github.com/kemtch19/taskify-backend/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kemtch19%2Ftaskify-backend/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32618142,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-04T10:08:07.713Z","status":"ssl_error","status_checked_at":"2026-05-04T10:08:02.005Z","response_time":58,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["backend","javascript","mongo","node","onrender"],"created_at":"2026-05-04T17:35:53.761Z","updated_at":"2026-05-04T17:35:54.335Z","avatar_url":"https://github.com/kemtch19.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n\u003cpicture\u003e\n  \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"./assets/taskify-dark.png\"\u003e\n  \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"./assets/taskify-light.png\"\u003e\n  \u003cimg width=500 alt=\"Taskify Logo\"\u003e\n\u003c/picture\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://taskifyyy.vercel.app/auth\"\u003e🌐 Sitio web\u003c/a\u003e\n  |\n  \u003ca href=\"https://github.com/Juankyyy/taskify-frontend\"\u003e🎨 Frontend\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/kemtch19/taskify-backend/commits/main/\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/last-commit/kemtch19/taskify-backend?label=Last%20Commit\u0026color=FFFF00\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/kemtch19/taskify-backend/commits/main/\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/commit-activity/t/kemtch19/taskify-backend?label=All%20time%20commits\u0026color=FFFF00\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n# 📝 Taskify Backend\n\ntaskify-backend es una API RESTful para una aplicación de gestión de tareas tipo To-Do List, desarrollada con **Node.js**, **Express** y **MongoDB**. Soporta autenticación con JWT, operaciones CRUD para usuarios, carpetas, listas y tareas, incluyendo funcionalidades como papelera de reciclaje para tareas.\n\n---\n\n## 📦 Tecnologías\n\n- Node.js\n- Express\n- MongoDB + Mongoose\n- JWT + cookies para autenticación\n- bcrypt para hashing de contraseñas\n- express-validator para validación\n- dotenv para configuración\n- Cloudinary para la subida de imágenes de perfil \n- MongoDB Atlas para base de datos en la nube\n- Render para despliegue gratuito del backend\n- UptimeRobot para mantener activo el servidor en Render\n\n---\n\n## 🚀 Instalación\n\n```bash\ngit clone https://github.com/tu-usuario/taskify-backend.git\ncd taskify-backend\nnpm install\n```\n\n---\n\n## ▶️ Ejecución del servidor\n\n```bash\nnpm run dev\n```\n\nServidor disponible en: `http://localhost:5000`\n\n---\n\n## 📂 Estructura del proyecto\n\n```\ntaskify-backend/\n├── controllers/\n│   ├── foldersController.js\n│   ├── listsController.js\n│   ├── tasksController/\n│   │   ├── create.js\n│   │   ├── get.js\n│   │   ├── update.js\n│   │   ├── trash.js\n│   │   └── ...\n│   └── usersController.js\n├── models/\n│   ├── Folder.js\n│   ├── List.js\n│   ├── Task.js\n│   └── User.js\n├── routes/\n│   ├── foldersRoutes.js\n│   ├── listsRoutes.js\n│   ├── tasksRoutes.js\n│   └── usersRoutes.js\n├── middlewares/\n├── validators/\n├── config/\n├── app.js\n├── server.js\n├── .env\n└── README.md\n```\n\n---\n\n## 📁 Endpoints disponibles\n\n### 👤 Usuarios\n\n| Método | Ruta                     | Descripción                                 |\n| ------ | ------------------------ | ------------------------------------------- |\n| POST   | `/api/users/register`    | Registrar nuevo usuario                     |\n| POST   | `/api/users/login`       | Iniciar sesión y obtener JWT                |\n| PATCH  | `/api/users/change-pass` | Cambiar contraseña (requiere JWT)           |\n| GET    | `/api/users/profile`     | Obtener perfil del usuario autenticado      |\n| PUT    | `/api/users/image`       | Subir o actualizar imagen de perfil         |\n| GET    | `/api/users/logout`      | Cerrar sesión y eliminar cookie JWT         |\n\n---\n\n### 📂 Folders (Carpetas)\n\n| Método | Ruta                      | Descripción                            |\n| ------ | ------------------------- | -------------------------------------- |\n| POST   | `/api/folders/create`     | Crear una nueva carpeta                |\n| GET    | `/api/folders`            | Obtener todas las carpetas del usuario |\n| PUT    | `/api/folders/update/:id` | Actualizar nombre de una carpeta       |\n| DELETE | `/api/folders/delete/:id` | Eliminar una carpeta                   |\n\n---\n\n### 🗃️ Lists (Listas)\n\n| Método | Ruta                          | Descripción                             |\n| ------ | ----------------------------- | --------------------------------------- |\n| POST   | `/api/lists/create`           | Crear nueva lista dentro de una carpeta |\n| GET    | `/api/lists/folder/:folderId` | Obtener listas por carpeta              |\n| PUT    | `/api/lists/update/:id`       | Actualizar una lista                    |\n| DELETE | `/api/lists/delete/:id`       | Eliminar una lista                      |\n| GET    | `/api/lists/:id`              | Obtener una lista por su ID             | \n\n---\n\n### ✅ Tasks (Tareas)\n\n| Método | Ruta                        | Descripción                               |\n| ------ | --------------------------- | ----------------------------------------- |\n| POST   | `/api/tasks/create`         | Crear una nueva tarea                     |\n| GET    | `/api/tasks/list/:listId`   | Obtener tareas activas de una lista       |\n| GET    | `/api/tasks/:id`            | Obtener una sola tarea                    |\n| GET    | `/api/tasks/search?q=texto` | Buscar tareas por título o descripción    |\n| GET    | `/api/tasks/trash`          | Obtener tareas archivadas                 |\n| GET    | `/api/tasks/date-range`     | Obtener tareas entre fechas (start y end) |\n| PATCH  | `/api/tasks/toggle/:id`     | Alternar estado completado/incompleto     |\n| PUT    | `/api/tasks/archive/:id`    | Archivar tarea (mover a papelera)         |\n| PUT    | `/api/tasks/restore/:id`    | Restaurar tarea desde papelera            |\n| PUT    | `/api/tasks/move/:id`       | Mover una tarea a otra lista              |\n| PUT    | `/api/tasks/update/:id`     | Actualizar contenido de una tarea         |\n| DELETE | `/api/tasks/delete/:id`     | Eliminar permanentemente una tarea        |\n| DELETE | `/api/tasks/empty-trash`    | Vaciar la papelera del usuario            |\n| GET    | `/api/tasks`                | Obtener todas las tareas del usuario      |\n| GET    | `/api/tasks/completed`      | Obtener tareas completadas                |\n\n---\n\n## 🧠 Notas\n\n- Todos los `:id` deben ser IDs válidos de MongoDB.\n- `priority` puede ser: \"low\", \"medium\" o \"high\".\n- Tareas archivadas no se incluyen en los listados normales, pero pueden restaurarse o eliminarse desde la papelera.\n- Tiene variables de entorno que `.envexample` que son importantes para la buena ejecución de este proyecto.\n\n---\n\n## 👨‍💻 Autores\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\n      \u003ca href=\"https://github.com/kemtch19\"\u003e\n        \u003cimg src=\"https://avatars.githubusercontent.com/u/92267985?v=4\" width=\"100px;\" alt=\"kemtch19\"/\u003e\n        \u003cbr /\u003e\n        \u003csub\u003e\u003cb\u003ekemtch19\u003c/b\u003e\u003c/sub\u003e\n      \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n      \u003ca href=\"https://github.com/Juankyyy\"\u003e\n        \u003cimg src=\"https://avatars.githubusercontent.com/u/103221572?v=4\" width=\"100px;\" alt=\"Juankyyy\"/\u003e\n        \u003cbr /\u003e\n        \u003csub\u003e\u003cb\u003eJuankyyy\u003c/b\u003e\u003c/sub\u003e\n      \u003c/a\u003e\n    \u003c/td\u003e   \n  \u003c/tr\u003e\n\u003c/table\u003e\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkemtch19%2Ftaskify-backend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkemtch19%2Ftaskify-backend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkemtch19%2Ftaskify-backend/lists"}