rmb
EN

API de Películas

Aplicación del lado del servidor construida con NestJS y TypeScript para gestionar películas, favoritos de usuario, autenticación y claves API.

API de Películas
NestJSTypeScriptMongoDBDocker

🌍 Descripción General

La API de Películas es una aplicación del lado del servidor construida con NestJS y TypeScript. Proporciona endpoints para gestionar películas, favoritos de usuario, autenticación y claves API. La API está diseñada con arquitectura modular, validación robusta y mecanismos de autenticación seguros.

  • NestJS
  • TypeScript
  • MongoDB
  • Docker

⚡ Funcionalidades

  • 🔒 Autenticación: Inicio de sesión seguro, registro y autenticación basada en tokens.
  • 🎬 Películas: Obtener películas populares, en tendencia, mejor valoradas y próximas desde TMDB.
  • 👾 Favoritos: Gestionar películas favoritas por usuario.
  • 🔑 Claves API: Generar, validar y gestionar claves API para integraciones externas.
  • 📚 Documentación Swagger: Documentación interactiva de la API.

🛠️ Stack Tecnológico

El proyecto está construido usando las siguientes tecnologías:

  • 🚀 TypeScript
  • 🦸‍♂️ NestJS
  • 🗄️ MongoDB
  • 🐳 Docker
  • 📚 Swagger

📚 Documentación de la API

🔐 Endpoints de Autenticación

📍 POST /auth/login

Autentica un usuario y retorna tokens de acceso y refresco.

📥 Cuerpo de la Solicitud
{
  "email": "user@mail.com",
  "password": "secure@pass123"
}
📤 Respuesta
{
  "user": {
    "id": "123",
    "email": "user@mail.com",
    "name": "User"
  },
  "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}

📍 POST /auth/register

Registrar un nuevo usuario.

📥 Cuerpo de la Solicitud
{
  "name": "User",
  "email": "user@mail.com",
  "password": "secure@pass123"
}
📤 Respuesta
{
  "user": {
    "id": "123",
    "email": "user@mail.com",
    "name": "User"
  },
  "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}

📍 POST /auth/refresh

Refresca el token de acceso usando un token de refresco.

📥 Cuerpo de la Solicitud
{
  "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
📤 Respuesta
{
  "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}

🎬 Endpoints de Películas

📍 GET /movies/popular

Obtener películas populares desde TMDB.

  • Parámetros de consulta: page (opcional): Número de página para paginación.
📤 Respuesta
{
  "page": 1,
  "results": [
    {
      "id": 550,
      "title": "Fight Club",
      "overview": "A ticking-time-bomb insomniac...",
      "poster_path": "/poster.jpg",
      "release_date": "1999-10-15",
      "vote_average": 8.4
    }
  ],
  "total_results": 1000,
  "total_pages": 50
}

📍 GET /movies/trending

Obtener películas en tendencia.

  • Parámetros de consulta: timeWindow (opcional): day o week.
📤 Respuesta
{
  "page": 1,
  "results": [
    {
      "id": 550,
      "title": "Fight Club",
      "overview": "A ticking-time-bomb insomniac...",
      "poster_path": "/poster.jpg",
      "release_date": "1999-10-15",
      "vote_average": 8.4
    }
  ],
  "total_results": 1000,
  "total_pages": 50
}

📍 GET /movies/:id

Obtener información detallada de una película.

  • Parámetros de ruta: id: ID de la película en TMDB.
📤 Respuesta
{
  "id": 550,
  "title": "Fight Club",
  "overview": "A ticking-time-bomb insomniac...",
  "poster_path": "/poster.jpg",
  "release_date": "1999-10-15",
  "vote_average": 8.4,
  "genres": [{"id": 18, "name": "Drama"}]
}

👾 Endpoints de Favoritos

📍 POST /favorites

Agregar una película a favoritos.

📥 Cuerpo de la Solicitud
{
  "movieId": "550"
}
📤 Respuesta
{
  "id": "123",
  "movieId": "550",
  "title": "Fight Club",
  "overview": "A ticking-time-bomb insomniac...",
  "releaseDate": "1999-10-15",
  "tmdbRating": 8.4
}

📍 GET /favorites

Obtener todos los favoritos del usuario autenticado.

  • Parámetros de consulta: page (opcional): Número de página para paginación. limit (opcional): Número de elementos por página.
📤 Respuesta
{
  "results": [
    {
      "id": "123",
      "movieId": "550",
      "title": "Fight Club",
      "overview": "A ticking-time-bomb insomniac...",
      "releaseDate": "1999-10-15",
      "tmdbRating": 8.4
    }
  ],
  "total": 10,
  "page": 1,
  "limit": 10
}

🔑 Endpoints de Claves API

📍 POST /api-keys

Generar una nueva clave API.

📥 Cuerpo de la Solicitud
{
  "description": "Mobile application integration",
  "expiresInDays": 30
}
📤 Respuesta
{
  "id": "123",
  "key": "abcd1234-5678-efgh-ijkl-9876543210mn",
  "description": "Mobile application integration",
  "expiresAt": "2025-12-31T23:59:59Z",
  "createdAt": "2025-07-01T12:00:00Z"
}

📍 GET /api-keys

Obtener todas las claves API (solo admin).

📤 Respuesta
[
  {
    "id": "123",
    "description": "Mobile application integration",
    "expiresAt": "2025-12-31T23:59:59Z",
    "createdAt": "2025-07-01T12:00:00Z",
    "isActive": true,
    "usageCount": 10
  }
]
Publicado: 18/09/2025

Proyectos Relacionados

Chatbot App
Una aplicación de chatbot potenciado por IA, diseñado para soporte rápido, amigable e interactivo.
Next Store
Aplicación web de e-commerce escalable construida con Next.js y PostgreSQL, con catálogo de productos, autenticación de usuarios y sistema de carrito de compras.
Med Monitor App
Med Monitor App es un sistema nativo en la nube diseñado para monitorizar signos vitales de pacientes, gestionar alertas y generar informes. Utiliza arquitectura de microservicios con mensajería en tiempo real e integración segura en la nube. El sistema ofrece un dashboard responsivo y APIs REST para interactuar con datos de pacientes, alertas, signos vitales e informes.