import { Account } from "~/shared/types/account"; import { readAccounts, readSchedule, writeAccounts, writeSchedule } from "~/server/database"; import { broadcastUpdate } from "~/server/streams"; export default defineEventHandler(async (event) => { const session = await requireAccountSession(event); const body: Pick = await readBody(event); if ( !(body.interestedIds instanceof Array) || !body.interestedIds.every(id => typeof id === "string") ) { throw createError({ status: 400, message: "Invalid interestedIds", }); } const accounts = await readAccounts(); const sessionAccount = accounts.find(account => account.id === session.accountId); if (!sessionAccount) { throw Error("Account does not exist"); } if (body.interestedIds.length) { sessionAccount.interestedIds = body.interestedIds; } else { delete sessionAccount.interestedIds; } await writeAccounts(accounts); const counts = new Map(); for (const account of accounts) if (account.interestedIds) for (const id of account.interestedIds) counts.set(id, (counts.get(id) ?? 0) + 1); const schedule = await readSchedule(); for (const event of schedule.events) { event.interested = counts.get(event.id); for (const slot of event.slots) { slot.interested = counts.get(slot.id); } } await writeSchedule(schedule); broadcastUpdate(schedule); })