Files
kycnotme/web/src/actions/admin/notification.ts

37 lines
1.1 KiB
TypeScript
Raw Normal View History

2025-06-02 03:53:03 +00:00
import { z } from 'astro/zod'
import { defineProtectedAction } from '../../lib/defineProtectedAction'
import { prisma } from '../../lib/prisma'
2025-06-04 19:37:33 +00:00
import { sendNotifications } from '../../lib/sendNotifications'
2025-06-02 03:53:03 +00:00
import { stringListOfSlugsSchemaRequired } from '../../lib/zodUtils'
export const adminNotificationActions = {
2025-06-04 19:37:33 +00:00
test: defineProtectedAction({
accept: 'form',
permissions: 'admin',
input: z.object({
userNames: stringListOfSlugsSchemaRequired,
}),
handler: async (input) => {
const users = await prisma.user.findMany({
where: { name: { in: input.userNames } },
select: { id: true },
})
2025-06-02 03:53:03 +00:00
2025-06-04 19:37:33 +00:00
const notifications = await prisma.notification.createManyAndReturn({
data: users.map((user) => ({
type: 'TEST',
userId: user.id,
})),
select: { id: true },
})
2025-06-02 03:53:03 +00:00
2025-06-04 19:37:33 +00:00
const results = await sendNotifications(notifications.map((notification) => notification.id))
2025-06-02 03:53:03 +00:00
2025-06-04 19:37:33 +00:00
return {
message: `Sent to ${results.subscriptions.success.toLocaleString()} devices, ${results.subscriptions.failure.toLocaleString()} failed.`,
}
},
}),
2025-06-02 03:53:03 +00:00
}