Explorar o código

feat: Add news static job methods

Owen Diffey hai 1 ano
pai
achega
afa34ff67c
Modificáronse 2 ficheiros con 35 adicións e 15 borrados
  1. 16 1
      backend/src/schemas/news.ts
  2. 19 14
      backend/src/schemas/plugins/getData.ts

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

@@ -8,6 +8,7 @@ import {
 } from "mongoose";
 import { GetData } from "./plugins/getData";
 import { BaseSchema } from "../types/Schemas";
+import JobContext from "../JobContext";
 
 export enum NewsStatus {
 	DRAFT = "draft",
@@ -52,7 +53,13 @@ export interface NewsQueryHelpers {
 
 export interface NewsModel
 	extends Model<NewsSchema, NewsQueryHelpers>,
-		GetData {}
+		GetData {
+	published: (context: JobContext) => Promise<NewsSchema[]>;
+	newest: (
+		context: JobContext,
+		payload: { showToNewUsers?: boolean }
+	) => Promise<NewsSchema[]>;
+}
 
 export const schema = new Schema<NewsSchema, NewsModel, {}, NewsQueryHelpers>(
 	{
@@ -93,6 +100,14 @@ export const schema = new Schema<NewsSchema, NewsModel, {}, NewsQueryHelpers>(
 				return query;
 			}
 		},
+		statics: {
+			published() {
+				return this.find().published();
+			},
+			newest(context: JobContext, payload: { showToNewUsers?: boolean }) {
+				return this.find().newest(payload.showToNewUsers);
+			}
+		},
 		// @ts-ignore need to somehow use GetDataSchemaOptions
 		getData: {
 			enabled: true,

+ 19 - 14
backend/src/schemas/plugins/getData.ts

@@ -1,4 +1,5 @@
 import { PipelineStage, Schema, SchemaOptions } from "mongoose";
+import JobContext from "../../JobContext";
 
 export enum FilterType {
 	REGEX = "regex",
@@ -28,20 +29,23 @@ export interface GetDataSchemaOptions extends SchemaOptions {
 }
 
 export interface GetData {
-	getData(payload: {
-		page: number;
-		pageSize: number;
-		properties: string[];
-		sort: Record<string, "ascending" | "descending">;
-		queries: {
-			data: any;
-			filter: {
-				property: string;
-			};
-			filterType: FilterType;
-		}[];
-		operator: "and" | "or" | "nor";
-	}): Promise<{
+	getData(
+		context: JobContext,
+		payload: {
+			page: number;
+			pageSize: number;
+			properties: string[];
+			sort: Record<string, "ascending" | "descending">;
+			queries: {
+				data: any;
+				filter: {
+					property: string;
+				};
+				filterType: FilterType;
+			}[];
+			operator: "and" | "or" | "nor";
+		}
+	): Promise<{
 		data: any[];
 		count: number;
 	}>;
@@ -51,6 +55,7 @@ export default function getDataPlugin(schema: Schema) {
 	schema.static(
 		"getData",
 		async function getData(
+			context: JobContext,
 			payload: Parameters<GetData["getData"]>[0]
 		): ReturnType<GetData["getData"]> {
 			const { page, pageSize, properties, sort, queries, operator } =