{"id":19900803,"url":"https://github.com/jdcodework/recomendaciones-peliculas","last_synced_at":"2025-10-15T15:32:18.504Z","repository":{"id":255258392,"uuid":"849007829","full_name":"JDCodeWork/recomendaciones-peliculas","owner":"JDCodeWork","description":null,"archived":false,"fork":false,"pushed_at":"2024-09-18T21:30:56.000Z","size":96,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-11T21:12:00.478Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://recomendaciones-peliculas.vercel.app","language":"TypeScript","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/JDCodeWork.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-08-28T20:03:46.000Z","updated_at":"2024-09-18T21:30:59.000Z","dependencies_parsed_at":"2024-08-28T22:28:37.402Z","dependency_job_id":"78e517be-e93f-4fb8-991a-2e791d367fa4","html_url":"https://github.com/JDCodeWork/recomendaciones-peliculas","commit_stats":null,"previous_names":["jdcodework/recomendaciones-peliculas"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JDCodeWork%2Frecomendaciones-peliculas","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JDCodeWork%2Frecomendaciones-peliculas/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JDCodeWork%2Frecomendaciones-peliculas/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JDCodeWork%2Frecomendaciones-peliculas/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JDCodeWork","download_url":"https://codeload.github.com/JDCodeWork/recomendaciones-peliculas/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241329411,"owners_count":19944984,"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-11-12T20:13:17.559Z","updated_at":"2025-10-15T15:32:13.475Z","avatar_url":"https://github.com/JDCodeWork.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# Sistema de Recomendación de Películas\n\n## Introducción\n\nEste documento describe el diseño y la implementación de un sistema de recomendación de películas desarrollado utilizando NestJS. El objetivo del sistema es sugerir películas a un usuario basado en sus preferencias personales y las valoraciones de otros usuarios. El sistema está compuesto por varios componentes backend, diseñados para manejar usuarios, películas y la base de datos correspondiente.\n\n\n## Arquitectura del Sistema\n\nEl sistema está construido siguiendo la arquitectura modular proporcionada por NestJS, un framework de Node.js. Se han desarrollado tres módulos principales:\n\n1. **Módulo de Usuario**: Responsable de manejar toda la lógica relacionada con los usuarios, además de ser el encargado de proporcionar las recomendaciones.\n2. **Módulo de Película**: Encargado de gestionar la información relacionada con las películas.\n3. **Módulo Seed**: Utilizado para poblar la base de datos con información inicial sobre usuarios y películas.\n\n### Justificación\nAunque existen varias alternativas para crear aplicaciones de servidor con JavaScript, como Express y NestJS, opté por NestJS debido a su enfoque estructurado y la experiencia de desarrollo que ofrece. NestJS proporciona un marco de trabajo bien definido, lo que facilita la organización del código y promueve buenas prácticas desde el inicio del proyecto.\n\n## Diseño del Sistema\n\n### Controladores\n - **Controlador de Usuario**: Administra la creación de usuarios, preferencias, valoraciones y proporciona recomendaciones. \n -  **Controlador de Película**: Permite buscar y actualizar información de películas y valoraciones.\n - **Controlador de Carga de Datos**: Inicializa la base de datos con datos relevantes.\n\n### Servicios \nCada controlador utiliza servicios que contienen la lógica de negocio, gestionan operaciones CRUD y aplican la lógica de recomendación.\n\n### Base de Datos\n Se utiliza PostgreSQL para almacenar datos de usuarios, películas y valoraciones.\n\n### Algoritmo de Recomendación\n\nAunque existen múltiples algoritmos para implementar un sistema de recomendación, en esta solución se ha optado por un enfoque sencillo y directo. El algoritmo realiza una consulta a la base de datos para obtener todas las películas que coincidan con al menos uno de los géneros preferidos por el usuario o que incluyan al menos uno de sus actores favoritos. Independientemente de si hay coincidencias de género o actor, el sistema siempre devolverá las 10 películas mejor valoradas en orden descendente. Si el usuario no tiene géneros o actores específicos en sus preferencias, también se le mostrarán las 10 películas mejor valoradas sin importar género o actores.\n\n## Documentación de la API\n\nPara la documentación de la API, se ha utilizado OpenAPI y Swagger. Swagger proporciona una interfaz interactiva que permite explorar y probar los endpoints disponibles. Para poder acceder a esta documentación se debe acceder desde el navegador al url `localhost:3000/api`\n\n## Conclusión\n\nEl sistema de recomendación de películas ha sido diseñado para ser escalable y fácil de mantener, aprovechando la arquitectura modular de NestJS. Con una clara separación de responsabilidades y una robusta documentación de API\n\n## Guía para desarrollo\n\nPara poder seguir la guía de desarrollo del sistema de recomendación de películas, se deben cumplir los siguientes requisitos:\n\n### Requisitos Previos\n\n1. **Git**: Tener instalado Git para clonar el repositorio del proyecto.\n2. **Node.js**: Contar con Node.js instalado en tu máquina (versión 18 o superior) junto con npm, el gestor de paquetes de Node.js.\n3. **Docker**: Tener Docker y Docker Compose instalados y configurados, ya que se utilizarán para levantar la base de datos y otros servicios necesarios.\n\n### Pasos para Ejecutar la aplicación\n1. Clonar repositorio `gh repo clone JDCodeWork/recomendaciones-pelicula`.\n2. Renombrar el archivo `.env.template` a `.env`.\n3. Modificar las variables de entorno de acuerdo a las necesidades.\n4. Levantar la base de datos (`docker-compose up -d`).\n5. Instalar dependencias (`npm install` o `pnpm install`)\n6. Iniciar la aplicación (`npm start:dev`).\n7. Ejecutar una petición `GET /api/seed` para tener datos de prueba \n8. Ingresar desde el navegador a la url `/api` para la documentación\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjdcodework%2Frecomendaciones-peliculas","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjdcodework%2Frecomendaciones-peliculas","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjdcodework%2Frecomendaciones-peliculas/lists"}