Skip to content
Snippets Groups Projects
resource.repository.ts 1.53 KiB
Newer Older
  • Learn to ignore specific revisions
  • import { Injectable } from '@angular/core';
    
    import { Resource, ResourceFactory, ResourceUri, getUrl } from '@ngxp/rest';
    import { Observable } from 'rxjs';
    
    import { CreateResourceData, LinkRelationName, SaveResourceData } from './resource.model';
    import { ListResource } from './resource.util';
    
    OZGCloud's avatar
    OZGCloud committed
    
    
      constructor(private resourceFactory: ResourceFactory) {}
    
    
      public getListResource(resource: Resource, linkRel: string): Observable<ListResource> {
    
        const uriWithoutParameter: string = this.getUrlWithoutParameter(getUrl(resource, linkRel));
        return this.resourceFactory.fromId(uriWithoutParameter).get();
      }
    
      getUrlWithoutParameter(uri: ResourceUri): string {
        if (uri.includes('{')) {
          return uri.substring(0, uri.indexOf('{'));
        }
        return uri;
    
      public createResource(createResourceData: CreateResourceData<Resource>): Observable<Resource> {
    
        return this.resourceFactory
          .from(createResourceData.resource)
          .post(createResourceData.linkRel, createResourceData.toCreate);
    
      public getResource<T>(uri: ResourceUri): Observable<T> {
    
        return this.resourceFactory.fromId(uri).get();
    
    OZGCloud's avatar
    OZGCloud committed
      }
    
      public save<T>(saveResourceData: SaveResourceData): Observable<T> {
    
        return this.resourceFactory
          .from(saveResourceData.resource)
          .put(saveResourceData.linkRel, saveResourceData.toSave);
      }
    
    
      public delete(resource: Resource, linkRel: LinkRelationName): Observable<Resource> {
        return this.resourceFactory.from(resource).delete(linkRel);
      }
    
    OZGCloud's avatar
    OZGCloud committed
    }