|  | @@ -1,8 +1,66 @@
 | 
	
		
			
				|  |  |  import DataModule from "../DataModule";
 | 
	
		
			
				|  |  |  import DataModuleJob from "./DataModuleJob";
 | 
	
		
			
				|  |  | -import { GetData } from "./plugins/getData";
 | 
	
		
			
				|  |  | +import { FilterType, GetData } from "./plugins/getData";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  export default abstract class GetDataJob extends DataModuleJob {
 | 
	
		
			
				|  |  | +	protected override async _validate() {
 | 
	
		
			
				|  |  | +		if (typeof this._payload !== "object")
 | 
	
		
			
				|  |  | +			throw new Error("Payload must be an object");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		if (typeof this._payload.page !== "number")
 | 
	
		
			
				|  |  | +			throw new Error("Page must be a number");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		if (typeof this._payload.pageSize !== "number")
 | 
	
		
			
				|  |  | +			throw new Error("Page size must be a number");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		if (!Array.isArray(this._payload.properties))
 | 
	
		
			
				|  |  | +			throw new Error("Properties must be an array");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		this._payload.properties.forEach(property => {
 | 
	
		
			
				|  |  | +			if (typeof property !== "string")
 | 
	
		
			
				|  |  | +				throw new Error("Property must be a string");
 | 
	
		
			
				|  |  | +		});
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		if (
 | 
	
		
			
				|  |  | +			typeof this._payload.sort !== "object" ||
 | 
	
		
			
				|  |  | +			Array.isArray(this._payload.sort)
 | 
	
		
			
				|  |  | +		)
 | 
	
		
			
				|  |  | +			throw new Error("Sort must be an object");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		Object.values(this._payload.sort).forEach(sort => {
 | 
	
		
			
				|  |  | +			if (sort !== "ascending" && sort !== "descending")
 | 
	
		
			
				|  |  | +				throw new Error("Sort must be ascending or descending");
 | 
	
		
			
				|  |  | +		});
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		if (!Array.isArray(this._payload.queries))
 | 
	
		
			
				|  |  | +			throw new Error("Queries must be an array");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		Object.values(this._payload.queries).forEach(query => {
 | 
	
		
			
				|  |  | +			if (typeof query !== "object" || Array.isArray(query))
 | 
	
		
			
				|  |  | +				throw new Error("Query must be an object");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			if (typeof query.filter !== "object" || Array.isArray(query.filter))
 | 
	
		
			
				|  |  | +				throw new Error("Query filter must be an object");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			if (typeof query.filter?.property !== "string")
 | 
	
		
			
				|  |  | +				throw new Error("Query filter property must be a string");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			if (
 | 
	
		
			
				|  |  | +				!Object.values(FilterType).find(
 | 
	
		
			
				|  |  | +					value => value === query.filterType
 | 
	
		
			
				|  |  | +				)
 | 
	
		
			
				|  |  | +			)
 | 
	
		
			
				|  |  | +				throw new Error("Invalid Query filter type");
 | 
	
		
			
				|  |  | +		});
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		if (
 | 
	
		
			
				|  |  | +			!["and", "or", "nor"].find(
 | 
	
		
			
				|  |  | +				value => value === this._payload.operator
 | 
	
		
			
				|  |  | +			)
 | 
	
		
			
				|  |  | +		)
 | 
	
		
			
				|  |  | +			throw new Error("Operator must be one of; and, or, nor");
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	protected async _execute(payload: Parameters<GetData["getData"]>[0]) {
 | 
	
		
			
				|  |  |  		const model = await DataModule.getModel(this.getModelName());
 | 
	
		
			
				|  |  |  
 |