model.ts 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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. import { Item } from '@vuex-orm/core'
  7. import {queryHelper} from "~/services/store/query";
  8. /**
  9. * @category Services/serializer/normalizer
  10. * @class Model
  11. * Classe assurant la normalization d'un Model vers un fichier JSON
  12. */
  13. class Model extends BaseNormalizer {
  14. static support (type: QUERY_TYPE): boolean {
  15. return type === QUERY_TYPE.MODEL
  16. }
  17. /**
  18. * Récupération de l'Item souhaité puis transformation en JSON
  19. * @param {DataPersisterArgs} args
  20. * @return {any} réponse
  21. */
  22. public static normalize (args: DataPersisterArgs): any {
  23. if (!args.model) {
  24. throw new Error('*args* has no model attribute')
  25. }
  26. let item:Item = null
  27. const itemId = args.idTemp ? args.idTemp : args.id
  28. if(args.query){
  29. item = queryHelper.getItem(args.query, itemId)
  30. }else{
  31. item = repositoryHelper.findItemFromModel(args.model, itemId)
  32. }
  33. if (!item || typeof item === 'undefined') {
  34. throw new Error('Item not found')
  35. }
  36. let data = item.$toJson()
  37. if(Model.isPostQuery(args)) data = Model.sanitizeBeforePost(data)
  38. return _.omit(data, 'originalState')
  39. }
  40. /**
  41. * Return true si on est dans un POST
  42. * @param args
  43. */
  44. public static isPostQuery(args: DataPersisterArgs): boolean{
  45. return args.idTemp
  46. }
  47. /**
  48. * Opération de nettoyage avant un POST
  49. * @param data
  50. */
  51. public static sanitizeBeforePost(data:AnyJson): AnyJson{
  52. delete data.id
  53. return data
  54. }
  55. }
  56. export default Model