dataProvider.ts 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import {Store} from "vuex";
  2. import {Rest} from "~/services/queries/rest";
  3. import {Model} from "@/models/Model"
  4. class DataProvider{
  5. private store: Store<any>
  6. private $rest: Rest
  7. constructor(store:Store<any>, $rest: Rest) {
  8. this.store = store
  9. this.$rest = $rest
  10. }
  11. public async getItem(model: typeof Model, id: number){
  12. const repository = this.store.$repo(model);
  13. const entity = repository.getModel().$entity();
  14. const response = await this.$rest.getItem(`/api/${entity}`, id)
  15. if(response)
  16. repository.insert(response);
  17. }
  18. public async getCollection(model: typeof Model){
  19. const repository = this.store.$repo(model);
  20. const entity = repository.getModel().$entity();
  21. const response = await this.$rest.getCollection(`/api/${entity}`)
  22. if(response)
  23. repository.insert(response);
  24. }
  25. public async getSubResourceCollection(root_model: typeof Model, root_id: number, model: typeof Model){
  26. const root_repository = this.store.$repo(root_model);
  27. const root_entity = root_repository.getModel().$entity();
  28. const repository = this.store.$repo(model);
  29. const entity = repository.getModel().$entity();
  30. const response = await this.$rest.getCollection(`/api/${root_entity}/${root_id}/${entity}`)
  31. if(response){
  32. repository.insert(response)
  33. return repository.all();
  34. }
  35. return [];
  36. }
  37. public async getSubResourceItem(root_model: typeof Model, root_id: number, model: typeof Model, id: number) {
  38. const root_repository = this.store.$repo(root_model);
  39. const root_entity = root_repository.getModel().$entity();
  40. const repository = this.store.$repo(model);
  41. const entity = repository.getModel().$entity();
  42. const response = await this.$rest.getItem(`/api/${root_entity}/${root_id}/${entity}`, id)
  43. if(response)
  44. repository.insert(response);
  45. }
  46. }
  47. export const $dataProvider = (store:Store<any>, $rest:Rest) => new DataProvider(store, $rest);