import { Account } from "~/shared/types/account"; import { readAccounts, writeAccounts } from "~/server/database"; import { DateTime } from "luxon"; export default defineEventHandler(async (event) => { const session = await requireAccountSession(event); const body: Pick = await readBody(event); if ( body.interestedIds !== undefined && !( !(body.interestedIds instanceof Array) || !body.interestedIds.every(id => typeof id === "string") ) ) { throw createError({ status: 400, message: "Invalid interestedIds", }); } if (body.timezone !== undefined) { if (typeof body.timezone !== "string") { throw createError({ status: 400, message: "Invalid timezone", }); } if (body.timezone.length) { const zonedTime = DateTime.local().setZone(body.timezone); if (!zonedTime.isValid) { throw createError({ status: 400, message: "Invalid timezone: " + zonedTime.invalidExplanation, }); } } } const accounts = await readAccounts(); const sessionAccount = accounts.find(account => account.id === session.accountId); if (!sessionAccount) { throw Error("Account does not exist"); } if (body.interestedIds !== undefined) { if (body.interestedIds.length) { sessionAccount.interestedIds = body.interestedIds; } else { delete sessionAccount.interestedIds; } } if (body.timezone !== undefined) { if (body.timezone) sessionAccount.timezone = body.timezone; else delete sessionAccount.timezone; } await writeAccounts(accounts); // Update Schedule counts. await updateScheduleInterestedCounts(accounts); })