Jelajahi Sumber

feat: Add news and station getData schema options

Owen Diffey 1 tahun lalu
induk
melakukan
b76245eeba
2 mengubah file dengan 115 tambahan dan 2 penghapusan
  1. 52 1
      backend/src/schemas/news.ts
  2. 63 1
      backend/src/schemas/station.ts

+ 52 - 1
backend/src/schemas/news.ts

@@ -91,7 +91,58 @@ export const schema = new Schema<NewsSchema, NewsModel, {}, NewsQueryHelpers>(
 				return query;
 			}
 		},
-		pluginTags: ["useGetDataPlugin"]
+		pluginTags: ["useGetDataPlugin"],
+		// @ts-ignore need to somehow use GetDataSchemaOptions
+		getData: {
+			specialProperties: {
+				createdBy: [
+					{
+						$addFields: {
+							createdByOID: {
+								$convert: {
+									input: "$createdBy",
+									to: "objectId",
+									onError: "unknown",
+									onNull: "unknown"
+								}
+							}
+						}
+					},
+					{
+						$lookup: {
+							from: "users",
+							localField: "createdByOID",
+							foreignField: "_id",
+							as: "createdByUser"
+						}
+					},
+					{
+						$unwind: {
+							path: "$createdByUser",
+							preserveNullAndEmptyArrays: true
+						}
+					},
+					{
+						$addFields: {
+							createdByUsername: {
+								$ifNull: ["$createdByUser.username", "unknown"]
+							}
+						}
+					},
+					{
+						$project: {
+							createdByOID: 0,
+							createdByUser: 0
+						}
+					}
+				]
+			},
+			specialQueries: {
+				createdBy: newQuery => ({
+					$or: [newQuery, { createdByUsername: newQuery.createdBy }]
+				})
+			}
+		}
 	}
 );
 

+ 63 - 1
backend/src/schemas/station.ts

@@ -172,7 +172,69 @@ export const schema = new Schema<StationSchema, StationModel>(
 			}
 		}
 	},
-	{ pluginTags: ["useGetDataPlugin"] }
+	{
+		pluginTags: ["useGetDataPlugin"],
+		// @ts-ignore
+		getData: {
+			specialProperties: {
+				owner: [
+					{
+						$addFields: {
+							ownerOID: {
+								$convert: {
+									input: "$owner",
+									to: "objectId",
+									onError: "unknown",
+									onNull: "unknown"
+								}
+							}
+						}
+					},
+					{
+						$lookup: {
+							from: "users",
+							localField: "ownerOID",
+							foreignField: "_id",
+							as: "ownerUser"
+						}
+					},
+					{
+						$unwind: {
+							path: "$ownerUser",
+							preserveNullAndEmptyArrays: true
+						}
+					},
+					{
+						$addFields: {
+							ownerUsername: {
+								$cond: [
+									{ $eq: [{ $type: "$owner" }, "string"] },
+									{
+										$ifNull: [
+											"$ownerUser.username",
+											"unknown"
+										]
+									},
+									"none"
+								]
+							}
+						}
+					},
+					{
+						$project: {
+							ownerOID: 0,
+							ownerUser: 0
+						}
+					}
+				]
+			},
+			specialQueries: {
+				owner: newQuery => ({
+					$or: [newQuery, { ownerUsername: newQuery.owner }]
+				})
+			}
+		}
+	}
 );
 
 export type StationSchemaType = typeof schema;