Rename accounts to users to be consistent with the new naming scheme where account only referes to the logged in user of the session and implement live updates of users via a user store which listens for updates from the event stream.
49 lines
1.4 KiB
TypeScript
49 lines
1.4 KiB
TypeScript
import {
|
|
readUsers, readSessions, readSubscriptions,
|
|
writeUsers, writeSessions, writeSubscriptions,
|
|
} from "~/server/database";
|
|
import { broadcastEvent, cancelAccountStreams } from "~/server/streams";
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const serverSession = await requireServerSession(event);
|
|
let users = await readUsers();
|
|
|
|
// Remove sessions for this user
|
|
const removedSessionIds = new Set<number>();
|
|
let sessions = await readSessions();
|
|
sessions = sessions.filter(session => {
|
|
if (session.account.id === serverSession.account.id) {
|
|
removedSessionIds.add(session.id);
|
|
return false;
|
|
}
|
|
return true;
|
|
});
|
|
cancelAccountStreams(serverSession.account.id);
|
|
await writeSessions(sessions);
|
|
await deleteCookie(event, "session");
|
|
|
|
// Remove subscriptions for this user
|
|
let subscriptions = await readSubscriptions();
|
|
subscriptions = subscriptions.filter(
|
|
subscription => !removedSessionIds.has(subscription.sessionId)
|
|
);
|
|
await writeSubscriptions(subscriptions);
|
|
|
|
// Remove the user
|
|
const account = users.find(user => user.id === serverSession.account.id)!;
|
|
const now = new Date().toISOString();
|
|
account.deleted = true;
|
|
account.updatedAt = now;
|
|
await writeUsers(users);
|
|
await broadcastEvent({
|
|
type: "user-update",
|
|
data: {
|
|
id: account.id,
|
|
updatedAt: now,
|
|
deleted: true,
|
|
}
|
|
});
|
|
|
|
// Update Schedule counts.
|
|
await updateScheduleInterestedCounts(users);
|
|
})
|