| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- import {AnyJson, DataProviderArgs} from "~/types/interfaces";
- import {DENORMALIZER_TYPE, HTTP_METHOD} from "~/types/enums";
- import {providers} from "~/services/dataProvider/provider/_import";
- import ConstructUrl from "~/services/connection/constructUrl";
- import Connection from "~/services/connection/connection";
- import Serializer from "~/services/serializer/serializer";
- import {Context} from "@nuxt/types/app";
- class DataProvider{
- private ctx !: Context;
- private arguments!: DataProviderArgs;
- constructor() {
- }
- initCtx(ctx:Context){
- Connection.initConnector(ctx.$axios)
- this.ctx = ctx
- }
- async invoke(args:DataProviderArgs): Promise<any>{
- this.arguments = args
- try{
- const url = this.constructUrl()
- const response = await this.connection(url)
- const deserializeResponse = await this.deserialization(response)
- return await this.provide(deserializeResponse)
- }catch(error){
- throw new Error(error.message);
- }
- }
- constructUrl(): string{
- const constructUrl = new ConstructUrl(this.ctx);
- return constructUrl.invoke(this.arguments)
- }
- connection(url: string): Promise<any>{
- const connection = new Connection()
- return connection.invoke(HTTP_METHOD.GET, url, this.arguments)
- }
- provide(data: AnyJson): any{
- for(const provider of providers){
- if(provider.support(this.arguments)){
- return new provider(this.ctx, this.arguments).invoke(data);
- }
- }
- }
- deserialization(data: AnyJson): AnyJson{
- const serializer = new Serializer()
- return serializer.denormalize(data, DENORMALIZER_TYPE.DEFAULT)
- }
- }
- export default DataProvider
|