From cbdbcc6f8298ef6a4d8ab647b54eac7bd4ef961e Mon Sep 17 00:00:00 2001 From: zkldi <20380519+zkldi@users.noreply.github.com> Date: Wed, 8 Dec 2021 00:08:48 +0000 Subject: [PATCH] Make folder data properly transposive. (Fixes BMS table bug) --- server/src/utils/folder.ts | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/server/src/utils/folder.ts b/server/src/utils/folder.ts index 73fc6904a..a160ba3eb 100644 --- a/server/src/utils/folder.ts +++ b/server/src/utils/folder.ts @@ -56,11 +56,9 @@ export async function ResolveFolderToCharts( }) ); } else if (folder.type === "charts") { - const folderDataTransposed: Record = {}; + const folderDataTransposed = TransposeFolderData(folder.data); - for (const key in folder.data) { - folderDataTransposed[key.replace(/¬/gu, ".").replace(/~/gu, "$")] = folder.data[key]; - } + logger.warn("a", folderDataTransposed); const fx = deepmerge.all([filter, { playtype: folder.playtype }, folderDataTransposed]); @@ -88,6 +86,27 @@ export async function ResolveFolderToCharts( return { charts }; } +/** + * Replace all ¬'s in key names with ., and all ~'s with $. + * This is to get around the fact that you cannot store these values in mongo, + * and we are doing reflective querying. + */ +export function TransposeFolderData(obj: Record) { + const transposedObj: Record = {}; + + for (const key in obj) { + const transposedKey = key.replace(/~/u, "$").replace(/¬/u, "."); + + if (typeof obj[key] === "object" && obj[key]) { + transposedObj[transposedKey] = TransposeFolderData(obj[key] as Record); + } else { + transposedObj[transposedKey] = obj[key]; + } + } + + return transposedObj; +} + export async function GetFolderCharts( folder: FolderDocument, filter: FilterQuery,