import { FastifyInstance } from "fastify" import { db } from "../db" import { users } from "../db/schema" import { emailService } from "../services/email" export default async function notificationRoutes(fastify: FastifyInstance) { fastify.addHook("preHandler", async (request, reply) => { try { await request.jwtVerify() } catch (err) { return reply.code(401).send({ message: "Unauthorized" }) } }) const isAdmin = (request: any) => { return (request.user as { sub: string, role: string })?.role === "admin" } fastify.post("/send-weekly-summary", async (request, reply) => { if (!isAdmin(request)) { return reply.code(403).send({ message: "Forbidden: Admin role required" }) } const allUsers = await db.select().from(users) let sentCount = 0 for (const user of allUsers) { try { await emailService.sendWeeklySummary(user) sentCount++ } catch (error) { fastify.log.error(`Failed to send weekly summary to ${user.email}: ${error}`) } } return { sent: sentCount } }) }