dataPersister.ts 1.8 KB

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