diff --git a/assets/openapi.json b/assets/openapi.json index c5e927640..82b3ff3a3 100644 Binary files a/assets/openapi.json and b/assets/openapi.json differ diff --git a/assets/schemas.json b/assets/schemas.json index e53b7b527..e4a034d2f 100644 Binary files a/assets/schemas.json and b/assets/schemas.json differ diff --git a/src/api/routes/users/@me/settings.ts b/src/api/routes/users/@me/settings.ts index 3a9724242..54a6539e0 100644 --- a/src/api/routes/users/@me/settings.ts +++ b/src/api/routes/users/@me/settings.ts @@ -17,9 +17,9 @@ */ import { route } from "@spacebar/api"; -import { User, UserSettings } from "@spacebar/util"; +import { User, UserSettings, emitEvent, Session, PrivateSessionProjection, PresenceUpdateEvent } from "@spacebar/util"; import { Request, Response, Router } from "express"; -import { UserSettingsUpdateSchema, UserSettingsSchema } from "@spacebar/schemas"; +import { UserSettingsUpdateSchema } from "@spacebar/schemas"; const router = Router({ mergeParams: true }); @@ -74,6 +74,28 @@ router.patch( await user.settings.save(); await user.save(); + if (body.status) { + const [session] = (await Session.find({ + where: { user_id: user.id }, + })) as [Session | undefined]; + if (session) { + session.status = body.status; + + await Promise.all([ + emitEvent({ + event: "PRESENCE_UPDATE", + user_id: user.id, + data: { + user: user, + activities: session.activities, + client_status: session?.client_status, + status: body.status === "invisible" ? "offline" : body.status, + }, + } as PresenceUpdateEvent), + session.save(), + ]); + } + } res.json({ ...user.settings, index: undefined }); },