{"id":23404755,"url":"https://github.com/fabianmendozaospina/catalog-api","last_synced_at":"2025-04-08T22:47:42.576Z","repository":{"id":268818999,"uuid":"904988535","full_name":"fabianmendozaospina/catalog-api","owner":"fabianmendozaospina","description":"A RESTful API designed to manage a catalog of medical products. This API allows users to perform CRUD operations (Create, Read, Update, and Delete) on data.","archived":false,"fork":false,"pushed_at":"2024-12-19T04:13:46.000Z","size":17,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-14T17:58:21.079Z","etag":null,"topics":["backend","docker","jwt","mongodb","nodejs","restful"],"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/fabianmendozaospina.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-12-17T23:56:05.000Z","updated_at":"2024-12-21T21:40:35.000Z","dependencies_parsed_at":"2024-12-19T05:19:39.116Z","dependency_job_id":"4f276f8a-b4d4-45d4-8c90-c3c7dd080f3a","html_url":"https://github.com/fabianmendozaospina/catalog-api","commit_stats":null,"previous_names":["fabianmendozaospina/catalog-api"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fabianmendozaospina%2Fcatalog-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fabianmendozaospina%2Fcatalog-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fabianmendozaospina%2Fcatalog-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fabianmendozaospina%2Fcatalog-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fabianmendozaospina","download_url":"https://codeload.github.com/fabianmendozaospina/catalog-api/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247941717,"owners_count":21022037,"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":["backend","docker","jwt","mongodb","nodejs","restful"],"created_at":"2024-12-22T13:15:33.100Z","updated_at":"2025-04-08T22:47:42.546Z","avatar_url":"https://github.com/fabianmendozaospina.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Catalog-API\n\nProject Catalog-API (Backend) repository developed with Node.js and Express.\n\n## Let's start the project in development\n- Make sure you have Docker Desktop installed on your PC.\n- Run the project with the following command:\n\n  ```\n  docker-compose up --build\n  ```\n- **NO** need to issue `npm install`.🚫\n- Wait for the `backend` container to finish building and loading.\n- The API will be running on port 5000. 🚀\n\n## API Documentation\n\nFollow these steps to explore the documentation:\n\n- Via web: https://documenter.getpostman.com/view/16132451/2sA2xcaah6\n- Or locally:\n  - Import the `Catalogo-API.postman_collection.json` file located in the root of the project into `Postman`.\n  - Click the `...` button on the collection and choose the `View documentation` option.\n    \n## Instalación en ASW\nRecomendaciones para el despliegue en ASW:\n\n1. Crear una cuenta de AWS:\nSi aún no tienes una cuenta en AWS, regístrate en AWS Console.\n\n2. Preparar tu aplicación:\nAsegúrate de que tu aplicación esté lista para ser desplegada y que puedas ejecutarla localmente con éxito.\n\n3. Configurar la base de datos MongoDB en AWS:\nPuedes usar Amazon DocumentDB como servicio de base de datos compatible con MongoDB en AWS.\n\n4. **Configurar el backend**:\n- 4.1. Crear una instancia EC2 para el servidor Node.js:\nVe a la AWS Console y selecciona EC2 en la sección de servicios.\nHaz clic en \"Launch Instance\" y selecciona una AMI de tu elección (por ejemplo, Amazon Linux).\nConfigura las instancias según tus necesidades (asegúrate de abrir los puertos necesarios para tu aplicación).\nAsocia una clave SSH para acceder a la instancia.\n- 4.2. Instalar Node.js y configurar tu aplicación:\nConéctate a tu instancia EC2 usando SSH.\nInstala Node.js y npm.\nClona tu repositorio de código en la instancia.\nConfigura tu aplicación Node.js y asegúrate de que esté funcionando correctamente.\n5. Configurar seguridad:\nConfigura grupos de seguridad en EC2 para controlar el tráfico de red.\nUtiliza AWS Identity and Access Management (IAM) para gestionar permisos y accesos.\n6. Monitoreo y escalado:\nConfigura Amazon CloudWatch para monitorear tus instancias y utiliza Auto Scaling para escalar automáticamente tus recursos según la demanda.\n\n## Justificación del Stack tecnológico\n\n- NodeJs: Runtime basado en JavaScript que permite ejecutar código del lado del servidor. Su modelo de operación no bloqueante y su capacidad para manejar múltiples conexiones concurrentes lo hacen ideal para aplicaciones de alta concurrencia, como las API. Además, al usar JavaScript tanto en el frontend como en el backend, se facilita la coherencia en el desarrollo.\n  \n- MongoDB: Base de datos NoSQL que utiliza un formato de documentos BSON (similar a JSON). En proyectos como éste donde la estructura de los datos puede variar y evolucionar con el tiempo, MongoDB proporciona flexibilidad al permitir esquemas dinámicos. También es eficiente para manejar grandes cantidades de datos no estructurados, como en un catálogo de productos, que podrá crecer con el tiempo.\n  \n- Mongoose: Biblioteca de modelado de objetos MongoDB para Node.js. Facilita la interacción con la base de datos MongoDB al proporcionar una capa de abstracción y definir modelos con esquemas predefinidos. Esto nos agiliza el desarrollo al simplificar las operaciones de CRUD y validar los datos antes de almacenarlos.\n  \n- Express: Framework para Node.js que simplifica la creación de aplicaciones web y APIs. Facilita la gestión de rutas, middleware y solicitudes HTTP. Al ser minimalista y modular, es ideal para construir APIs RESTful de manera eficiente, como la nuestra.\n  \n- Jsonwebtoken: Usado para la autenticación basada en tokens. En una API, el uso de tokens JWT es común para gestionar la autenticación y autorización. Proporciona una forma segura de transmitir información de usuario entre el cliente y el servidor sin necesidad de almacenar información de sesión en el servidor.\n \n- Cors: (Cross-Origin Resource Sharing) es necesario que nuestra API pueda ser accedida desde un dominio diferente al de la aplicación frontend. Al permitir el acceso controlado desde orígenes específicos, CORS ayuda a garantizar la seguridad del navegador mientras permite solicitudes desde dominios autorizados.\n  \n- Bcrypt: Librería de hashing diseñada para almacenar contraseñas de manera segura. En un sistema de autenticación, es crucial almacenar las contraseñas de forma segura para proteger la información del usuario. Bcrypt utiliza un algoritmo de hashing lento y salting, lo que lo hace resistente a los ataques de fuerza bruta.\n\n- Docker: Proporciona una solución integral para mejorar el desarrollo y la implementación de aplicaciones. Facilita la portabilidad del entorno, permitiendo que la aplicación se ejecute de manera consistente en diferentes máquinas. Con la gestión aislada de dependencias y la capacidad de orquestar múltiples contenedores, Docker simplifica la escalabilidad y el despliegue de aplicaciones como esta.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffabianmendozaospina%2Fcatalog-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffabianmendozaospina%2Fcatalog-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffabianmendozaospina%2Fcatalog-api/lists"}