dataPersister.ts 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import { AnyJson, DataPersisterArgs, DataProviderArgs } from '~/types/interfaces'
  2. import UrlBuilder from '~/services/connection/urlBuilder'
  3. import { DENORMALIZER_TYPE, HTTP_METHOD } from '~/types/enums'
  4. import Serializer from '~/services/serializer/serializer'
  5. import DataProvider from '~/services/data/dataProvider'
  6. import BaseDataManager from '~/services/data/baseDataManager'
  7. import { hooksPersister } from '~/services/data/hooks/hookPersister/_import'
  8. /**
  9. * Le DataPersister a pour rôle de mettre à jour les données via de l'API Opentalent
  10. *
  11. * Il sérialise les données et les envoie à l'API sous la forme d'une requête
  12. * PUT ou POST, selon les cas. Il fait ensuite appel au DataProvider pour traiter la
  13. * réponse de l'API et la retourner.
  14. */
  15. class DataPersister extends BaseDataManager {
  16. protected arguments!: DataPersisterArgs
  17. protected hooks = hooksPersister;
  18. /**
  19. * Exécute la requête et retourne la réponse désérialisée
  20. */
  21. protected async _invoke (): Promise<any> {
  22. this.arguments.data = Serializer.normalize(this.arguments)
  23. const url = UrlBuilder.build(this.arguments)
  24. const response = await DataPersister.request(
  25. url,
  26. this.arguments.id ? HTTP_METHOD.PUT : HTTP_METHOD.POST,
  27. this.arguments
  28. )
  29. return await this.provideResponse(response, this.arguments)
  30. }
  31. /**
  32. * ?
  33. * @param response
  34. * @param args
  35. */
  36. private async provideResponse (response: AnyJson, args: DataPersisterArgs) {
  37. const deserializedResponse = Serializer.denormalize(response, DENORMALIZER_TYPE.HYDRA)
  38. const dataProvider = new DataProvider()
  39. dataProvider.initCtx(this.ctx)
  40. const dataProviderArgs: DataProviderArgs = {
  41. type: args.type,
  42. url: args.url,
  43. enumType: args.enumType,
  44. model: args.model,
  45. rootModel: args.rootModel,
  46. id: args.id,
  47. rootId: args.rootId
  48. }
  49. return await dataProvider.process(deserializedResponse, dataProviderArgs)
  50. }
  51. }
  52. export default DataPersister