UNPKG

@thisisagile/easy

Version:

Straightforward library for building domain-driven microservice architectures

51 lines (41 loc) 1.38 kB
import { FetchOptions } from '../types/Gateway'; import { Repository } from '../types/Repository'; import { PageList, toPageList } from '../types/PageList'; import { Id, Key } from '../types/Id'; import { List } from '../types/List'; import { Req } from '../resources/Req'; import { JsonValue } from '../types/Json'; import { choose } from '../types/Case'; import { resolve } from '../utils/Promise'; export class Search<T, Options = FetchOptions> { constructor(protected repo: Repository<T, Options>) {} all(options?: Options): Promise<PageList<T>> { return this.repo.all(options); } byId(id: Id): Promise<T> { return this.repo.byId(id); } byIds(...ids: Id[]): Promise<List<T>> { return this.repo.byIds(...ids); } byKey(key: Key, options?: Options): Promise<PageList<T>> { return this.repo.byKey(key, options); } query({ query, skip, take }: Req): Promise<PageList<T>> { return this.search(query, { skip, take } as Options); } search(query: JsonValue, options?: Options): Promise<PageList<T>> { return choose(query) .is.not.empty( q => q, q => this.repo.search(q, options) ) .else(() => resolve(toPageList<T>())); } filter(options?: Options): Promise<PageList<T>> { return this.repo.filter(options); } exists(id: Id): Promise<boolean> { return this.repo.exists(id); } }