Desarrollar una API RESTful para un servicio de streaming (denominado "StreamHub")
que administre el contenido disponible (películas, series), gestione las suscripciones
de los usuarios y controle el acceso a dicho contenido basándose en el estado de pago
de la suscripción, consultando una API externa de pasarela de pagos.
La API debe exponer endpoints claros y seguros, utilizando los métodos HTTP estándar
(CRUD).
Implementar la lógica CRUD para administrar el catálogo de contenido.
Datos del Contenido:
- ID
- Título
- Descripción
- Tipo (Película/Serie)
- Género
- Clasificación de Edad
- URL del stream
Listado: Un endpoint para listar el catálogo completo.
Detalle: Un endpoint para obtener la información detallada de una pieza de contenido por su ID.
Implementar la lógica para registrar usuarios y gestionar su plan de suscripción.
Datos del Usuario:
- ID
- Nombre
- Contraseña (simulada o hash)
- Fecha de Registro
Datos de la Suscripción:
- ID
- ID del Usuario
- Tipo de Plan (ej. Básico, Premium)
- Fecha de Inicio del Período de Facturación (Mensual)
- Estado de la Suscripción (ej. Activa, Cancelada, Pendiente de Pago)
Funcionalidad:
- Crear Suscripción: Asignar un plan a un nuevo usuario, estableciendo la fecha de inicio del período de facturación actual.
El requisito principal del negocio: un usuario solo puede acceder al contenido si su
suscripción está en estado "Activa" (pago al día).
Endpoint de Acceso:
GET /content/{content_id}/play
Debe:
- Verificar la autenticación del usuario (ID de usuario).
- Verificar el estado de su suscripción.
- Si el pago está pendiente o la suscripción cancelada, debe denegar el acceso y devolver un código de error apropiado (ej.
403 Forbidden). - Si el pago está activo, debe permitir el acceso (ej. devolviendo la URL del stream).
El sistema depende de una API externa para validar la vigencia de la suscripción.
El sistema debe almacenar y utilizar la configuración del sistema de pagos.
Datos de la Pasarela:
- ID
- Nombre
- URL base de su API para consulta de pagos
- API Key o Credenciales de acceso (simuladas)
Implementar un mecanismo que utilice la pasarela externa para mantener el estado de la
suscripción actualizado.
Función de Verificación de Pago:
Crear una función (que podría ser invocada por un proceso batch diario o por un endpoint de conciliación) que haga lo siguiente para cada usuario con una suscripción:
- Calcule el Código de Pago Único que debería tener la boleta de ese mes para el usuario (simulado).
- Consulte la API de la Pasarela de Pagos (utilizando la URL y credenciales del punto 4) enviando el Código de Pago Único.
- Actualice el Estado de la Suscripción:
- Si la Pasarela confirma el pago, el estado se mantiene o se establece a "Activa".
- Si la Pasarela no confirma el pago (y el período de facturación ya venció), el estado se establece a "Pendiente de Pago".
- Implementar un sistema de Autenticación/Autorización (simulando tokens JWT o API Keys) para proteger los endpoints sensibles.
- Manejar el concepto de Período de Facturación para saber exactamente qué mes debe consultar en la Pasarela de Pagos.
- El código fuente de la API RESTful.
- El modelo de la base de datos para Contenido, Usuarios y Suscripciones.
- Documentación de los endpoints principales, con especial énfasis en el flujo de Control de Acceso.
Implementar un endpoint que permita a los usuarios cancelar su suscripción,
estableciendo el estado a "Cancelada", pero permitiendo el acceso al contenido hasta el
final del período de facturación ya pagado.