ghostguild-org/server/api/events/[id]/waitlist.delete.js

59 lines
1.4 KiB
JavaScript

import Event from "../../../models/event";
export default defineEventHandler(async (event) => {
const id = getRouterParam(event, "id");
const body = await readBody(event);
const { email } = body;
if (!email) {
throw createError({
statusCode: 400,
statusMessage: "Email is required",
});
}
try {
// Find event by ID or slug
const eventData = await Event.findOne({
$or: [{ _id: id }, { slug: id }],
});
if (!eventData) {
throw createError({
statusCode: 404,
statusMessage: "Event not found",
});
}
// Find and remove from waitlist
const waitlistIndex = eventData.tickets?.waitlist?.entries?.findIndex(
(entry) => entry.email.toLowerCase() === email.toLowerCase()
);
if (waitlistIndex === -1 || waitlistIndex === undefined) {
throw createError({
statusCode: 404,
statusMessage: "You are not on the waitlist for this event",
});
}
eventData.tickets.waitlist.entries.splice(waitlistIndex, 1);
await eventData.save();
return {
success: true,
message: "You have been removed from the waitlist",
};
} catch (error) {
if (error.statusCode) {
throw error;
}
console.error("Error leaving waitlist:", error);
throw createError({
statusCode: 500,
statusMessage: "Failed to leave waitlist",
});
}
});