useActivityYearUpdater.ts 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import {repositoryHelper} from "~/services/store/repository";
  2. import {Access} from "~/models/Access/Access";
  3. import {QUERY_TYPE} from "~/types/enums";
  4. import {computed} from '@nuxtjs/composition-api'
  5. import {AnyJson, AnyStore} from "~/types/interfaces";
  6. import DataPersister from "~/services/dataPersister/dataPersister";
  7. /**
  8. * @category Use/updater
  9. * @class UseActivityYearUpdater
  10. * Use Classe pour la mise à jour de l'activity year
  11. */
  12. export class UseActivityYearUpdater{
  13. private store!:AnyStore
  14. private $dataPersister!:DataPersister
  15. constructor(store:AnyStore, $dataPersister:DataPersister){
  16. this.store = store
  17. this.$dataPersister = $dataPersister
  18. }
  19. /**
  20. * Composition function
  21. */
  22. public invoke(): AnyJson{
  23. const activityYear = computed(()=>this.store.state.profile.access.activityYear)
  24. return {
  25. updater: (activityYear:number) => this.update(activityYear),
  26. activityYear
  27. }
  28. }
  29. /**
  30. * Mets à jour le store, puis créer une instance de Access avec la nouvelle activityYear et là met à jour
  31. * @param activityYear
  32. */
  33. private async update(activityYear:number): Promise<any>{
  34. if(activityYear <= 0)
  35. throw new Error('year must be positive')
  36. this.store.commit('profile/access/setActivityYear', activityYear)
  37. const accessInstance:Access = this.createNewAccessInstance(this.store.state.profile.access.id, this.store.state.profile.access.activityYear)
  38. await this.$dataPersister.invoke({
  39. type: QUERY_TYPE.MODEL,
  40. model: Access,
  41. id: accessInstance.id
  42. })
  43. }
  44. /**
  45. * Créer une nouvelle instance d'Access (== nouveau state dans le store) avec une date d'activité et la retourne
  46. * @param accessId
  47. * @param activityYear
  48. */
  49. private createNewAccessInstance(accessId: number, activityYear:number): Access{
  50. if(accessId <= 0 || activityYear <= 0)
  51. throw new Error('id and activity year must be positive')
  52. const accessInstance = repositoryHelper.createNewModelInstance(Access) as Access
  53. accessInstance.id = accessId
  54. accessInstance.activityYear = activityYear
  55. repositoryHelper.persist(Access, accessInstance)
  56. return accessInstance
  57. }
  58. }
  59. export const $useActivityYearUpdater = (store:AnyStore, $dataPersister:DataPersister) => new UseActivityYearUpdater(store, $dataPersister).invoke()