import type { Request, Response } from 'express' import { z } from 'zod' import { registrarSuscripcion, eliminarSuscripcion, obtenerVapidPublicKey, } from '../services/push.service.js' const suscripcionSchema = z.object({ endpoint: z.string().url(), p256dh: z.string().min(1), auth: z.string().min(1), }) /** POST /api/push/suscribir — registrar suscripción push del navegador */ export async function suscribirEndpoint(req: Request, res: Response): Promise { const usuarioId = req.usuarioToken?.sub if (!usuarioId) { res.status(401).json({ error: 'Token requerido' }) return } const body = suscripcionSchema.parse(req.body) await registrarSuscripcion(usuarioId, body) res.json({ ok: true }) } /** POST /api/push/desuscribir — eliminar suscripción push */ export async function desuscribirEndpoint(req: Request, res: Response): Promise { const usuarioId = req.usuarioToken?.sub if (!usuarioId) { res.status(401).json({ error: 'Token requerido' }) return } await eliminarSuscripcion(usuarioId) res.json({ ok: true }) } /** GET /api/push/vapid-key — devuelve la VAPID public key (pública) */ export function vapidKeyEndpoint(_req: Request, res: Response): void { res.json({ publicKey: obtenerVapidPublicKey() }) }