98 lines
2.7 KiB
JavaScript
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 {
|
|
}
|
|
});
|