{"id":25666442,"url":"https://github.com/rafavermar/fastapi_redis_mongodb","last_synced_at":"2025-07-29T15:35:48.529Z","repository":{"id":259694144,"uuid":"879201050","full_name":"Rafavermar/FastAPI_REDIS_MONGODB","owner":"Rafavermar","description":"Este proyecto consiste en el desarrollo de una API que maneja información de películas, utilizando FastAPI como framework principal. Se integra con MongoDB para la persistencia de usuarios y Redis para el almacenamiento en caché de datos de películas. La seguridad se implementa mediante JWT (OAuth2 con “password flow”) y claves de API. Todo ello se","archived":false,"fork":false,"pushed_at":"2024-12-23T09:30:35.000Z","size":7393,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-24T08:38:04.453Z","etag":null,"topics":["fastapi","jwt","mongodb","redis-cache"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Rafavermar.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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-10-27T09:26:52.000Z","updated_at":"2024-12-23T09:36:42.000Z","dependencies_parsed_at":"2025-02-24T08:42:11.516Z","dependency_job_id":null,"html_url":"https://github.com/Rafavermar/FastAPI_REDIS_MONGODB","commit_stats":null,"previous_names":["rafavermar/fastapi_redis_mongodb"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Rafavermar/FastAPI_REDIS_MONGODB","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rafavermar%2FFastAPI_REDIS_MONGODB","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rafavermar%2FFastAPI_REDIS_MONGODB/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rafavermar%2FFastAPI_REDIS_MONGODB/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rafavermar%2FFastAPI_REDIS_MONGODB/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Rafavermar","download_url":"https://codeload.github.com/Rafavermar/FastAPI_REDIS_MONGODB/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rafavermar%2FFastAPI_REDIS_MONGODB/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267709625,"owners_count":24131924,"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-07-29T02:00:12.549Z","response_time":2574,"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":["fastapi","jwt","mongodb","redis-cache"],"created_at":"2025-02-24T08:30:14.429Z","updated_at":"2025-07-29T15:35:48.519Z","avatar_url":"https://github.com/Rafavermar.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Best Movies API\n\nEste proyecto consiste en el desarrollo de una **API** que maneja información de películas, utilizando **FastAPI** como framework principal. Se integra con **MongoDB** para la persistencia de usuarios y **Redis** para el almacenamiento en caché de datos de películas. La seguridad se implementa mediante **JWT** (OAuth2 con “password flow”) y claves de API. Todo ello se despliega usando **Docker** y **Docker Compose**, asegurando un entorno portable y reproducible.\n\n---\n\n## Contenido\n\n1. [Características Principales](#características-principales)  \n2. [Arquitectura](#arquitectura)  \n3. [Requisitos](#requisitos)  \n4. [Puesta en Marcha](#puesta-en-marcha)  \n    1. [Clonar el repositorio](#1-clonar-el-repositorio)  \n    2. [Configurar variables de entorno (opcional)](#2-configurar-variables-de-entorno-opcional)  \n    3. [Levantar los contenedores con docker-compose](#3-levantar-los-contenedores-con-docker-compose)  \n    4. [Explorar la API con Swagger](#4-explorar-la-api-con-swagger)  \n    5. [Uso de Postman](#5-uso-de-postman)  \n5. [Endpoints Disponibles](#endpoints-disponibles)  \n6. [Colección Postman y CSV](#colección-postman-y-csv)  \n7. [Notas Adicionales](#notas-adicionales)\n\n---\n\n## Características Principales\n\n- **Registro de usuarios** en MongoDB, validando calificación de contenido (`G`, `PG`, `PG-13`, `R`, `NC-17`) y credenciales.\n- **Autenticación** mediante **JWT** (con `grant_type=password`) para solicitar tokens de acceso.\n- **Claves de API** para restringir ciertos endpoints.  \n- **Películas** cargadas en **Redis** desde un CSV, filtradas inicialmente (en la carga) por ciertas condiciones (`tomatometer_status=\"Certified-Fresh\"`, `content_rating != NR`).\n- **Endpoints** para obtener lista de películas filtradas por la calificación de contenido del usuario y para consultar el tamaño de las claves en Redis.\n- **Containerización** con Docker y orquestación con docker-compose.\n\n---\n\n## Arquitectura\n\n\n\n\n1. El **contenedor FastAPI** inicia y carga datos en Redis desde un CSV.  \n2. MongoDB gestiona el registro y autenticación de usuarios.  \n3. Redis almacena la información de películas.  \n4. Los usuarios interactúan con la API para registrarse, solicitar tokens y consultar películas.\n\n---\n\n## Requisitos\n\n- **Docker** y **Docker Compose** instalados en tu máquina.  \n- Conexión a Internet (si quieres bajar la imagen desde Docker Hub).\n\n---\n\n## Puesta en Marcha\n\n### 1. Clonar el repositorio\n\n```bash\ngit clone https://github.com/tu-usuario/best-movies-api.git\ncd best-movies-api\n```\n\n\n\n### 2. Configurar variables de entorno (opcional)\n\nEl proyecto ya define, en su docker-compose.yml, variables de entorno como API_KEY y SECRET_KEY.\nSi deseas cambiarlas, puedes editarlas directamente en docker-compose.yml o agregar un archivo .env.\n\n### 3. Levantar los contenedores con docker-compose\n```bash\ndocker-compose up -d\n```\nEste comando levantará tres contenedores:\n- redis\n- mongodb\n- act4 (la imagen FastAPI)\n\n**Nota:** El contenedor de FastAPI expone el puerto 4242.\n\n### 4. Explorar la API con Swagger\nUna vez que los contenedores estén corriendo:\n\nAbre tu navegador web.\n\nVe a http://localhost:4242/docs para Swagger UI o a http://localhost:4242/redoc para Redoc.\n\nPodrás ver la documentación interactiva, probar los endpoints y ver las peticiones/ respuestas en tiempo real.\n\n### 5. Uso de Postman\nEn la carpeta Assets encontrarás la colección de Postman y el entorno necesarios para probar la API.\n\nImporta la colección (FastAPI Movie API.postman_collection.json) en Postman.\nConfigura las variables de entorno con FastAPI_Movie_API_Collection_ENV.postman_environment.json si lo deseas.\n\n## Endpoints Disponibles\nA continuación se describen los endpoints principales:\n\n1. **Registrar Usuario**\n\n- Endpoint: POST /act4/register?api_key=TU_API_KEY\n- Descripción: Registra un nuevo usuario.\n- Cuerpo de la petición (JSON):\n```json\n{\n  \"username\": \"string\", \n  \"password\": \"string\",\n  \"content_rating\": \"G/PG/PG-13/R/NC-17\"\n}\n```\n\n- Respuestas:\n  - 204 No Content: Usuario registrado con éxito.\n  - 400: Usuario ya registrado.\n  - 422: Error en validación (username o password inválidos, content_rating fuera de rango).\n  - 401: API Key no válida.\n  \n2. **Solicitar Token**\n\n- Endpoint: POST /act4/token\n- Descripción: Solicita un token JWT usando OAuth2 (grant type = password).\n- Cuerpo de la petición (form-url-encoded):\n```makefile\ngrant_type=password\u0026username=TU_USUARIO\u0026password=TU_PASSWORD\n```\n- Respuestas:\n  - 200 OK: Devuelve access_token.\n  - 401: Usuario/contraseña inválidos.\n  \n3. **Obtener Películas por Calificación**\n\n- Endpoint: GET /act4/movies-by-content-rating\n- Descripción: Retorna las 10 películas mejor valoradas (por tomatometer_rating), filtradas por la calificación de contenido del usuario autenticado.\n- Auth requerida: Se envía el token JWT en el encabezado Authorization: Bearer \u003ctoken\u003e.\n- Respuestas:\n  - 200 OK: Devuelve lista de películas.\n  - 401: Token inválido o caducado.\n  \n4. **Obtener Tamaño de Claves en Redis**\n\n- Endpoint: GET /act4/key-list-size?api_key=TU_API_KEY\n- Descripción: Devuelve la cantidad de keys (películas) que hay en Redis.\n- Respuestas:\n  - 200 OK: Devuelve key_list_size.\n  - 401: API Key no válida.\n\n## Colección Postman y CSV\nEn el directorio Assets se incluyen:\n\n- rotten_tomatoes_movies.csv: Archivo con datos de películas cargado en Redis al iniciar el contenedor.\n- FastAPI Movie API.postman_collection.json: Colección para Postman con ejemplos de llamadas a los endpoints.\n- FastAPI_Movie_API_Collection_ENV.postman_environment.json: Variables de entorno para Postman.\n- \n## Notas Adicionales\nImagen Docker en Docker Hub (opcional):\nSi deseas usar directamente la imagen ya compilada, revisa en docker-compose.yml la línea:\n\n```yaml\nimage: jrvm/eoi-fastapi-act4:v2\n```\n\nPuedes cambiarla si quieres usar tu propia imagen.\n\n**Variables de Entorno Importantes:**\n\n- API_KEY: Para los endpoints que requieren ?api_key=\n- SECRET_KEY: Para firmar los JWT.\n- Versión de Python: 3.9 (definida en el Dockerfile).\n\nSwagger/OpenAPI: disponible en http://localhost:4242/docs.\n\nRedoc: disponible en http://localhost:4242/redoc.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frafavermar%2Ffastapi_redis_mongodb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frafavermar%2Ffastapi_redis_mongodb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frafavermar%2Ffastapi_redis_mongodb/lists"}