model.ts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import * as _ from 'lodash'
  2. import BaseNormalizer from '~/services/serializer/normalizer/baseNormalizer'
  3. import {AnyJson, DataPersisterArgs} from '~/types/interfaces'
  4. import { QUERY_TYPE } from '~/types/enums'
  5. import { repositoryHelper } from '~/services/store/repository'
  6. /**
  7. * @category Services/serializer/normalizer
  8. * @class Model
  9. * Classe assurant la normalization d'un Model vers un fichier JSON
  10. */
  11. class Model extends BaseNormalizer {
  12. static support (type: QUERY_TYPE): boolean {
  13. return type === QUERY_TYPE.MODEL
  14. }
  15. /**
  16. * Récupération de l'Item souhaité puis transformation en JSON
  17. * @param {DataPersisterArgs} args
  18. * @return {any} réponse
  19. */
  20. public static normalize (args: DataPersisterArgs): any {
  21. if (!args.model) {
  22. throw new Error('*args* has no model attribute')
  23. }
  24. const item = repositoryHelper.findItemFromModel(args.model, args.idTemp ? args.idTemp : args.id)
  25. if (!item || typeof item === 'undefined') {
  26. throw new Error('Item not found')
  27. }
  28. let data = item.$toJson()
  29. if(Model.isPostQuery(args)) data = Model.sanitizeBeforePost(data)
  30. return _.omit(data, 'originalState')
  31. }
  32. /**
  33. * Return true si on est dans un POST
  34. * @param args
  35. */
  36. public static isPostQuery(args: DataPersisterArgs): boolean{
  37. return args.idTemp
  38. }
  39. /**
  40. * Opération de nettoyage avant un POST
  41. * @param data
  42. */
  43. public static sanitizeBeforePost(data:AnyJson): AnyJson{
  44. data.id = null
  45. return data
  46. }
  47. }
  48. export default Model