Pārlūkot izejas kodu

feat: added job to delete many models by id to DataModule

Kristian Vos 1 gadu atpakaļ
vecāks
revīzija
15151ba1bc

+ 29 - 0
backend/src/modules/DataModule/DeleteManyByIdJob.ts

@@ -0,0 +1,29 @@
+import { isValidObjectId } from "mongoose";
+import DataModule from "../DataModule";
+import DataModuleJob from "./DataModuleJob";
+
+export default abstract class FindManyByIdJob extends DataModuleJob {
+	protected static _isBulk: boolean = true;
+
+	protected override async _validate() {
+		if (typeof this._payload !== "object" || this._payload === null)
+			throw new Error("Payload must be an object");
+		if (!Array.isArray(this._payload._ids))
+			throw new Error("Payload._ids must be an array");
+		if (!this._payload._ids.every((_id: unknown) => isValidObjectId(_id)))
+			throw new Error(
+				"One or more payload._ids item(s) is not a valid ObjectId"
+			);
+	}
+
+	protected async _execute() {
+		const model = await DataModule.getModel(this.getModelName());
+
+		const _ids = this._payload._ids;
+		const query = model.deleteMany({
+			_id: _ids
+		});
+
+		return query.exec();
+	}
+}

+ 5 - 0
backend/src/modules/DataModule/models/news/jobs/DeleteManyById.ts

@@ -0,0 +1,5 @@
+import DeleteManyByIdJob from "@/modules/DataModule/DeleteManyByIdJob";
+
+export default class DeleteManyById extends DeleteManyByIdJob {
+	protected static _modelName = "news";
+}

+ 8 - 0
backend/src/modules/DataModule/models/stations/jobs/DeleteManyById.ts

@@ -0,0 +1,8 @@
+import DeleteManyByIdJob from "@/modules/DataModule/DeleteManyByIdJob";
+import isOwner from "@/modules/DataModule/permissions/isOwner";
+
+export default class DeleteManyById extends DeleteManyByIdJob {
+	protected static _modelName = "stations";
+
+	protected static _hasPermission = isOwner;
+}

+ 5 - 0
backend/src/modules/DataModule/models/users/jobs/DeleteManyById.ts

@@ -0,0 +1,5 @@
+import DeleteManyByIdJob from "@/modules/DataModule/DeleteManyByIdJob";
+
+export default class DeleteManyById extends DeleteManyByIdJob {
+	protected static _modelName = "users";
+}

+ 3 - 0
backend/src/modules/DataModule/models/users/permissions.ts

@@ -126,6 +126,7 @@ const admin = {
 
 	// DataModule news model
 	"data.news.deleteById.*": true,
+	"data.news.deleteManyById.*": true,
 
 	// DataModule playlists model
 	"data.playlists.clearAndRefillById.*": true,
@@ -151,11 +152,13 @@ const admin = {
 	// DataModule stations model
 	"data.stations.clearEveryStationQueue": true,
 	"data.stations.deleteById.*": true,
+	"data.stations.deleteManyById.*": true,
 
 	// DataModule users model
 	"data.users.deleteById.*": true,
 	"data.users.deleteSessionsById.*": true,
 	"data.users.updateById.*": true,
+	"data.users.deleteManyById.*": true,
 
 	// DataModule youtubeApiRequests model
 	"data.youtubeApiRequests.findById.*": true,