dataPersister.ts 1.7 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 ApiError from '~/services/utils/apiError'
  6. import DataProvider from '~/services/dataProvider/dataProvider'
  7. import DataManager from '~/services/connection/dataManager'
  8. /**
  9. * Le DataPersisteer a pour rôle de mettre à jour les données via de l'API Opentalent
  10. */
  11. class DataPersister extends DataManager {
  12. /**
  13. * Exécute la requête et retourne la réponse désérialisée
  14. * @param args
  15. */
  16. public async invoke (args: DataPersisterArgs): Promise<any> {
  17. try {
  18. await super.invoke(args)
  19. args.data = Serializer.normalize(args)
  20. const url = UrlBuilder.invoke(args)
  21. const response = await DataPersister.sendRequest(url, args.id ? HTTP_METHOD.PUT : HTTP_METHOD.POST, args)
  22. await this.provideResponse(response, args)
  23. } catch (error) {
  24. throw new ApiError(error.response.status, error.response.data.detail)
  25. }
  26. }
  27. /**
  28. * ?
  29. * @param response
  30. * @param args
  31. */
  32. private async provideResponse (response: AnyJson, args: DataPersisterArgs) {
  33. const deserializedResponse = Serializer.denormalize(response, DENORMALIZER_TYPE.HYDRA)
  34. const dataProvider = new DataProvider()
  35. dataProvider.initCtx(this.ctx)
  36. const dataProviderArgs: DataProviderArgs = {
  37. type: args.type,
  38. url: args.url,
  39. enumType: args.enumType,
  40. model: args.model,
  41. rootModel: args.rootModel,
  42. id: args.id,
  43. rootId: args.rootId
  44. }
  45. return await dataProvider.provide(deserializedResponse, dataProviderArgs)
  46. }
  47. }
  48. export default DataPersister