From 14f4135071515166d90b91174849d598550df3d6 Mon Sep 17 00:00:00 2001 From: DecDuck Date: Fri, 27 Feb 2026 04:15:27 +0000 Subject: [PATCH] Tag connect & disconnect fix (#360) * fix: tag connect/disconnect * fix: lint * fix: oidc typo fix --- server/i18n/locales/en_us.json | 14 +++++++------- server/server/api/v1/admin/game/[id]/tags.patch.ts | 14 ++++++++++++-- .../api/v1/auth/{odic => oidc}/callback.get.ts | 0 .../api/v1/auth/{odic => oidc}/logout.post.ts | 0 4 files changed, 19 insertions(+), 9 deletions(-) rename server/server/api/v1/auth/{odic => oidc}/callback.get.ts (100%) rename server/server/api/v1/auth/{odic => oidc}/logout.post.ts (100%) diff --git a/server/i18n/locales/en_us.json b/server/i18n/locales/en_us.json index 196128ed..292affba 100644 --- a/server/i18n/locales/en_us.json +++ b/server/i18n/locales/en_us.json @@ -160,6 +160,12 @@ "add": "Add", "cannotUndo": "This action cannot be undone.", "close": "Close", + "components": { + "multiitem": { + "new": "Create new: \"{0}\"", + "placeholder": "Start typing..." + } + }, "create": "Create", "date": "Date", "delete": "Delete", @@ -181,13 +187,7 @@ "servers": "Servers", "srLoading": "Loading…", "tags": "Tags", - "today": "Today", - "components": { - "multiitem": { - "placeholder": "Start typing...", - "new": "Create new: \"{0}\"" - } - } + "today": "Today" }, "drop": { "desc": "An open-source game distribution platform built for speed, flexibility and beauty.", diff --git a/server/server/api/v1/admin/game/[id]/tags.patch.ts b/server/server/api/v1/admin/game/[id]/tags.patch.ts index 83f14328..c2999cd4 100644 --- a/server/server/api/v1/admin/game/[id]/tags.patch.ts +++ b/server/server/api/v1/admin/game/[id]/tags.patch.ts @@ -16,10 +16,19 @@ export default defineEventHandler(async (h3) => { const game = await prisma.game.findUnique({ where: { id }, - select: { id: true }, + select: { id: true, tags: { select: { id: true } } }, }); if (!game) throw createError({ statusCode: 404, message: "Game not found" }); + const tagSet = new Set(game.tags.map((v) => v.id)); + const toConnect = body.tags.filter((v) => !tagSet.has(v)); + + const bodyTagSet = new Set(body.tags); + const toDisconnect = tagSet + .values() + .filter((v) => !bodyTagSet.has(v)) + .toArray(); + // SAFETY: Okay to disable due to check above // eslint-disable-next-line drop/no-prisma-delete await prisma.game.update({ @@ -28,7 +37,8 @@ export default defineEventHandler(async (h3) => { }, data: { tags: { - connect: body.tags.map((e) => ({ id: e })), + connect: toConnect.map((e) => ({ id: e })), + disconnect: toDisconnect.map((e) => ({ id: e })), }, }, }); diff --git a/server/server/api/v1/auth/odic/callback.get.ts b/server/server/api/v1/auth/oidc/callback.get.ts similarity index 100% rename from server/server/api/v1/auth/odic/callback.get.ts rename to server/server/api/v1/auth/oidc/callback.get.ts diff --git a/server/server/api/v1/auth/odic/logout.post.ts b/server/server/api/v1/auth/oidc/logout.post.ts similarity index 100% rename from server/server/api/v1/auth/odic/logout.post.ts rename to server/server/api/v1/auth/oidc/logout.post.ts