88 lines
2.3 KiB
JavaScript
88 lines
2.3 KiB
JavaScript
import { z } from 'zod';
|
|
import prisma from "~/server/utils/prisma";
|
|
|
|
const settingsSchema = z.object({
|
|
autoRetry: z.boolean(),
|
|
enableFallback: z.boolean(),
|
|
maxRetries: z.number().int().min(0).max(5),
|
|
retryDelay: z.number().int().min(1).max(300),
|
|
priority: z.enum(['low', 'normal', 'high']),
|
|
enableReports: z.boolean()
|
|
});
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
try {
|
|
// Get current user from auth middleware
|
|
const user = event.context.user;
|
|
if (!user) {
|
|
throw createError({
|
|
statusCode: 401,
|
|
statusMessage: "Authentication required",
|
|
});
|
|
}
|
|
|
|
// Validate request body
|
|
const body = await readValidatedBody(event, settingsSchema.parse);
|
|
|
|
// Update or create delivery settings
|
|
const settings = await prisma.notification_delivery_settings.upsert({
|
|
where: {
|
|
id: 1 // Only one settings record
|
|
},
|
|
update: {
|
|
auto_retry: body.autoRetry,
|
|
enable_fallback: body.enableFallback,
|
|
max_retries: body.maxRetries,
|
|
retry_delay: body.retryDelay,
|
|
priority: body.priority,
|
|
enable_reports: body.enableReports,
|
|
updated_at: new Date(),
|
|
updated_by: user.id
|
|
},
|
|
create: {
|
|
id: 1,
|
|
auto_retry: body.autoRetry,
|
|
enable_fallback: body.enableFallback,
|
|
max_retries: body.maxRetries,
|
|
retry_delay: body.retryDelay,
|
|
priority: body.priority,
|
|
enable_reports: body.enableReports,
|
|
created_by: user.id,
|
|
updated_by: user.id
|
|
}
|
|
});
|
|
|
|
return {
|
|
success: true,
|
|
data: {
|
|
autoRetry: settings.auto_retry,
|
|
enableFallback: settings.enable_fallback,
|
|
maxRetries: settings.max_retries,
|
|
retryDelay: settings.retry_delay,
|
|
priority: settings.priority,
|
|
enableReports: settings.enable_reports
|
|
}
|
|
};
|
|
} catch (error) {
|
|
console.error('Error updating delivery settings:', error);
|
|
|
|
if (error instanceof z.ZodError) {
|
|
throw createError({
|
|
statusCode: 400,
|
|
statusMessage: 'Invalid request data',
|
|
data: error.errors
|
|
});
|
|
}
|
|
|
|
if (error.statusCode) {
|
|
throw error;
|
|
}
|
|
|
|
throw createError({
|
|
statusCode: 500,
|
|
statusMessage: 'Failed to update delivery settings'
|
|
});
|
|
} finally {
|
|
await prisma.$disconnect();
|
|
}
|
|
});
|