]>
Commit | Line | Data |
---|---|---|
8c4bbd94 C |
1 | import { Sequelize } from 'sequelize' |
2 | ||
3 | function isOutdated (model: { createdAt: Date, updatedAt: Date }, refreshInterval: number) { | |
4 | if (!model.createdAt || !model.updatedAt) { | |
5 | throw new Error('Miss createdAt & updatedAt attributes to model') | |
6 | } | |
7 | ||
8 | const now = Date.now() | |
9 | const createdAtTime = model.createdAt.getTime() | |
10 | const updatedAtTime = model.updatedAt.getTime() | |
11 | ||
12 | return (now - createdAtTime) > refreshInterval && (now - updatedAtTime) > refreshInterval | |
13 | } | |
14 | ||
15 | function throwIfNotValid (value: any, validator: (value: any) => boolean, fieldName = 'value', nullable = false) { | |
16 | if (nullable && (value === null || value === undefined)) return | |
17 | ||
18 | if (validator(value) === false) { | |
19 | throw new Error(`"${value}" is not a valid ${fieldName}.`) | |
20 | } | |
21 | } | |
22 | ||
23 | function buildTrigramSearchIndex (indexName: string, attribute: string) { | |
24 | return { | |
25 | name: indexName, | |
26 | // FIXME: gin_trgm_ops is not taken into account in Sequelize 6, so adding it ourselves in the literal function | |
27 | fields: [ Sequelize.literal('lower(immutable_unaccent(' + attribute + ')) gin_trgm_ops') as any ], | |
28 | using: 'gin', | |
29 | operator: 'gin_trgm_ops' | |
30 | } | |
31 | } | |
32 | ||
33 | // --------------------------------------------------------------------------- | |
34 | ||
35 | export { | |
36 | throwIfNotValid, | |
37 | buildTrigramSearchIndex, | |
38 | isOutdated | |
39 | } |