{"id":23701185,"url":"https://github.com/gitfrandu4/express-router-twitter-app","last_synced_at":"2025-07-25T05:06:52.475Z","repository":{"id":211625157,"uuid":"419553360","full_name":"gitfrandu4/express-router-twitter-app","owner":"gitfrandu4","description":"Ejercicio API RESTful con Express","archived":false,"fork":false,"pushed_at":"2021-11-05T19:36:22.000Z","size":133,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-12-30T09:32:48.835Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/gitfrandu4.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}},"created_at":"2021-10-21T02:19:12.000Z","updated_at":"2021-11-10T01:45:36.000Z","dependencies_parsed_at":"2023-12-09T19:52:44.359Z","dependency_job_id":null,"html_url":"https://github.com/gitfrandu4/express-router-twitter-app","commit_stats":null,"previous_names":["gitfrandu4/express-router-twitter-app"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitfrandu4%2Fexpress-router-twitter-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitfrandu4%2Fexpress-router-twitter-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitfrandu4%2Fexpress-router-twitter-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitfrandu4%2Fexpress-router-twitter-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gitfrandu4","download_url":"https://codeload.github.com/gitfrandu4/express-router-twitter-app/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239776654,"owners_count":19695148,"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":[],"created_at":"2024-12-30T09:32:32.843Z","updated_at":"2025-02-20T04:27:21.507Z","avatar_url":"https://github.com/gitfrandu4.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Primera API con 2 recursos\n\nQueremos desarrollar una api restful con node para un proyecto copia de twitter. Aunque de momento, será solo una primera versión con usuarios y tweets como si fuese un blog personal.\n\n![Ejercicio](./public/imgs/ejercicio.png)\n\n## Parte 1: Direccionamiento Express\nDeberán estar implementadas las funcionalidades de:\n\nUsuarios:\n- [x] Crear un nuevo usuario (POST)\n- [x] Borrar un usuario (DELETE)\n- [x] Editar el email de un usuario o el nombre (PATCH)\n\nTweets:\n- [x] Subir un tweet nuevo por parte de un usuario\n- [x] Ir a buscar un tweet en concreto por su id\n- [x] Borrar un tweet por su id\n\nOpcional\n- [x] Opcional: Obtener todos los tweets ordenados tanto asc como desc por la fecha de subida\n- [x] Opcional: Guardar los usuarios en un fichero db.json y actualizarlo con cada cambio.\n- [x] Opcional: Guardar los tweets en un fichero db.json y actualizarlo con cada cambio.\n- [x] OBLIGATORIO: Usar router para cada recurso\n\n```javascript\n// Action mapping\n/**\n * GET      /api/users                      -\u003e getAll\n * GET      /api/users/:username            -\u003e getByUsername\n * POST     /api/users                      -\u003e create\n * PATCH    /api/users/:username            -\u003e modify\n * PUT      /api/users/:username            -\u003e update \n * DELETE   /api/users/:username            -\u003e destroy\n */\n\n// Export methods\n\n// ============ El tirón con un objeto:\n/*module.exports = {getAll: getAll, create: create, modify: modify, destroy: destroy} */\n\n// ============ Truco: Cuando el nombre con el que exportamos y el del método coinciden:\n\nmodule.exports = { getAll, getTweets, create, modify, destroy };\n\n// ============ Línea a línea:\n/* module.exports.getAll = getAll\nmodule.exports.create = create\nmodule.exports.modify = modify\nmodule.exports.destroy = destroy */\n```\n\nControlar:\n\n* Que la API no se queda bloqueada en ningún momento\n* Campos vacíos en la request\n* Request inválidas\n* etc.\n\nDevolver en su caso el error en la respuesta y el código correcto para dicho caso. \n\n## Parte 2: Middlewares\n\nEl producto evoluciona =\u003e utilizando **middlewares** estaría interesante que : \n\n- [ ] Cuando se produzca un error en nuestra api le llegue un correo al desarrollador con el error.\n- [ ] También estaría chulo que si un usuario nos hace más de 20 peticiones POST en una misma sessión no le permitas hacer más peticiones post y nos informes por correo también.\n- [ ] Hemos visto que hay muchas herramientas para monitorizar logs por ahí :S Investiga e implementa alguna para controlar todo lo que pasa en nuestro server de express [https://www.slant.co/options/955/alternatives/~loggly-alternatives](https://www.slant.co/options/955/alternatives/~loggly-alternatives)\n\n## Parte 3: Conexión a MongoDB\n\nGuardar los datos del proyecto en mongoDB usando mongoose para conectar nuestra API con la base de datos\n\n- [x] R1. Usuarios\n    - [x] Definir Schema\n    - [x] Implementar CRUD de users\n\n    ```javascript\n    /**\n     * GET      /api/users                      -\u003e getAll\n     * POST     /api/users                      -\u003e create\n     * PATCH    /api/users/:username            -\u003e modify\n     * PUT      /api/users/:username            -\u003e update\n     * DELETE   /api/users/:username            -\u003e destroy\n    */\n    ```\n\n    - [x] Validaciones con mongoose\n\n- [x] R2. Tweets \n- [x] Definir Schema\n    - [x] Implementar CRUD de users\n\n    ```javascript\n    /**\n     * GET      /api/tweets                      -\u003e getAll\n     * POST     /api/tweets                      -\u003e createTweet\n     * GET      /api/tweets/:id                  -\u003e getTweet\n     * DELETE   /api/tweets/:id                  -\u003e deleteTweet\n    */\n    ```\n\n    - [x] Validaciones con mongoose\n## Parte 4: Mejoras \n\n- [ ] Aplicar paginación a la API\n    - [ ] Usar queryParams: [vídeo](Path vs Query Parameters in HTTP Requests (with Postman))\n    - [ ] Investigar como páginar una búsqueda de mongoose\n    - [ ] Investigar tanto el `limit` como el `skip` y parametrizarlo\n\n- [ ] Frontend\n    - [ ] Realizar un frontal para nuestro proyecto\n\nNote: \n\nStart node.js app with nodemon (restarts the app when file changes in the directory are detected)\n\n```\nnodemon index.js\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgitfrandu4%2Fexpress-router-twitter-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgitfrandu4%2Fexpress-router-twitter-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgitfrandu4%2Fexpress-router-twitter-app/lists"}