dataProvider.ts 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import {AnyJson, DataProviderArgs, DataProviders} 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. import ApiError from "~/services/utils/apiError";
  9. class DataProvider{
  10. private ctx !: Context;
  11. private arguments!: DataProviderArgs;
  12. constructor() {
  13. }
  14. setArguments(args: DataProviderArgs){
  15. this.arguments = args
  16. }
  17. initCtx(ctx:Context){
  18. Connection.initConnector(ctx.$axios)
  19. this.ctx = ctx
  20. }
  21. async invoke(args:DataProviderArgs): Promise<any>{
  22. this.setArguments(args)
  23. try{
  24. const url = this.constructUrl()
  25. const response = await this.connection(url)
  26. const deserializeResponse = await this.deserialization(response)
  27. return await this.provide(deserializeResponse)
  28. }catch(error){
  29. throw new ApiError(500, error)
  30. }
  31. }
  32. constructUrl(): string{
  33. const constructUrl = new ConstructUrl();
  34. return constructUrl.invoke(this.arguments)
  35. }
  36. connection(url: string): Promise<any>{
  37. const connection = new Connection()
  38. return connection.invoke(HTTP_METHOD.GET, url, this.arguments)
  39. }
  40. provide(data: AnyJson): any{
  41. for(const provider of providers){
  42. if(provider.support(this.arguments)){
  43. return new provider(this.ctx, this.arguments).invoke(data);
  44. }
  45. }
  46. }
  47. deserialization(data: AnyJson): AnyJson{
  48. const serializer = new Serializer()
  49. return serializer.denormalize(data, DENORMALIZER_TYPE.HYDRA)
  50. }
  51. }
  52. export default DataProvider