import { FilterParams } from 'pip-services3-commons-nodex'; import { PagingParams } from 'pip-services3-commons-nodex'; import { DataPage } from 'pip-services3-commons-nodex'; import { IdentifiableMemoryPersistence } from 'pip-services3-data-nodex'; import { FileV1 } from '../data/version1/FileV1'; import { IFilesPersistence } from './IFilesPersistence'; export class FilesMemoryPersistence extends IdentifiableMemoryPersistence implements IFilesPersistence { constructor() { super(); } public async getGroups(correlationId: string, paging: PagingParams): Promise> { let items = this._items.map((item) => item.group); items = [...new Set(items)].sort(); // Extract a page paging = paging != null ? paging : new PagingParams(); let skip = paging.getSkip(-1); let take = paging.getTake(this._maxPageSize); let total = null; if (paging.total) total = items.length; if (skip > 0) items = items.slice(skip); items = items.slice(0, take); let page = new DataPage(items, total); return page; } private matchString(value: string, search: string): boolean { if (value == null && search == null) return true; if (value == null || search == null) return false; return value.toLowerCase().indexOf(search) >= 0; } private matchSearch(item: FileV1, search: string): boolean { search = search.toLowerCase(); if (this.matchString(item.name, search)) return true; if (this.matchString(item.description, search)) return true; return false; } private composeFilter(filter: FilterParams): any { filter = filter || new FilterParams(); let search = filter.getAsNullableString('search'); let id = filter.getAsNullableString('id'); let name = filter.getAsNullableString('name'); let group = filter.getAsNullableString('group'); let expired = filter.getAsNullableBoolean('expired'); let fromCreateTime = filter.getAsNullableDateTime('from_create_time'); let toCreateTime = filter.getAsNullableDateTime('to_create_time'); let now = new Date(); return (item: FileV1) => { if (search != null && !this.matchSearch(item, search)) return false; if (id != null && id != item.id) return false; if (name != null && name != item.name) return false; if (group != null && group != item.group) return false; if (expired != null && expired == true && item.expire_time > now) return false; if (expired != null && expired == false && item.expire_time <= now) return false; if (fromCreateTime != null && item.create_time >= fromCreateTime) return false; if (toCreateTime != null && item.create_time < toCreateTime) return false; return true; }; } public async getPageByFilter(correlationId: string, filter: FilterParams, paging: PagingParams): Promise> { return await super.getPageByFilter(correlationId, this.composeFilter(filter), paging, null, null); } }