import {Store} from "vuex"; import {Rest} from "~/services/queries/rest"; import {Model} from "@/models/Model" class DataProvider{ private store: Store private $rest: Rest constructor(store:Store, $rest: Rest) { this.store = store this.$rest = $rest } public async getItem(model: typeof Model, id: number){ const repository = this.store.$repo(model); const entity = repository.getModel().$entity(); const response = await this.$rest.getItem(`/api/${entity}`, id) if(response) repository.insert(response); } public async getCollection(model: typeof Model){ const repository = this.store.$repo(model); const entity = repository.getModel().$entity(); const response = await this.$rest.getCollection(`/api/${entity}`) if(response) repository.insert(response); } public async getSubResourceCollection(root_model: typeof Model, root_id: number, model: typeof Model){ const root_repository = this.store.$repo(root_model); const root_entity = root_repository.getModel().$entity(); const repository = this.store.$repo(model); const entity = repository.getModel().$entity(); const response = await this.$rest.getCollection(`/api/${root_entity}/${root_id}/${entity}`) if(response){ repository.insert(response) return repository.all(); } return []; } public async getSubResourceItem(root_model: typeof Model, root_id: number, model: typeof Model, id: number) { const root_repository = this.store.$repo(root_model); const root_entity = root_repository.getModel().$entity(); const repository = this.store.$repo(model); const entity = repository.getModel().$entity(); const response = await this.$rest.getItem(`/api/${root_entity}/${root_id}/${entity}`, id) if(response) repository.insert(response); } } export const $dataProvider = (store:Store, $rest:Rest) => new DataProvider(store, $rest);