|
|
@@ -1,7 +1,9 @@
|
|
|
-import { Model } from '@vuex-orm/core'
|
|
|
-import {DataPersisterArgs, DataProviderArgs, ImageArgs, UrlArgs} from '~/types/interfaces'
|
|
|
-import { QUERY_TYPE } from '~/types/enums'
|
|
|
-import { repositoryHelper } from '~/services/store/repository'
|
|
|
+import {Model} from '@vuex-orm/core'
|
|
|
+import {ImageArgs, UrlArgs} from '~/types/interfaces'
|
|
|
+import {QUERY_TYPE} from '~/types/enums'
|
|
|
+import {repositoryHelper} from '~/services/store/repository'
|
|
|
+import TypesTesting from "~/services/utils/typesTesting";
|
|
|
+import UrlOptionsBuilder from "~/services/connection/urlOptionsBuilder";
|
|
|
|
|
|
/**
|
|
|
* Classe permettant de construire une URL pour l'interrogation d'une API externe
|
|
|
@@ -10,33 +12,42 @@ class UrlBuilder {
|
|
|
static ROOT = '/api/'
|
|
|
|
|
|
/**
|
|
|
- * Main méthode qui appellera les méthode privées correspondantes (getDefaultUrl, getEnumUrl, getModelUrl)
|
|
|
+ * Main méthode qui appellera les méthode privées correspondantes (getDefaultUrl, getEnumUrl, getModelUrl, getImageUrl)
|
|
|
* @param {UrlArgs} args
|
|
|
* @return {string}
|
|
|
*/
|
|
|
public static build (args: UrlArgs): string {
|
|
|
+ let url: string = ''
|
|
|
switch (args.type) {
|
|
|
case QUERY_TYPE.DEFAULT:
|
|
|
- return UrlBuilder.getDefaultUrl(args.url)
|
|
|
+ url = UrlBuilder.getDefaultUrl(args.url)
|
|
|
+ break;
|
|
|
|
|
|
case QUERY_TYPE.ENUM:
|
|
|
- return UrlBuilder.getEnumUrl(args.enumType)
|
|
|
+ url = UrlBuilder.getEnumUrl(args.enumType)
|
|
|
+ break;
|
|
|
|
|
|
case QUERY_TYPE.MODEL:
|
|
|
- return UrlBuilder.getModelUrl(args.model, args.rootModel, args.rootId)
|
|
|
+ url = UrlBuilder.getModelUrl(args.model, args.rootModel, args.rootId)
|
|
|
+ break;
|
|
|
|
|
|
case QUERY_TYPE.IMAGE:
|
|
|
- if (!UrlBuilder.isDataProviderArgs(args)) {
|
|
|
+ if (!TypesTesting.isDataProviderArgs(args)) {
|
|
|
throw new Error('*args* is not a dataProviderArgs')
|
|
|
}
|
|
|
if (!args.imgArgs) {
|
|
|
throw new Error('*args* has no imgArgs')
|
|
|
}
|
|
|
- return UrlBuilder.getImageUrl(args.imgArgs, args.baseUrl)
|
|
|
+ url = UrlBuilder.getImageUrl(args.imgArgs, args.baseUrl)
|
|
|
+ break;
|
|
|
|
|
|
default:
|
|
|
- throw new Error('url, model or enum must be defined')
|
|
|
+ throw new Error('url, model, image or enum must be defined')
|
|
|
+ break;
|
|
|
}
|
|
|
+
|
|
|
+ const options = UrlOptionsBuilder.build(args)
|
|
|
+ return options.length > 0 ? `${url}?${UrlOptionsBuilder.build(args).join('&')}` : url
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -99,7 +110,7 @@ class UrlBuilder {
|
|
|
* @return {string}
|
|
|
*/
|
|
|
private static getImageUrl (imgArgs: ImageArgs, baseUrl: string = ''): string {
|
|
|
- const downloadUrl = `files/${imgArgs.id}/download/${imgArgs.height}x${imgArgs.width}?${new Date().getTime()}`
|
|
|
+ const downloadUrl = `files/${imgArgs.id}/download/${imgArgs.height}x${imgArgs.width}`
|
|
|
return UrlBuilder.concat(baseUrl, UrlBuilder.ROOT, downloadUrl)
|
|
|
}
|
|
|
|
|
|
@@ -116,14 +127,6 @@ class UrlBuilder {
|
|
|
})
|
|
|
return url
|
|
|
}
|
|
|
-
|
|
|
- /**
|
|
|
- * Test si l'argument est bien de type DataProviderArgs
|
|
|
- * @param args
|
|
|
- */
|
|
|
- private static isDataProviderArgs (args: DataProviderArgs|DataPersisterArgs): args is DataProviderArgs {
|
|
|
- return (args as DataProviderArgs).imgArgs !== undefined
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
export default UrlBuilder
|