{"id":19056473,"url":"https://github.com/josueec/flagpedia-clone-api","last_synced_at":"2026-04-18T00:04:56.958Z","repository":{"id":172295012,"uuid":"649103530","full_name":"JosueEC/FlagPedia-Clone-API","owner":"JosueEC","description":"🖥️ This API retrieves country information from the FlagPedia API and reformats it for my FlagPedia Clone application.","archived":false,"fork":false,"pushed_at":"2023-06-19T16:41:35.000Z","size":141,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-29T16:44:24.370Z","etag":null,"topics":["api-rest","backend","expressjs","javascript","postgresql","sequelize"],"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/JosueEC.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":"2023-06-03T19:40:08.000Z","updated_at":"2023-07-28T23:24:25.000Z","dependencies_parsed_at":null,"dependency_job_id":"94dad3b2-c5b7-4549-9942-78d91313378d","html_url":"https://github.com/JosueEC/FlagPedia-Clone-API","commit_stats":null,"previous_names":["josueec/api-countries-javascript-nodejs-express-sequelize-postgresql","josueec/flagpedia-clone-api"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/JosueEC/FlagPedia-Clone-API","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JosueEC%2FFlagPedia-Clone-API","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JosueEC%2FFlagPedia-Clone-API/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JosueEC%2FFlagPedia-Clone-API/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JosueEC%2FFlagPedia-Clone-API/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JosueEC","download_url":"https://codeload.github.com/JosueEC/FlagPedia-Clone-API/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JosueEC%2FFlagPedia-Clone-API/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278173365,"owners_count":25942293,"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","status":"online","status_checked_at":"2025-10-03T02:00:06.070Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["api-rest","backend","expressjs","javascript","postgresql","sequelize"],"created_at":"2024-11-08T23:49:40.084Z","updated_at":"2025-10-03T13:50:09.779Z","avatar_url":"https://github.com/JosueEC.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- ![HenryLogo](https://d31uz8lwfmyn8g.cloudfront.net/Assets/logo-henry-white-lg.png) --\u003e\n\n# **COUNTRIES** | Proyecto Individual\n\n## **⚠️ IMPORTANTE**\n\nEsta API fue creada con las dependencias y sus versiones que se presentan a continuacion:\n\n-  **npm**: 6.14.16 o mayor\n-  **nodejs**: 12.18.3 o mayor\n-  **express**: 12.18.3 o mayor\n-  **sequelize**: 12.18.3 o mayor\n-  **nodemon**: 12.18.3 o mayor\n-  **morgan**: 12.18.3 o mayor\n-  **cors**: 12.18.3 o mayor\n-  **dotenv**: 12.18.3 o mayor\n-  **express-validator**: 12.18.3 o mayor\n\nPara verificar que versiónes de Node y NPM tienes instaladas, ejecuta estos comandos en tu terminal:\n\n```bash\nnode --version\nnpm --version\n```\n\n---\n## **📋 SOBRE LA API**\n\nEn este proyecto la API de Countries **correrá localmente desde tu computadora**. De esta manera, siempre tendrás disponible los datos de forma local para poder realizar tu proyecto.\n\nPara lograr que esta API funcione desde tu computadora deberás dirigirte, desde tu terminal, a la carpeta **`server`** y ejecutar el comando:\n\n```bash\n   npm start\n```\n\nPodrás ver el siguiente mensaje en tu terminal.\n\n``` \n[0] \n[0] \u003e server@1.0.0 server\n[0] \u003e nodemon index.js\n[0] \n[1] \n[1] \u003e server@1.0.0 api\n[1] \u003e echo 'Local API listening on PORT 5000' \u0026 json-server --watch api/db.json -p 5000 -q\n[1] \n[1] 'Local API listening on PORT 5000' \n[0] [nodemon] 2.0.22\n[0] [nodemon] to restart at any time, enter `rs`\n[0] [nodemon] watching path(s): *.*\n[0] [nodemon] watching extensions: js,mjs,json\n[0] [nodemon] starting `node index.js`\n[0] Server listening on port 3001\n\n```\n\nEsto significa que la API ya está corriendo en tu computadora en el puerto 5000. Es decir que podrás acceder a ella desde la URL **`http://localhost:5000`**. Para poder comunicarte con esta API deberás dejar la terminal levantada.\n\n**IMPORTANTE**\nNo debes modificar **NINGÚN** archivo dentro de la carpeta **`/server/api`**. Cualquier modificación en estos archivos puede alterar el funcionamiento normal de la API y de tu proyecto.\n\n\u003cbr /\u003e\n\n---\n\n\n## **📋 PARA COMENZAR...**\n\n1. Clona este repositorio para tenerlo un tu computadora de manera local.\n\n2. Ejecuta el comando **npm install ci** para instalar todas las dependencias necesarias para correr el proyecto.\n\n3. En la carpeta raiz deberás crear un archivo llamado: **`.env`** que tenga la siguiente forma:\n\n   ```env\n       DB_USER=usuariodepostgres\n       DB_PASSWORD=passwordDePostgres\n       DB_HOST=localhost\n   ```\n\n4. Reemplazar **`usuariodepostgres`** y **`passwordDePostgres`** con tus propias credenciales para conectarte a postgres. Este archivo va ser ignorado en la subida a github, ya que contiene información sensible (las credenciales).\n\n5. Adicionalmente será necesario que crees, **desde psql (shell o PGAdmin)**, una base de datos llamada **`countries`**. Si no realizas este paso de manera manual no podrás avanzar con el proyecto.\n\n\u003cbr /\u003e\n\n---\n\n### **Único end-point que se puede utilizar**\n\n-  [**http://localhost:5000/countries**]\n\n\u003cbr /\u003e\n\n### **🖱 BASE DE DATOS**\n\nDeberás crear dos modelos para tu base de datos. Una será para los países y la otra será para las actividades turísticas (pueden llevar el nombre que tu quieras). La relación entre ambos modelos debe ser de muchos a muchos. A continuación te dejamos las propiedades que debe tener cada modelo. Aquellas marcadas con un asterísco son obligatorias.\n\n**📍 MODELO 1 | country**\n\n-  ID (Código de tres letras). \\*\n-  Nombre. \\*\n-  Imagen de la bandera. \\*\n-  Continente. \\*\n-  Capital. \\*\n-  Subregión.\n-  Área.\n-  Población. \\*\n\n\u003cbr /\u003e\n\n**📍 MODELO 2 | activity**\n\n-  ID. \\*\n-  Nombre. \\*\n-  Dificultad (número del 1 al 5). \\*\n-  Duración (en horas).\n-  Temporada (Verano, Otoño, Invierno o Primavera). \\*\n\n\u003cbr /\u003e\n\n---\n\n\u003cbr /\u003e\n\n### **🖱 BACK-END**\n\nPara esta parte deberás construir un servidor utilizando **NodeJS** y **Express**. Tendrás que conectarlo con tu base de datos mediante **Sequelize**.\n\nEn una primera instancia, al levantar tu servidor se deberá hacer una petición a la API, y se tendrán que guardar todos los países dentro de tu base de datos. Una vez guardados, toda tu aplicación utilizará la información sólo de tu base de datos.\n\nTu servidor deberá contar con las siguientes rutas:\n\n#### **📍 GET | /countries**\n\n-  Obtiene un arreglo de objetos, donde cada objeto es un país con toda su información.\n\n#### **📍 GET | /countries/:idPais**\n\n-  Esta ruta obtiene el detalle de un país específico. Es decir que devuelve un objeto con la información pedida en el detalle de un país.\n-  El país es recibido por parámetro (ID de tres letras del país).\n-  Tiene que incluir los datos de las actividades turísticas asociadas a este país.\n\n#### **📍 GET | /countries/name?=\"...\"**\n\n-  Esta ruta debe obtener todos aquellos países que coinciden con el nombre recibido por query. (No es necesario que sea una coincidencia exacta).\n-  Debe poder buscarlo independientemente de mayúsculas o minúsculas.\n-  Si no existe el país, debe mostrar un mensaje adecuado.\n\n#### **📍 POST | /activities**\n\n-  Esta ruta recibirá todos los datos necesarios para crear una actividad turística y relacionarla con los países solicitados.\n-  Toda la información debe ser recibida por body.\n-  Debe crear la actividad turística en la base de datos, y esta debe estar relacionada con los países indicados (al menos uno).\n\n#### **📍 GET | /activities**\n\n-  Obtiene un arreglo de objetos, donde cada objeto es una actividad turística.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjosueec%2Fflagpedia-clone-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjosueec%2Fflagpedia-clone-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjosueec%2Fflagpedia-clone-api/lists"}