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.