localgreenchain/pages/api/notifications/preferences.ts
Claude 62c1ded598
Add comprehensive notification system (Agent 8)
Implement multi-channel notification system with:
- Core notification service with email, push, and in-app channels
- Email templates for all notification types (welcome, plant registered,
  transport alerts, farm alerts, harvest ready, demand matches, weekly digest)
- Push notification support with VAPID authentication
- In-app notification management with read/unread tracking
- Notification scheduler for recurring and scheduled notifications
- API endpoints for notifications CRUD, preferences, and subscriptions
- UI components (NotificationBell, NotificationList, NotificationItem,
  PreferencesForm)
- Full notifications page with preferences management
- Service worker for push notification handling
2025-11-23 03:52:41 +00:00

79 lines
1.8 KiB
TypeScript

/**
* API: Notification Preferences Endpoint
* GET /api/notifications/preferences - Get user preferences
* PUT /api/notifications/preferences - Update user preferences
*/
import type { NextApiRequest, NextApiResponse } from 'next';
import { getNotificationService } from '../../../lib/notifications';
export default async function handler(
req: NextApiRequest,
res: NextApiResponse
) {
const notificationService = getNotificationService();
// In production, get userId from session/auth
const userId = req.query.userId as string || req.body?.userId || 'demo-user';
if (req.method === 'GET') {
try {
const preferences = notificationService.getUserPreferences(userId);
return res.status(200).json({
success: true,
data: preferences
});
} catch (error: any) {
return res.status(500).json({
success: false,
error: error.message
});
}
}
if (req.method === 'PUT') {
try {
const {
email,
push,
inApp,
plantReminders,
transportAlerts,
farmAlerts,
harvestAlerts,
demandMatches,
weeklyDigest,
quietHoursStart,
quietHoursEnd,
timezone
} = req.body;
const preferences = notificationService.updatePreferences(userId, {
email,
push,
inApp,
plantReminders,
transportAlerts,
farmAlerts,
harvestAlerts,
demandMatches,
weeklyDigest,
quietHoursStart,
quietHoursEnd,
timezone
});
return res.status(200).json({
success: true,
data: preferences
});
} catch (error: any) {
return res.status(500).json({
success: false,
error: error.message
});
}
}
return res.status(405).json({ error: 'Method not allowed' });
}