74 lines
2.1 KiB
JavaScript
74 lines
2.1 KiB
JavaScript
import express from 'express';
|
|
import { getPublicKey, getPushSubscriptions, savePushSubscriptions } from '../services/webPush.js';
|
|
|
|
const router = express.Router();
|
|
|
|
// Obtener clave pública VAPID
|
|
router.get('/public-key', (req, res) => {
|
|
try {
|
|
const publicKey = getPublicKey();
|
|
res.json({ publicKey });
|
|
} catch (error) {
|
|
res.status(500).json({ error: error.message });
|
|
}
|
|
});
|
|
|
|
// Suscribirse a notificaciones push
|
|
router.post('/subscribe', async (req, res) => {
|
|
try {
|
|
const subscription = req.body;
|
|
|
|
if (!subscription || !subscription.endpoint) {
|
|
return res.status(400).json({ error: 'Suscripción inválida' });
|
|
}
|
|
|
|
const subscriptions = getPushSubscriptions();
|
|
|
|
// Verificar si ya existe esta suscripción
|
|
const existingIndex = subscriptions.findIndex(
|
|
sub => sub.endpoint === subscription.endpoint
|
|
);
|
|
|
|
if (existingIndex >= 0) {
|
|
subscriptions[existingIndex] = subscription;
|
|
} else {
|
|
subscriptions.push(subscription);
|
|
}
|
|
|
|
savePushSubscriptions(subscriptions);
|
|
console.log(`✅ Nueva suscripción push guardada. Total: ${subscriptions.length}`);
|
|
|
|
res.json({ success: true, totalSubscriptions: subscriptions.length });
|
|
} catch (error) {
|
|
console.error('Error guardando suscripción push:', error);
|
|
res.status(500).json({ error: error.message });
|
|
}
|
|
});
|
|
|
|
// Cancelar suscripción push
|
|
router.post('/unsubscribe', async (req, res) => {
|
|
try {
|
|
const subscription = req.body;
|
|
|
|
if (!subscription || !subscription.endpoint) {
|
|
return res.status(400).json({ error: 'Suscripción inválida' });
|
|
}
|
|
|
|
const subscriptions = getPushSubscriptions();
|
|
const filtered = subscriptions.filter(
|
|
sub => sub.endpoint !== subscription.endpoint
|
|
);
|
|
|
|
savePushSubscriptions(filtered);
|
|
console.log(`✅ Suscripción push cancelada. Total: ${filtered.length}`);
|
|
|
|
res.json({ success: true, totalSubscriptions: filtered.length });
|
|
} catch (error) {
|
|
console.error('Error cancelando suscripción push:', error);
|
|
res.status(500).json({ error: error.message });
|
|
}
|
|
});
|
|
|
|
export default router;
|
|
|