import { Song } from 'src/app/models/song.model'; import { ODataService, ODataQuery, Expand } from 'odata-v4-ng'; import { Observable } from 'rxjs'; import { map, tap } from 'rxjs/operators'; import { base } from './urls'; export class OdataService { private url: string; constructor(private odataService: ODataService, private entity: string) { this.url = base + '/odata/'; } public list$(properties: string[]): Observable { const query = new ODataQuery(this.odataService, this.url) .entitySet(this.entity) .select(properties); const get = query.get().pipe(map(_ => _.toPropertyValue())); return get; } public get$( id: number, properties: string[], expands: string[] ): Observable { const query = new ODataQuery(this.odataService, this.url) .entitySet(this.entity) .entityKey(id) .expand(expands.map(_ => new Expand(_))) .select(properties); const get = query.get().pipe(map(_ => _.toEntity())); return get; } public patch$(id: number, control: string, value: any): Observable { const valueSet = { [control]: value }; const query = new ODataQuery(this.odataService, this.url) .entitySet(this.entity) .entityKey(id); const get = query.patch(valueSet).pipe(map(() => true)); return get; } public post$(values: any): Observable { const querry = new ODataQuery(this.odataService, this.url); const post = querry .entitySet(this.entity) .post(values) .pipe( tap(_ => console.log(_)), map(_ => { const mapped = _.toEntity(); return mapped; }), tap(_ => console.log(_)) ); return post; } }