2025-03-07 22:28:55 +01:00
|
|
|
import {
|
|
|
|
readAccounts, readSessions, readSubscriptions,
|
|
|
|
writeAccounts, writeSessions, writeSubscriptions,
|
|
|
|
} from "~/server/database";
|
2025-03-10 16:26:52 +01:00
|
|
|
import { cancelAccountStreams } from "~/server/streams";
|
2025-03-07 22:28:55 +01:00
|
|
|
|
|
|
|
export default defineEventHandler(async (event) => {
|
2025-06-09 16:51:05 +02:00
|
|
|
const serverSession = await requireServerSession(event);
|
2025-03-07 22:28:55 +01:00
|
|
|
|
|
|
|
let accounts = await readAccounts();
|
|
|
|
const sessionAccount = accounts.find(
|
2025-06-09 16:51:05 +02:00
|
|
|
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 => {
|
2025-06-09 16:51:05 +02:00
|
|
|
if (session.accountId === serverSession.accountId) {
|
2025-03-07 22:28:55 +01:00
|
|
|
removedSessionIds.add(session.id);
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
});
|
2025-06-09 16:51:05 +02:00
|
|
|
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
|
2025-06-09 16:51:05 +02:00
|
|
|
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);
|
|
|
|
})
|