dataProvider.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import {AnyJson, DataProviderArgs} from "~/types/interfaces";
  2. import {DENORMALIZER_TYPE, HTTP_METHOD} from "~/types/enums";
  3. import {providers} from "~/services/dataProvider/provider/_import";
  4. import ConstructUrl from "~/services/connection/constructUrl";
  5. import Connection from "~/services/connection/connection";
  6. import Serializer from "~/services/serializer/serializer";
  7. import {Context} from "@nuxt/types/app";
  8. class DataProvider{
  9. private ctx !: Context;
  10. private arguments!: DataProviderArgs;
  11. constructor() {
  12. }
  13. initCtx(ctx:Context){
  14. Connection.initConnector(ctx.$axios)
  15. this.ctx = ctx
  16. }
  17. async invoke(args:DataProviderArgs): Promise<any>{
  18. this.arguments = args
  19. try{
  20. const url = this.constructUrl()
  21. const response = await this.connection(url)
  22. const deserializeResponse = await this.deserialization(response)
  23. return await this.provide(deserializeResponse)
  24. }catch(error){
  25. throw new Error(error.message);
  26. }
  27. }
  28. constructUrl(): string{
  29. const constructUrl = new ConstructUrl(this.ctx);
  30. return constructUrl.invoke(this.arguments)
  31. }
  32. connection(url: string): Promise<any>{
  33. const connection = new Connection()
  34. return connection.invoke(HTTP_METHOD.GET, url, this.arguments)
  35. }
  36. provide(data: AnyJson): any{
  37. for(const provider of providers){
  38. if(provider.support(this.arguments)){
  39. return new provider(this.ctx, this.arguments).invoke(data);
  40. }
  41. }
  42. }
  43. deserialization(data: AnyJson): AnyJson{
  44. const serializer = new Serializer()
  45. return serializer.denormalize(data, DENORMALIZER_TYPE.DEFAULT)
  46. }
  47. }
  48. export default DataProvider