An account refers to the user the active session is logged in as. As such it doesn't make sense outside of the /auth API paths that deals with the current authenticated user. Move /api/account to /api/auth/account to reflect this.
62 lines
1.6 KiB
TypeScript
62 lines
1.6 KiB
TypeScript
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<Account, "interestedIds" | "timezone"> = 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({ locale: "en-US" }).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);
|
|
})
|