Files

95 lines
2.4 KiB
JavaScript

import prisma from "~/server/utils/prisma";
export default defineEventHandler(async (event) => {
try {
// Get current user (assuming auth middleware provides this)
const user = event.context.user;
if (!user || !user.userID) {
throw createError({
statusCode: 401,
statusMessage: "Authentication required",
});
}
const body = await readBody(event);
const { action = 'failed_only' } = body; // 'failed_only', 'completed_only', 'all_old'
let whereCondition = {};
switch (action) {
case 'failed_only':
whereCondition = {
status: 'failed'
};
break;
case 'completed_only':
whereCondition = {
status: 'completed'
};
break;
case 'all_old':
// Clear items older than 1 hour except queued ones
whereCondition = {
created_at: {
lt: new Date(Date.now() - 60 * 60 * 1000) // 1 hour ago
},
status: {
not: 'queued'
}
};
break;
case 'all_except_latest':
// Get the latest notification ID first
const latestNotification = await prisma.notifications.findFirst({
orderBy: { created_at: 'desc' },
select: { id: true }
});
if (latestNotification) {
whereCondition = {
notification_id: {
not: latestNotification.id
},
status: {
in: ['failed', 'completed']
}
};
}
break;
default:
throw createError({
statusCode: 400,
statusMessage: "Invalid action. Use: failed_only, completed_only, all_old, all_except_latest"
});
}
// Delete queue items based on condition
const deleteResult = await prisma.notification_queue.deleteMany({
where: whereCondition
});
return {
success: true,
data: {
message: `Cleared ${deleteResult.count} queue items`,
action,
deletedCount: deleteResult.count
}
};
} catch (error) {
console.error('Error clearing queue:', error);
if (error.statusCode) {
throw error;
}
throw createError({
statusCode: 500,
statusMessage: 'Failed to clear queue',
data: {
error: error.message
}
});
} finally {
}
});