GetDataJob.ts 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import { Model } from "mongoose";
  2. import Joi from "joi";
  3. import DataModule from "../DataModule";
  4. import DataModuleJob from "./DataModuleJob";
  5. import { FilterType, GetData } from "./plugins/getData";
  6. export default abstract class GetDataJob extends DataModuleJob {
  7. protected static _payloadSchema = Joi.object({
  8. page: Joi.number().required(),
  9. pageSize: Joi.number().required(),
  10. properties: Joi.array()
  11. .items(Joi.string().required())
  12. .min(1)
  13. .required(),
  14. sort: Joi.object()
  15. .pattern(
  16. /^/,
  17. Joi.string().valid("ascending", "descending").required()
  18. )
  19. .required(),
  20. queries: Joi.array()
  21. .items(
  22. Joi.object({
  23. filter: Joi.object({
  24. property: Joi.string().required()
  25. }).required(),
  26. filterType: Joi.string()
  27. .valid(...Object.values(FilterType))
  28. .required()
  29. })
  30. )
  31. .required(),
  32. operator: Joi.string().valid("and", "or", "nor").required()
  33. });
  34. protected async _execute() {
  35. const model = await DataModule.getModel<Model<any> & Partial<GetData>>(
  36. this.getModelName()
  37. );
  38. if (typeof model.getData !== "function")
  39. throw new Error("Get data not available for model");
  40. return model.getData(this._payload);
  41. }
  42. }