From 4cf0531beffd0c8cc6a3c4de9d3a70698c6f5ea4 Mon Sep 17 00:00:00 2001 From: Wan Qi Chen <495709+wa0x6e@users.noreply.github.com> Date: Wed, 18 Oct 2023 15:35:46 +0900 Subject: [PATCH] fix: get `skins` data from DB directly --- src/graphql/operations/skins.ts | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/graphql/operations/skins.ts b/src/graphql/operations/skins.ts index ddc33a02..d20cb077 100644 --- a/src/graphql/operations/skins.ts +++ b/src/graphql/operations/skins.ts @@ -1,12 +1,20 @@ -import { spaces } from '../../helpers/spaces'; +import { capture } from '@snapshot-labs/snapshot-sentry'; +import db from '../../helpers/mysql'; -export default function () { - const skins = {}; - Object.values(spaces).forEach((space: any) => { - if (space.skin) skins[space.skin] = skins[space.skin] ? skins[space.skin] + 1 : 1; - }); - return Object.entries(skins).map(skin => ({ - id: skin[0], - spacesCount: skin[1] - })); +export default async function () { + const query = ` + SELECT + COALESCE(JSON_UNQUOTE(JSON_EXTRACT(settings, '$.skin')), '') AS skin, + COUNT(id) as spacesCount + FROM spaces + GROUP BY skin + ORDER BY spacesCount DESC + `; + + try { + return (await db.queryAsync(query)).map(v => ({ ...v, id: v.skin })); + } catch (e: any) { + capture(e); + return Promise.reject(new Error('request failed')); + } }