/
names-starting-by-letter.ts
57 lines (54 loc) · 1.86 KB
/
names-starting-by-letter.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import * as _ from 'lodash';
import { AntMultipleResultPrimaryQueryManager } from '../../../persistence/primary/query/ant-multiple-result-primary-query-manager';
import { Entity } from '../../../model/entity';
import { PrimaryEntityManager } from '../../../persistence/primary/primary-entity-manager';
import { RedisMiddleware } from '../../../persistence/primary/redis-middleware';
import { SecondaryEntityManagerMock } from '../../../testapi/api/secondary/secondary-entity-manager-mock';
export type NamedEntity = { id: number; name: string } & Entity;
export class NamesStartingByLetter extends AntMultipleResultPrimaryQueryManager<NamedEntity> {
/**
* Query prefix.
*/
protected _prefix: string;
/**
* Creates a new NamesStartingByLetter.
* @param primaryEntityManager Primary entity manager.
* @param redis Redis connection.
* @param reverseHashKey Reverse hash key.
* @param prefix Query prefix.
*/
public constructor(
primaryEntityManager: PrimaryEntityManager<NamedEntity>,
secondaryModelManagerMock: SecondaryEntityManagerMock<NamedEntity>,
redis: RedisMiddleware,
reverseHashKey: string,
prefix: string,
) {
/**
* Creates a query key for the parameters provided.
* @param params query parameters.
* @returns Key generated.
*/
const key = (params: any): string => {
if (params.name && (params.name as string).length) {
return this._prefix + (params.name as string)[0];
} else {
throw new Error('Invalid params');
}
};
super(
(params: any) =>
Promise.resolve(
_.map(
secondaryModelManagerMock.store.filter((entity) => entity.name.startsWith(params.name[0])),
(entity) => entity.id,
),
),
primaryEntityManager,
redis,
reverseHashKey,
key,
);
this._prefix = prefix;
}
}