Browse Source

refactor: Moved getData query compiler to within waterfall

Owen Diffey 2 years ago
parent
commit
4b504146ed

+ 29 - 22
backend/logic/actions/dataRequests.js

@@ -35,35 +35,42 @@ export default {
 	getData: isAdminRequired(async function getSet(session, page, pageSize, properties, sort, queries, operator, cb) {
 		const dataRequestModel = await DBModule.runJob("GET_MODEL", { modelName: "dataRequest" }, this);
 
-		const newQueries = queries.map(query => {
-			const { data, filter, filterType } = query;
-			const newQuery = {};
-			if (filterType === "regex") {
-				newQuery[filter.property] = new RegExp(`${data.slice(1, data.length - 1)}`, "i");
-			} else if (filterType === "contains") {
-				newQuery[filter.property] = new RegExp(`${data.replaceAll(/[.*+?^${}()|[\]\\]/g, "\\$&")}`, "i");
-			} else if (filterType === "exact") {
-				newQuery[filter.property] = data.toString();
-			}
-			return newQuery;
-		});
-
-		const queryObject = {};
-		if (newQueries.length > 0) {
-			if (operator === "and") queryObject.$and = newQueries;
-			else if (operator === "or") queryObject.$or = newQueries;
-			else if (operator === "nor") queryObject.$nor = newQueries;
-		}
-
 		async.waterfall(
 			[
 				next => {
+					const newQueries = queries.map(query => {
+						const { data, filter, filterType } = query;
+						const newQuery = {};
+						if (filterType === "regex") {
+							newQuery[filter.property] = new RegExp(`${data.slice(1, data.length - 1)}`, "i");
+						} else if (filterType === "contains") {
+							newQuery[filter.property] = new RegExp(
+								`${data.replaceAll(/[.*+?^${}()|[\]\\]/g, "\\$&")}`,
+								"i"
+							);
+						} else if (filterType === "exact") {
+							newQuery[filter.property] = data.toString();
+						}
+						return newQuery;
+					});
+
+					const queryObject = {};
+					if (newQueries.length > 0) {
+						if (operator === "and") queryObject.$and = newQueries;
+						else if (operator === "or") queryObject.$or = newQueries;
+						else if (operator === "nor") queryObject.$nor = newQueries;
+					}
+
+					next(null, queryObject);
+				},
+
+				(queryObject, next) => {
 					dataRequestModel.find(queryObject).count((err, count) => {
-						next(err, count);
+						next(err, queryObject, count);
 					});
 				},
 
-				(count, next) => {
+				(queryObject, count, next) => {
 					dataRequestModel
 						.find(queryObject)
 						.sort(sort)

+ 29 - 22
backend/logic/actions/news.js

@@ -71,35 +71,42 @@ export default {
 	getData: isAdminRequired(async function getSet(session, page, pageSize, properties, sort, queries, operator, cb) {
 		const newsModel = await DBModule.runJob("GET_MODEL", { modelName: "news" }, this);
 
-		const newQueries = queries.map(query => {
-			const { data, filter, filterType } = query;
-			const newQuery = {};
-			if (filterType === "regex") {
-				newQuery[filter.property] = new RegExp(`${data.slice(1, data.length - 1)}`, "i");
-			} else if (filterType === "contains") {
-				newQuery[filter.property] = new RegExp(`${data.replaceAll(/[.*+?^${}()|[\]\\]/g, "\\$&")}`, "i");
-			} else if (filterType === "exact") {
-				newQuery[filter.property] = data.toString();
-			}
-			return newQuery;
-		});
-
-		const queryObject = {};
-		if (newQueries.length > 0) {
-			if (operator === "and") queryObject.$and = newQueries;
-			else if (operator === "or") queryObject.$or = newQueries;
-			else if (operator === "nor") queryObject.$nor = newQueries;
-		}
-
 		async.waterfall(
 			[
 				next => {
+					const newQueries = queries.map(query => {
+						const { data, filter, filterType } = query;
+						const newQuery = {};
+						if (filterType === "regex") {
+							newQuery[filter.property] = new RegExp(`${data.slice(1, data.length - 1)}`, "i");
+						} else if (filterType === "contains") {
+							newQuery[filter.property] = new RegExp(
+								`${data.replaceAll(/[.*+?^${}()|[\]\\]/g, "\\$&")}`,
+								"i"
+							);
+						} else if (filterType === "exact") {
+							newQuery[filter.property] = data.toString();
+						}
+						return newQuery;
+					});
+
+					const queryObject = {};
+					if (newQueries.length > 0) {
+						if (operator === "and") queryObject.$and = newQueries;
+						else if (operator === "or") queryObject.$or = newQueries;
+						else if (operator === "nor") queryObject.$nor = newQueries;
+					}
+
+					next(null, queryObject);
+				},
+
+				(queryObject, next) => {
 					newsModel.find(queryObject).count((err, count) => {
-						next(err, count);
+						next(err, queryObject, count);
 					});
 				},
 
-				(count, next) => {
+				(queryObject, count, next) => {
 					newsModel
 						.find(queryObject)
 						.sort(sort)

+ 29 - 22
backend/logic/actions/punishments.js

@@ -42,35 +42,42 @@ export default {
 	getData: isAdminRequired(async function getSet(session, page, pageSize, properties, sort, queries, operator, cb) {
 		const punishmentModel = await DBModule.runJob("GET_MODEL", { modelName: "punishment" }, this);
 
-		const newQueries = queries.map(query => {
-			const { data, filter, filterType } = query;
-			const newQuery = {};
-			if (filterType === "regex") {
-				newQuery[filter.property] = new RegExp(`${data.slice(1, data.length - 1)}`, "i");
-			} else if (filterType === "contains") {
-				newQuery[filter.property] = new RegExp(`${data.replaceAll(/[.*+?^${}()|[\]\\]/g, "\\$&")}`, "i");
-			} else if (filterType === "exact") {
-				newQuery[filter.property] = data.toString();
-			}
-			return newQuery;
-		});
-
-		const queryObject = {};
-		if (newQueries.length > 0) {
-			if (operator === "and") queryObject.$and = newQueries;
-			else if (operator === "or") queryObject.$or = newQueries;
-			else if (operator === "nor") queryObject.$nor = newQueries;
-		}
-
 		async.waterfall(
 			[
 				next => {
+					const newQueries = queries.map(query => {
+						const { data, filter, filterType } = query;
+						const newQuery = {};
+						if (filterType === "regex") {
+							newQuery[filter.property] = new RegExp(`${data.slice(1, data.length - 1)}`, "i");
+						} else if (filterType === "contains") {
+							newQuery[filter.property] = new RegExp(
+								`${data.replaceAll(/[.*+?^${}()|[\]\\]/g, "\\$&")}`,
+								"i"
+							);
+						} else if (filterType === "exact") {
+							newQuery[filter.property] = data.toString();
+						}
+						return newQuery;
+					});
+
+					const queryObject = {};
+					if (newQueries.length > 0) {
+						if (operator === "and") queryObject.$and = newQueries;
+						else if (operator === "or") queryObject.$or = newQueries;
+						else if (operator === "nor") queryObject.$nor = newQueries;
+					}
+
+					next(null, queryObject);
+				},
+
+				(queryObject, next) => {
 					punishmentModel.find(queryObject).count((err, count) => {
-						next(err, count);
+						next(err, queryObject, count);
 					});
 				},
 
-				(count, next) => {
+				(queryObject, count, next) => {
 					punishmentModel
 						.find(queryObject)
 						.sort(sort)

+ 29 - 22
backend/logic/actions/reports.js

@@ -74,35 +74,42 @@ export default {
 	getData: isAdminRequired(async function getSet(session, page, pageSize, properties, sort, queries, operator, cb) {
 		const reportModel = await DBModule.runJob("GET_MODEL", { modelName: "report" }, this);
 
-		const newQueries = queries.map(query => {
-			const { data, filter, filterType } = query;
-			const newQuery = {};
-			if (filterType === "regex") {
-				newQuery[filter.property] = new RegExp(`${data.slice(1, data.length - 1)}`, "i");
-			} else if (filterType === "contains") {
-				newQuery[filter.property] = new RegExp(`${data.replaceAll(/[.*+?^${}()|[\]\\]/g, "\\$&")}`, "i");
-			} else if (filterType === "exact") {
-				newQuery[filter.property] = data.toString();
-			}
-			return newQuery;
-		});
-
-		const queryObject = {};
-		if (newQueries.length > 0) {
-			if (operator === "and") queryObject.$and = newQueries;
-			else if (operator === "or") queryObject.$or = newQueries;
-			else if (operator === "nor") queryObject.$nor = newQueries;
-		}
-
 		async.waterfall(
 			[
 				next => {
+					const newQueries = queries.map(query => {
+						const { data, filter, filterType } = query;
+						const newQuery = {};
+						if (filterType === "regex") {
+							newQuery[filter.property] = new RegExp(`${data.slice(1, data.length - 1)}`, "i");
+						} else if (filterType === "contains") {
+							newQuery[filter.property] = new RegExp(
+								`${data.replaceAll(/[.*+?^${}()|[\]\\]/g, "\\$&")}`,
+								"i"
+							);
+						} else if (filterType === "exact") {
+							newQuery[filter.property] = data.toString();
+						}
+						return newQuery;
+					});
+
+					const queryObject = {};
+					if (newQueries.length > 0) {
+						if (operator === "and") queryObject.$and = newQueries;
+						else if (operator === "or") queryObject.$or = newQueries;
+						else if (operator === "nor") queryObject.$nor = newQueries;
+					}
+
+					next(null, queryObject);
+				},
+
+				(queryObject, next) => {
 					reportModel.find(queryObject).count((err, count) => {
-						next(err, count);
+						next(err, queryObject, count);
 					});
 				},
 
-				(count, next) => {
+				(queryObject, count, next) => {
 					reportModel
 						.find(queryObject)
 						.sort(sort)

+ 31 - 24
backend/logic/actions/users.js

@@ -183,29 +183,36 @@ export default {
 	getData: isAdminRequired(async function getSet(session, page, pageSize, properties, sort, queries, operator, cb) {
 		const userModel = await DBModule.runJob("GET_MODEL", { modelName: "user" }, this);
 
-		const newQueries = queries.map(query => {
-			const { data, filter, filterType } = query;
-			const newQuery = {};
-			if (filterType === "regex") {
-				newQuery[filter.property] = new RegExp(`${data.slice(1, data.length - 1)}`, "i");
-			} else if (filterType === "contains") {
-				newQuery[filter.property] = new RegExp(`${data.replaceAll(/[.*+?^${}()|[\]\\]/g, "\\$&")}`, "i");
-			} else if (filterType === "exact") {
-				newQuery[filter.property] = data.toString();
-			}
-			return newQuery;
-		});
-
-		const queryObject = {};
-		if (newQueries.length > 0) {
-			if (operator === "and") queryObject.$and = newQueries;
-			else if (operator === "or") queryObject.$or = newQueries;
-			else if (operator === "nor") queryObject.$nor = newQueries;
-		}
-
 		async.waterfall(
 			[
 				next => {
+					const newQueries = queries.map(query => {
+						const { data, filter, filterType } = query;
+						const newQuery = {};
+						if (filterType === "regex") {
+							newQuery[filter.property] = new RegExp(`${data.slice(1, data.length - 1)}`, "i");
+						} else if (filterType === "contains") {
+							newQuery[filter.property] = new RegExp(
+								`${data.replaceAll(/[.*+?^${}()|[\]\\]/g, "\\$&")}`,
+								"i"
+							);
+						} else if (filterType === "exact") {
+							newQuery[filter.property] = data.toString();
+						}
+						return newQuery;
+					});
+
+					const queryObject = {};
+					if (newQueries.length > 0) {
+						if (operator === "and") queryObject.$and = newQueries;
+						else if (operator === "or") queryObject.$or = newQueries;
+						else if (operator === "nor") queryObject.$nor = newQueries;
+					}
+
+					next(null, queryObject);
+				},
+
+				(queryObject, next) => {
 					const invalidProperties = [...properties, ...queries.map(query => query.filter.property)].find(
 						property => {
 							if (
@@ -225,16 +232,16 @@ export default {
 						}
 					);
 					if (invalidProperties) next("Invalid paramaters given.");
-					else next();
+					else next(null, queryObject);
 				},
 
-				next => {
+				(queryObject, next) => {
 					userModel.find(queryObject).count((err, count) => {
-						next(err, count);
+						next(err, queryObject, count);
 					});
 				},
 
-				(count, next) => {
+				(queryObject, count, next) => {
 					userModel
 						.find(queryObject)
 						.sort(sort)

+ 33 - 26
backend/logic/playlists.js

@@ -882,39 +882,46 @@ class _PlaylistsModule extends CoreClass {
 	 */
 	GET_DATA(payload) {
 		return new Promise((resolve, reject) => {
-			const { page, pageSize, properties, sort, queries, operator } = payload;
-
-			console.log("GET_DATA", payload);
-
-			const newQueries = queries.map(query => {
-				const { data, filter, filterType } = query;
-				const newQuery = {};
-				if (filterType === "regex") {
-					newQuery[filter.property] = new RegExp(`${data.slice(1, data.length - 1)}`, "i");
-				} else if (filterType === "contains") {
-					newQuery[filter.property] = new RegExp(`${data.replaceAll(/[.*+?^${}()|[\]\\]/g, "\\$&")}`, "i");
-				} else if (filterType === "exact") {
-					newQuery[filter.property] = data.toString();
-				}
-				return newQuery;
-			});
-
-			const queryObject = {};
-			if (newQueries.length > 0) {
-				if (operator === "and") queryObject.$and = newQueries;
-				else if (operator === "or") queryObject.$or = newQueries;
-				else if (operator === "nor") queryObject.$nor = newQueries;
-			}
-
 			async.waterfall(
 				[
 					next => {
+						const { queries, operator } = payload;
+
+						const newQueries = queries.map(query => {
+							const { data, filter, filterType } = query;
+							const newQuery = {};
+							if (filterType === "regex") {
+								newQuery[filter.property] = new RegExp(`${data.slice(1, data.length - 1)}`, "i");
+							} else if (filterType === "contains") {
+								newQuery[filter.property] = new RegExp(
+									`${data.replaceAll(/[.*+?^${}()|[\]\\]/g, "\\$&")}`,
+									"i"
+								);
+							} else if (filterType === "exact") {
+								newQuery[filter.property] = data.toString();
+							}
+							return newQuery;
+						});
+
+						const queryObject = {};
+						if (newQueries.length > 0) {
+							if (operator === "and") queryObject.$and = newQueries;
+							else if (operator === "or") queryObject.$or = newQueries;
+							else if (operator === "nor") queryObject.$nor = newQueries;
+						}
+
+						next(null, queryObject);
+					},
+
+					(queryObject, next) => {
 						PlaylistsModule.playlistModel.find(queryObject).count((err, count) => {
-							next(err, count);
+							next(err, queryObject, count);
 						});
 					},
 
-					(count, next) => {
+					(queryObject, count, next) => {
+						const { page, pageSize, properties, sort } = payload;
+
 						PlaylistsModule.playlistModel
 							.find(queryObject)
 							.sort(sort)

+ 33 - 26
backend/logic/songs.js

@@ -220,39 +220,46 @@ class _SongsModule extends CoreClass {
 	 */
 	GET_DATA(payload) {
 		return new Promise((resolve, reject) => {
-			const { page, pageSize, properties, sort, queries, operator } = payload;
-
-			console.log("GET_DATA", payload);
-
-			const newQueries = queries.map(query => {
-				const { data, filter, filterType } = query;
-				const newQuery = {};
-				if (filterType === "regex") {
-					newQuery[filter.property] = new RegExp(`${data.slice(1, data.length - 1)}`, "i");
-				} else if (filterType === "contains") {
-					newQuery[filter.property] = new RegExp(`${data.replaceAll(/[.*+?^${}()|[\]\\]/g, "\\$&")}`, "i");
-				} else if (filterType === "exact") {
-					newQuery[filter.property] = data.toString();
-				}
-				return newQuery;
-			});
-
-			const queryObject = {};
-			if (newQueries.length > 0) {
-				if (operator === "and") queryObject.$and = newQueries;
-				else if (operator === "or") queryObject.$or = newQueries;
-				else if (operator === "nor") queryObject.$nor = newQueries;
-			}
-
 			async.waterfall(
 				[
 					next => {
+						const { queries, operator } = payload;
+
+						const newQueries = queries.map(query => {
+							const { data, filter, filterType } = query;
+							const newQuery = {};
+							if (filterType === "regex") {
+								newQuery[filter.property] = new RegExp(`${data.slice(1, data.length - 1)}`, "i");
+							} else if (filterType === "contains") {
+								newQuery[filter.property] = new RegExp(
+									`${data.replaceAll(/[.*+?^${}()|[\]\\]/g, "\\$&")}`,
+									"i"
+								);
+							} else if (filterType === "exact") {
+								newQuery[filter.property] = data.toString();
+							}
+							return newQuery;
+						});
+
+						const queryObject = {};
+						if (newQueries.length > 0) {
+							if (operator === "and") queryObject.$and = newQueries;
+							else if (operator === "or") queryObject.$or = newQueries;
+							else if (operator === "nor") queryObject.$nor = newQueries;
+						}
+
+						next(null, queryObject);
+					},
+
+					(queryObject, next) => {
 						SongsModule.SongModel.find(queryObject).count((err, count) => {
-							next(err, count);
+							next(err, queryObject, count);
 						});
 					},
 
-					(count, next) => {
+					(queryObject, count, next) => {
+						const { page, pageSize, properties, sort } = payload;
+
 						SongsModule.SongModel.find(queryObject)
 							.sort(sort)
 							.skip(pageSize * (page - 1))

+ 33 - 26
backend/logic/stations.js

@@ -405,39 +405,46 @@ class _StationsModule extends CoreClass {
 	 */
 	GET_DATA(payload) {
 		return new Promise((resolve, reject) => {
-			const { page, pageSize, properties, sort, queries, operator } = payload;
-
-			console.log("GET_DATA", payload);
-
-			const newQueries = queries.map(query => {
-				const { data, filter, filterType } = query;
-				const newQuery = {};
-				if (filterType === "regex") {
-					newQuery[filter.property] = new RegExp(`${data.slice(1, data.length - 1)}`, "i");
-				} else if (filterType === "contains") {
-					newQuery[filter.property] = new RegExp(`${data.replaceAll(/[.*+?^${}()|[\]\\]/g, "\\$&")}`, "i");
-				} else if (filterType === "exact") {
-					newQuery[filter.property] = data.toString();
-				}
-				return newQuery;
-			});
-
-			const queryObject = {};
-			if (newQueries.length > 0) {
-				if (operator === "and") queryObject.$and = newQueries;
-				else if (operator === "or") queryObject.$or = newQueries;
-				else if (operator === "nor") queryObject.$nor = newQueries;
-			}
-
 			async.waterfall(
 				[
 					next => {
+						const { queries, operator } = payload;
+
+						const newQueries = queries.map(query => {
+							const { data, filter, filterType } = query;
+							const newQuery = {};
+							if (filterType === "regex") {
+								newQuery[filter.property] = new RegExp(`${data.slice(1, data.length - 1)}`, "i");
+							} else if (filterType === "contains") {
+								newQuery[filter.property] = new RegExp(
+									`${data.replaceAll(/[.*+?^${}()|[\]\\]/g, "\\$&")}`,
+									"i"
+								);
+							} else if (filterType === "exact") {
+								newQuery[filter.property] = data.toString();
+							}
+							return newQuery;
+						});
+
+						const queryObject = {};
+						if (newQueries.length > 0) {
+							if (operator === "and") queryObject.$and = newQueries;
+							else if (operator === "or") queryObject.$or = newQueries;
+							else if (operator === "nor") queryObject.$nor = newQueries;
+						}
+
+						next(null, queryObject);
+					},
+
+					(queryObject, next) => {
 						StationsModule.stationModel.find(queryObject).count((err, count) => {
-							next(err, count);
+							next(err, queryObject, count);
 						});
 					},
 
-					(count, next) => {
+					(queryObject, count, next) => {
+						const { page, pageSize, properties, sort } = payload;
+
 						StationsModule.stationModel
 							.find(queryObject)
 							.sort(sort)