import {repositoryHelper} from "~/services/store/repository"; import {Access} from "~/models/Access/Access"; import {QUERY_TYPE} from "~/types/enums"; import {computed} from '@nuxtjs/composition-api' import {AnyJson, AnyStore} from "~/types/interfaces"; import DataPersister from "~/services/dataPersister/dataPersister"; /** * @category Use/updater * @class UseActivityYearUpdater * Use Classe pour la mise à jour de l'activity year */ export class UseActivityYearUpdater{ private store!:AnyStore private $dataPersister!:DataPersister constructor(store:AnyStore, $dataPersister:DataPersister){ this.store = store this.$dataPersister = $dataPersister } /** * Composition function */ public invoke(): AnyJson{ const activityYear = computed(()=>this.store.state.profile.access.activityYear) return { updater: (activityYear:number) => this.update(activityYear), activityYear } } /** * Mets à jour le store, puis créer une instance de Access avec la nouvelle activityYear et là met à jour * @param activityYear */ private async update(activityYear:number): Promise{ if(activityYear <= 0) throw new Error('year must be positive') this.store.commit('profile/access/setActivityYear', activityYear) const accessInstance:Access = this.createNewAccessInstance(this.store.state.profile.access.id, this.store.state.profile.access.activityYear) await this.$dataPersister.invoke({ type: QUERY_TYPE.MODEL, model: Access, id: accessInstance.id }) } /** * Créer une nouvelle instance d'Access (== nouveau state dans le store) avec une date d'activité et la retourne * @param accessId * @param activityYear */ private createNewAccessInstance(accessId: number, activityYear:number): Access{ if(accessId <= 0 || activityYear <= 0) throw new Error('id and activity year must be positive') const accessInstance = repositoryHelper.createNewModelInstance(Access) as Access accessInstance.id = accessId accessInstance.activityYear = activityYear repositoryHelper.persist(Access, accessInstance) return accessInstance } } export const $useActivityYearUpdater = (store:AnyStore, $dataPersister:DataPersister) => new UseActivityYearUpdater(store, $dataPersister).invoke()