Newer
Older
import { Injectable } from '@angular/core';
import { Resource, ResourceFactory, ResourceUri, getUrl } from '@ngxp/rest';
import { Observable } from 'rxjs';

OZGCloud
committed
import { CreateResourceData, LinkRelationName, SaveResourceData } from './resource.model';
import { ListResource } from './resource.util';

OZGCloud
committed
@Injectable({ providedIn: 'root' })

OZGCloud
committed
export class ResourceRepository {

OZGCloud
committed
constructor(private resourceFactory: ResourceFactory) {}

OZGCloud
committed
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;

OZGCloud
committed
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> {

OZGCloud
committed
return this.resourceFactory.fromId(uri).get();

OZGCloud
committed
public save<T>(saveResourceData: SaveResourceData): Observable<T> {

OZGCloud
committed
return this.resourceFactory
.from(saveResourceData.resource)
.put(saveResourceData.linkRel, saveResourceData.toSave);
}

OZGCloud
committed
public delete(resource: Resource, linkRel: LinkRelationName): Observable<Resource> {
return this.resourceFactory.from(resource).delete(linkRel);
}