Update various configuration files, components, and assets; enhance notification system and API endpoints; improve documentation and styles across the application.
This commit is contained in:
98
server/api/notifications/batch/index.post.js
Normal file
98
server/api/notifications/batch/index.post.js
Normal file
@@ -0,0 +1,98 @@
|
||||
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 {
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user