diff --git a/server/server/plugins/app-setup.ts b/server/server/plugins/1.system-init.ts similarity index 52% rename from server/server/plugins/app-setup.ts rename to server/server/plugins/1.system-init.ts index 6bfa3ff6..65a066a9 100644 --- a/server/server/plugins/app-setup.ts +++ b/server/server/plugins/1.system-init.ts @@ -12,4 +12,28 @@ export default defineNitroPlugin(async (nitro) => { nitro.hooks.hookOnce("close", async () => { await applicationSettings.waitForWrite(); }); + + // Ensure system user exists + // The system user owns any user-based code + // that we want to re-use for the app + // e.g. notifications + await prisma.user.upsert({ + where: { + id: "system", + }, + create: { + id: "system", + admin: true, + + displayName: "System", + username: "system", + email: "system@drop", + profilePicture: "", + }, + update: { + admin: true, + authMecs: { set: [] }, + clients: { set: [] }, + }, + }); }); diff --git a/server/server/plugins/user-setup.ts b/server/server/plugins/2.system-setup.ts similarity index 86% rename from server/server/plugins/user-setup.ts rename to server/server/plugins/2.system-setup.ts index 46783018..b5858ccc 100644 --- a/server/server/plugins/user-setup.ts +++ b/server/server/plugins/2.system-setup.ts @@ -5,6 +5,7 @@ export default defineNitroPlugin(async (nitro) => { if (userCount != 0) return; // This setup runs every time the server sets up, + // but has not been configured // so it should be in-place // Create admin invitation @@ -15,12 +16,10 @@ export default defineNitroPlugin(async (nitro) => { create: { id: "admin", isAdmin: true, - expires: new Date('4096-01-01') + expires: new Date("4096-01-01"), }, update: { isAdmin: true, }, }); - - });