EmberClone/apps/api/src/routes/notifications.ts

38 lines
1.1 KiB
TypeScript

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 }
})
}