owltide/server/api/auth/account.delete.ts

46 lines
1.3 KiB
TypeScript
Raw Normal View History

2025-03-07 22:28:55 +01:00
import {
readAccounts, readSessions, readSubscriptions,
writeAccounts, writeSessions, writeSubscriptions,
} from "~/server/database";
import { cancelAccountStreams } from "~/server/streams";
2025-03-07 22:28:55 +01:00
export default defineEventHandler(async (event) => {
const serverSession = await requireServerSession(event);
2025-03-07 22:28:55 +01:00
let accounts = await readAccounts();
const sessionAccount = accounts.find(
account => account.id === serverSession.accountId
2025-03-07 22:28:55 +01:00
);
if (!sessionAccount) {
throw Error("Account does not exist");
}
// Remove sessions for this account
const removedSessionIds = new Set<number>();
let sessions = await readSessions();
sessions = sessions.filter(session => {
if (session.accountId === serverSession.accountId) {
2025-03-07 22:28:55 +01:00
removedSessionIds.add(session.id);
return false;
}
return true;
});
cancelAccountStreams(serverSession.accountId);
2025-03-07 22:28:55 +01:00
await writeSessions(sessions);
await deleteCookie(event, "session");
// Remove subscriptions for this account
let subscriptions = await readSubscriptions();
subscriptions = subscriptions.filter(
subscription => !removedSessionIds.has(subscription.sessionId)
);
await writeSubscriptions(subscriptions);
// Remove the account
accounts = accounts.filter(account => account.id !== serverSession.accountId);
2025-03-07 22:28:55 +01:00
await writeAccounts(accounts);
// Update Schedule counts.
await updateScheduleInterestedCounts(accounts);
})