|
|
@@ -1,54 +1,28 @@
|
|
|
-import { Context } from '@nuxt/types/app'
|
|
|
-import { hooks } from '~/services/dataPersister/hook/_import'
|
|
|
import { AnyJson, DataPersisterArgs, DataProviderArgs } from '~/types/interfaces'
|
|
|
-import Connection from '~/services/connection/connection'
|
|
|
-import ConstructUrl from '~/services/connection/constructUrl'
|
|
|
-import { DENORMALIZER_TYPE, HTTP_METHOD, QUERY_TYPE } from '~/types/enums'
|
|
|
+import UrlBuilder from '~/services/connection/urlBuilder'
|
|
|
+import { DENORMALIZER_TYPE, HTTP_METHOD } from '~/types/enums'
|
|
|
import Serializer from '~/services/serializer/serializer'
|
|
|
import ApiError from '~/services/utils/apiError'
|
|
|
import DataProvider from '~/services/dataProvider/dataProvider'
|
|
|
+import DataManager from '~/services/connection/dataManager'
|
|
|
|
|
|
/**
|
|
|
* Le DataPersisteer a pour rôle de mettre à jour les données via de l'API Opentalent
|
|
|
*/
|
|
|
-class DataPersister {
|
|
|
- private ctx !: Context
|
|
|
- private readonly defaultArguments: DataPersisterArgs
|
|
|
-
|
|
|
- constructor () {
|
|
|
- this.defaultArguments = {
|
|
|
- type: QUERY_TYPE.MODEL,
|
|
|
- progress: true
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Initialise le contexte (la connection en particulier)
|
|
|
- * @param ctx
|
|
|
- */
|
|
|
- public initCtx (ctx:Context) {
|
|
|
- Connection.initConnector(ctx.$axios)
|
|
|
- this.ctx = ctx
|
|
|
- }
|
|
|
-
|
|
|
+class DataPersister extends DataManager {
|
|
|
/**
|
|
|
* Exécute la requête et retourne la réponse désérialisée
|
|
|
* @param args
|
|
|
*/
|
|
|
- public async invoke (args:DataPersisterArgs): Promise<any> {
|
|
|
+ public async invoke (args: DataPersisterArgs): Promise<any> {
|
|
|
try {
|
|
|
- // complete args with defaults
|
|
|
- args = { ...this.defaultArguments, ...args }
|
|
|
-
|
|
|
- this.startLoading(args)
|
|
|
-
|
|
|
- await this.preHook(args)
|
|
|
+ await super.invoke(args)
|
|
|
|
|
|
args.data = Serializer.normalize(args)
|
|
|
|
|
|
- const url = ConstructUrl.invoke(args)
|
|
|
+ const url = UrlBuilder.invoke(args)
|
|
|
|
|
|
- const response = await this.sendRequest(url, args)
|
|
|
+ const response = await DataPersister.sendRequest(url, args.id ? HTTP_METHOD.PUT : HTTP_METHOD.POST, args)
|
|
|
|
|
|
await this.provideResponse(response, args)
|
|
|
} catch (error) {
|
|
|
@@ -56,39 +30,6 @@ class DataPersister {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * Signale le début du chargement à nuxt (si progress est true)
|
|
|
- * @param args
|
|
|
- */
|
|
|
- startLoading (args: DataPersisterArgs) {
|
|
|
- if (args.progress) {
|
|
|
- const $nuxt = window.$nuxt
|
|
|
- $nuxt.$loading.start()
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Iterate over the available hooks and return
|
|
|
- * the first one that support the given args
|
|
|
- * @param args
|
|
|
- */
|
|
|
- async preHook (args: DataPersisterArgs) {
|
|
|
- for (const Hook of DataPersister.sortedHooks()) {
|
|
|
- if (Hook.support(args)) {
|
|
|
- await new Hook().invoke(args)
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Send the request trough the Connection
|
|
|
- * @param url
|
|
|
- * @param args
|
|
|
- */
|
|
|
- sendRequest (url: string, args: DataPersisterArgs): Promise<any> {
|
|
|
- return Connection.invoke(args.id ? HTTP_METHOD.PUT : HTTP_METHOD.POST, url, args)
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* ?
|
|
|
* @param response
|
|
|
@@ -112,18 +53,6 @@ class DataPersister {
|
|
|
|
|
|
return await dataProvider.provide(deserializedResponse, dataProviderArgs)
|
|
|
}
|
|
|
-
|
|
|
- /**
|
|
|
- * Sort the available hooks by priority
|
|
|
- * @private
|
|
|
- */
|
|
|
- private static sortedHooks (): Iterable<any> {
|
|
|
- return hooks.sort(function (a, b) {
|
|
|
- if (a.priority > b.priority) { return 1 }
|
|
|
- if (a.priority < b.priority) { return -1 }
|
|
|
- return 0
|
|
|
- })
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
export default DataPersister
|