@perdieminc/models
v3.3.6
Published
A simple crud model provider with caching support and extendable design
Readme
PerDiem Models
A simple model extension for Knex with Redis caching and read replica support
Exports
import { Model, Cache, Connector } from 'perdiem-models'Connector
Manages primary/replica database connections with round-robin read distribution.
new Connector(primaryDatabase: Pool<Client>, replicas: Pool<Client>[])Model
Provides CRUD operations on a Knex-backed table with optional caching and read replica routing.
new Model<T>(knex: Knex, config: ModelConfig)type ModelConfig = {
table: string
columns?: string[]
cacheOptions?: CacheOptions
connector: Connector
}Methods
getTransaction(): Promise<Knex.Transaction>
create(record: IncommingRecord<T>, hooks?: ModelHooks<T>, connectionConfig?: ModalConnectionConfig): Promise<T[]>
update(conditions: ModelConditions<T>, record: IncommingRecord<T>, hooks?: ModelHooks<T>, connectionConfig?: ModalConnectionConfig): Promise<T[]>
del(conditions: ModelConditions<T>, hooks?: ModelHooks<T>, connectionConfig?: ModalConnectionConfig): Promise<T[]>
get(conditions: ModelConditions<T>, hooks?: ModelHooks<T>, connectionConfig?: ModalConnectionConfig): Promise<T | null>
getAll(conditions?: ModelConditions<T>, options?: ModelOptions, hooks?: ModelHooks<T>, connectionConfig?: ModalConnectionConfig): Promise<T[]>
getMany(conditions: ModelConditions<T>, hooks?: ModelHooks<T>, connectionConfig?: ModalConnectionConfig): Promise<T[]>
count(conditions?: ModelConditions<T>, columns?: string[], connectionConfig?: ModalConnectionConfig): Promise<number>
customRead(queryBuilder: (q: Knex.QueryBuilder) => Knex.QueryBuilder, connectionConfig?: ModalConnectionConfig): Promise<T[]>
customWrite(queryBuilder: (q: Knex.QueryBuilder) => Knex.QueryBuilder, connectionConfig?: ModalConnectionConfig): Promise<T[]>Cache
Standalone Redis cache with key-based lookups, pipelined reads/writes, and configurable TTL.
new Cache<T>(config: CacheOptions)type CacheOptions = {
provider: Redis
prefix: string
keys: string[]
expiryMode?: string // default: 'EX'
expireTime?: number // default: 48 hours
disabled?: boolean
}Methods
get(keySet: KeySet<T>): Promise<T | null>
getMultiple(keySets: KeySet<T>[]): Promise<FetchedRecord<T>[] | null>
set(record: FetchedRecord<T>): Promise<void>
setMultiple(records: FetchedRecord<T>[]): Promise<void>
del(keySet: KeySet<T>): Promise<void>
delMultiple(keySets: KeySet<T>[]): Promise<void>