Browse Source

refactor: change getData to return relations in new format

Kristian Vos 1 month ago
parent
commit
e2bf7a636c

+ 24 - 1
backend/src/modules/DataModule/plugins/getData.ts

@@ -1,4 +1,4 @@
-import { PipelineStage, Schema } from "mongoose";
+import { PipelineStage, Schema, SchemaTypes } from "mongoose";
 
 export enum FilterType {
 	REGEX = "regex",
@@ -226,6 +226,29 @@ export default function getDataPlugin(schema: Schema) {
 
 			if (result.count.length === 0) return { data: [], count: 0 };
 
+			properties.forEach(property => {
+				const type = schema.path(property);
+				if (type instanceof SchemaTypes.ObjectId) {
+					const { ref } = type?.options ?? {};
+					if (ref) {
+						result.documents = result.documents.map(
+							(document: any) => ({
+								...document,
+								[property]: {
+									_name: ref,
+									_id: document[property]
+								}
+							})
+						);
+					}
+				} else if (
+					type instanceof SchemaTypes.Array &&
+					type.caster instanceof SchemaTypes.ObjectId
+				) {
+					console.log("Array relation not implemented", property);
+				}
+			});
+
 			const { documents: data } = result;
 			const { count } = result.count[0];
 

+ 2 - 2
frontend/src/pages/Admin/News.vue

@@ -199,8 +199,8 @@ const remove = async item => {
 			</template>
 			<template #column-createdBy="slotProps">
 				<user-link
-					:user-id="slotProps.item.createdBy"
-					:alt="slotProps.item.createdBy"
+					:user-id="slotProps.item.createdBy._id"
+					:alt="slotProps.item.createdBy._id"
 				/>
 			</template>
 			<template #column-markdown="slotProps">

+ 1 - 1
frontend/src/pages/Admin/Playlists.vue

@@ -338,7 +338,7 @@ const create = () => {
 			</template>
 			<template #column-createdBy="slotProps">
 				<span v-if="slotProps.item.createdBy === 'Musare'">Musare</span>
-				<user-link v-else :user-id="slotProps.item.createdBy" />
+				<user-link v-else :user-id="slotProps.item.createdBy._id" />
 			</template>
 			<template #column-createdAt="slotProps">
 				<span :title="new Date(slotProps.item.createdAt).toString()">{{

+ 1 - 1
frontend/src/pages/Admin/Reports.vue

@@ -268,7 +268,7 @@ const resolve = (reportId, value) =>
 			</template>
 			<template #column-createdBy="slotProps">
 				<span v-if="slotProps.item.createdBy === 'Musare'">Musare</span>
-				<user-link v-else :user-id="slotProps.item.createdBy" />
+				<user-link v-else :user-id="slotProps.item.createdBy._id" />
 			</template>
 			<template #column-createdAt="slotProps">
 				<span :title="new Date(slotProps.item.createdAt).toString()">{{

+ 3 - 1
frontend/src/pages/Admin/Songs/Import.vue

@@ -608,7 +608,9 @@ const removeImportJob = jobId => {
 							}}</span>
 						</template>
 						<template #column-requestedBy="slotProps">
-							<user-link :user-id="slotProps.item.requestedBy" />
+							<user-link
+								:user-id="slotProps.item.requestedBy._id"
+							/>
 						</template>
 						<template #column-requestedAt="slotProps">
 							<span

+ 2 - 2
frontend/src/pages/Admin/Songs/index.vue

@@ -700,7 +700,7 @@ onMounted(() => {
 				}}</span>
 			</template>
 			<template #column-requestedBy="slotProps">
-				<user-link :user-id="slotProps.item.requestedBy" />
+				<user-link :user-id="slotProps.item.requestedBy._id" />
 			</template>
 			<template #column-requestedAt="slotProps">
 				<span
@@ -711,7 +711,7 @@ onMounted(() => {
 				>
 			</template>
 			<template #column-verifiedBy="slotProps">
-				<user-link :user-id="slotProps.item.verifiedBy" />
+				<user-link :user-id="slotProps.item.verifiedBy._id" />
 			</template>
 			<template #column-verifiedAt="slotProps">
 				<span :title="new Date(slotProps.item.verifiedAt).toString()">{{

+ 1 - 1
frontend/src/pages/Admin/Stations.vue

@@ -411,7 +411,7 @@ const remove = stationId => {
 			</template>
 			<template #column-owner="slotProps">
 				<span v-if="slotProps.item.type === 'official'">Musare</span>
-				<user-link v-else :user-id="slotProps.item.owner" />
+				<user-link v-else :user-id="slotProps.item.owner._id" />
 			</template>
 			<template #column-theme="slotProps">
 				<span :title="slotProps.item.theme">{{

+ 3 - 3
frontend/src/pages/Admin/Users/Punishments.vue

@@ -271,8 +271,8 @@ const deactivatePunishment = punishmentId => {
 			<template #column-value="slotProps">
 				<user-link
 					v-if="slotProps.item.type === 'banUserId'"
-					:user-id="slotProps.item.value"
-					:alt="slotProps.item.value"
+					:user-id="slotProps.item.value._id"
+					:alt="slotProps.item.value._id"
 				/>
 				<span v-else :title="slotProps.item.value">{{
 					slotProps.item.value
@@ -284,7 +284,7 @@ const deactivatePunishment = punishmentId => {
 				}}</span>
 			</template>
 			<template #column-punishedBy="slotProps">
-				<user-link :user-id="slotProps.item.punishedBy" />
+				<user-link :user-id="slotProps.item.punishedBy._id" />
 			</template>
 			<template #column-punishedAt="slotProps">
 				<span :title="new Date(slotProps.item.punishedAt).toString()">{{

+ 0 - 7
frontend/src/stores/model.ts

@@ -409,13 +409,6 @@ export const useModelStore = defineStore("model", () => {
 			_id => !existingModelIds.includes(_id)
 		);
 
-		console.info(
-			"Load models",
-			structuredClone(modelIds),
-			structuredClone(existingModels),
-			structuredClone(missingModelIds)
-		);
-
 		const fetchedModels = await findManyById(modelName, missingModelIds);
 		const registeredModels = await registerModels(
 			Object.values(fetchedModels)