import {Injectable} from '@angular/core'; import {Observable} from 'rxjs/Observable'; import {Document} from '../../src/app/model/document'; import {Query} from '../../src/app/datastore/query'; import {Datastore} from '../../src/app/datastore/datastore'; import {FindResult} from '../../src/app/datastore/read-datastore'; /** * @author Daniel de Oliveira */ @Injectable() export class MemoryDatastore implements Datastore { private db: Promise; private objectCache: { [id: string]: Document } = {}; constructor() {}; public getUnsyncedObjects(): Observable|undefined { return undefined; } // NOT IMPLEMENTED public remoteChangesNotifications(): Observable|undefined { return undefined; } public create(document: Document): Promise { this.objectCache[document.resource.id as any] = document; return Promise.resolve(document); } public update(document: Document): Promise { this.objectCache[document.resource.id as any] = document; return Promise.resolve(document); } public refresh(document: Document): Promise { return Promise.resolve(undefined); } public get(id: string): Promise { return new Promise((resolve, reject) => { if (!this.objectCache[id]) reject('document not found'); resolve(this.objectCache[id]); }); } public remove(document: Document): Promise { return Promise.resolve(); } public clear(): Promise { return new Promise((resolve, reject) => { this.db.then(db => { resolve(); }); }); } public find(query: Query): Promise { if (!query.q) query.q = ''; const queryString = query.q.toLowerCase(); const results: Document[] = []; for (let i in this.objectCache) { if ((this.objectCache[i].resource.id as any).indexOf(queryString) != -1) results.push(this.objectCache[i]); } return Promise.resolve({ documents: results, totalCount: results.length }); } public all(): Promise { return new Promise((resolve, reject) => { resolve(); }); } }