Files
Nas-Notification/server/api/notifications/batch/index.post.js

98 lines
2.7 KiB
JavaScript

import { z } from "zod";
import prisma from "~/server/utils/prisma";
// Validation schema for batch creation
const createBatchSchema = z.object({
name: z.string().min(1, "Batch name is required"),
type: z.string().min(1, "Message type is required"),
description: z.string().optional(),
priority: z.string().default("medium"),
template: z.string().optional(),
segment: z.string().optional(),
scheduledAt: z.string().optional(),
});
export default defineEventHandler(async (event) => {
try {
// Parse and validate request body
const body = await readBody(event);
const batchData = createBatchSchema.parse(body);
// Create a new batch notification
const newBatch = await prisma.notifications.create({
data: {
title: batchData.name,
type: batchData.type,
priority: batchData.priority,
delivery_type: "batch",
status: batchData.scheduledAt ? "scheduled" : "draft",
scheduled_at: batchData.scheduledAt ? new Date(batchData.scheduledAt) : null,
audience_type: batchData.segment ? "segment" : "all",
content_type: "template",
template_id: batchData.template || null,
created_by: "system", // In a real application, this would be the user ID
created_at: new Date(),
updated_at: new Date(),
},
});
// If a segment is specified, create the segment association
if (batchData.segment) {
await prisma.notification_user_segments.create({
data: {
notification_id: newBatch.id,
segment_id: batchData.segment,
created_at: new Date(),
},
});
}
// Log the batch creation
await prisma.notification_logs.create({
data: {
notification_id: newBatch.id,
action: "Batch Created",
actor_id: "system", // In a real application, this would be the user ID
status: newBatch.status,
details: `Batch notification "${batchData.name}" created`,
created_at: new Date(),
},
});
return {
success: true,
data: {
id: newBatch.id,
name: newBatch.title,
status: newBatch.status,
message: "Batch created successfully",
},
};
} catch (error) {
console.error("Error creating batch:", error);
// Handle validation errors
if (error.name === "ZodError") {
throw createError({
statusCode: 400,
statusMessage: "Invalid batch data",
data: {
errors: error.errors,
},
});
}
if (error.statusCode) {
throw error;
}
throw createError({
statusCode: 500,
statusMessage: "Failed to create batch",
data: {
error: error.message,
},
});
} finally {
}
});