import { IdentifiableMemoryPersistence } from "pip-services4-persistence-node";
import { FilterParams, PagingParams } from "pip-services4-data-node";
import { Context } from "pip-services4-components-node";

export class MyMemoryPersistence
    extends IdentifiableMemoryPersistence<Dummy, string> {


    public constructor() {
        super();
    }

    private composeFilter(filter: FilterParams): (item: Dummy) => boolean {
        filter = filter != null ? filter : new FilterParams();
        let id = filter.getAsNullableString("id");
        let tempIds = filter.getAsNullableString("ids");
        let ids = tempIds != null ? tempIds.split(',') : null;
        let key = filter.getAsNullableString("key");

        return (item: Dummy) => {
            if (id != null && item.id != id)
                return false;
            if (ids != null && ids.indexOf(item.id) < 0)
                return false;
            if (key != null && item.key != key)
                return false;
            return true;
        };
    }

    public async getPageByFilter(ctx: Context, filter: FilterParams, paging: PagingParams): Promise<DataPage<Dummy>> {
        return await super.getPageByFilter(ctx, this.composeFilter(filter), paging, null, null);
    }

    public async getOneById(ctx: Context, key: string): Promise<Dummy> {
        for(let item of this._items){
            if (item.key == key) {
                this._logger.trace(ctx, "Found object by key=" + key);
                return item;
            }
        }

        this._logger.trace(ctx, "Cannot find by key=" + key);
    }
}

...

let persistence = new MyMemoryPersistence();