| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- import ApiRequestService from "./apiRequestService";
- import {AssociativeArray, FORMAT} from "./data";
- import {Model, useRepo} from "pinia-orm";
- import UrlBuilder from "~/services/utils/urlBuilder";
- import ModelNormalizer from "~/services/data/serializer/normalizer/modelNormalizer";
- import HydraDenormalizer from "~/services/data/serializer/denormalizer/hydraDenormalizer";
- import ApiModel from "~/models/ApiModel";
- /**
- * Entity manager: make operations on the models defined with the Pinia-Orm library
- *
- * @see https://pinia-orm.codedredd.de/
- */
- class EntityManager {
- private apiRequestService: ApiRequestService;
- public constructor(apiRequestService: ApiRequestService) {
- this.apiRequestService = apiRequestService
- }
- public getRepository(model: typeof Model) {
- return useRepo(model)
- }
- /**
- * Fetch one entity by its id, save it to the store and returns it
- * @param model
- * @param id
- */
- public async fetch(model: typeof ApiModel, id: number) {
- const url = UrlBuilder.concat('api', model.entity, String(id))
- const response = await this.apiRequestService.get(url)
- // deserialize the response
- const entity = await HydraDenormalizer.denormalize(response)
- // Save data into the store
- const repository = this.getRepository(model)
- repository.save(entity)
- return entity
- }
- public findBy(model: typeof ApiModel, query: AssociativeArray) {
- }
- public fetchAll(model: typeof ApiModel) {
- }
- public async persist(model: typeof ApiModel, entity: ApiModel) {
- const data = ModelNormalizer.normalize(entity)
- let url = UrlBuilder.concat('api', model.entity)
- let response = null
- if (entity.isNew) {
- response = await this.apiRequestService.post(url, data)
- } else {
- url = UrlBuilder.concat(url, String(entity.id))
- response = await this.apiRequestService.put(url, data)
- }
- const fetchedEntity = await HydraDenormalizer.denormalize(response)
- // Save data into the store
- const repository = this.getRepository(model)
- repository.save(fetchedEntity)
- return fetchedEntity
- }
- public delete() {
- }
- public new(model: typeof ApiModel) {
- const entity = new model()
- entity.isNew = true
- // Save data into the store
- const repository = this.getRepository(model)
- repository.save(entity)
- return entity
- }
- public reset() {
- }
- }
- export default EntityManager
|