dataProvider.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import { AnyJson, DataProviderArgs } from '~/types/interfaces'
  2. import { DENORMALIZER_TYPE, HTTP_METHOD, QUERY_TYPE } from '~/types/enums'
  3. import { providers } from '~/services/dataProvider/provider/_import'
  4. import UrlBuilder from '~/services/connection/urlBuilder'
  5. import Serializer from '~/services/serializer/serializer'
  6. import ApiError from '~/services/utils/apiError'
  7. import DataManager from '~/services/connection/dataManager'
  8. /**
  9. * Le DataProvider a pour rôle de fournir des données issues de l'API Opentalent
  10. */
  11. class DataProvider extends DataManager {
  12. protected progress: boolean = false
  13. protected defaultArguments: object = {
  14. type: QUERY_TYPE.MODEL,
  15. showProgress: false
  16. }
  17. /**
  18. * Exécute la requête et retourne la réponse désérialisée
  19. * @param args
  20. */
  21. public async invoke (args: DataProviderArgs): Promise<any> {
  22. try {
  23. await super.invoke(args)
  24. const url = UrlBuilder.invoke(args)
  25. const response = await DataProvider.sendRequest(url, HTTP_METHOD.GET, args)
  26. const deserializeResponse = await Serializer.denormalize(response, DENORMALIZER_TYPE.HYDRA)
  27. return await this.provide(deserializeResponse, args)
  28. } catch (error) {
  29. throw new ApiError(500, error)
  30. }
  31. }
  32. /**
  33. * Iterate over the available providers and invoke
  34. * the first one that support the given args
  35. * @param data
  36. * @param args
  37. */
  38. public provide (data: AnyJson, args: DataProviderArgs): any {
  39. for (const Provider of providers) {
  40. if (Provider.support(args)) {
  41. return new Provider(this.ctx, args).invoke(data)
  42. }
  43. }
  44. }
  45. }
  46. export default DataProvider