| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- import { AnyJson, DataProviderArgs } from '~/types/interfaces'
- import { DENORMALIZER_TYPE, HTTP_METHOD, QUERY_TYPE } from '~/types/enums'
- import { providers } from '~/services/dataProvider/provider/_import'
- import UrlBuilder from '~/services/connection/urlBuilder'
- import Serializer from '~/services/serializer/serializer'
- import ApiError from '~/services/utils/apiError'
- import DataManager from '~/services/connection/dataManager'
- /**
- * Le DataProvider a pour rôle de fournir des données issues de l'API Opentalent
- */
- class DataProvider extends DataManager {
- protected progress: boolean = false
- protected defaultArguments: object = {
- type: QUERY_TYPE.MODEL,
- showProgress: false
- }
- /**
- * Exécute la requête et retourne la réponse désérialisée
- * @param args
- */
- public async invoke (args: DataProviderArgs): Promise<any> {
- try {
- await super.invoke(args)
- const url = UrlBuilder.invoke(args)
- const response = await DataProvider.sendRequest(url, HTTP_METHOD.GET, args)
- const deserializeResponse = await Serializer.denormalize(response, DENORMALIZER_TYPE.HYDRA)
- return await this.provide(deserializeResponse, args)
- } catch (error) {
- throw new ApiError(500, error)
- }
- }
- /**
- * Iterate over the available providers and invoke
- * the first one that support the given args
- * @param data
- * @param args
- */
- public provide (data: AnyJson, args: DataProviderArgs): any {
- for (const Provider of providers) {
- if (Provider.support(args)) {
- return new Provider(this.ctx, args).invoke(data)
- }
- }
- }
- }
- export default DataProvider
|