From 2a60fb286811729a919b409a78b06e8bdfa47bac Mon Sep 17 00:00:00 2001 From: Carson Full Date: Mon, 23 Sep 2024 09:28:19 -0500 Subject: [PATCH] feat(cache): allow default options at service level --- packages/cache/src/cache.service.ts | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/packages/cache/src/cache.service.ts b/packages/cache/src/cache.service.ts index 25f05b3..d1f84e5 100644 --- a/packages/cache/src/cache.service.ts +++ b/packages/cache/src/cache.service.ts @@ -13,17 +13,27 @@ import '@seedcompany/common/temporal/luxon'; @Injectable() export class CacheService { - constructor(private readonly store: CacheStore) {} + constructor( + private readonly store: CacheStore, + private readonly defaultOptions?: StoreItemOptions, + ) {} get adaptTo() { return new CacheAdapters(this); } - namespace(subSpace: string) { + withDefaultOptions(options: ItemOptions) { + return new CacheService(this.store, resolveOptions(options)); + } + + namespace(subSpace: string, defaultOptions?: ItemOptions) { if (!subSpace) { return this; } - return new CacheService(new NamespaceStore(this.store, subSpace)); + return new CacheService( + new NamespaceStore(this.store, subSpace), + defaultOptions ? resolveOptions(defaultOptions) : undefined, + ); } item(key: string, options?: ItemOptions): CacheItem { @@ -31,11 +41,16 @@ export class CacheService { } async get(key: string, options: ItemOptions = {}): Promise { - return await this.store.get(key, resolveOptions(options)); + return await this.store.get(key, this.resolveOptions(options)); } async set(key: string, value: unknown, options: ItemOptions = {}) { - await this.store.set(key, value, resolveOptions(options)); + await this.store.set(key, value, this.resolveOptions(options)); + } + + private resolveOptions(options: ItemOptions) { + const opts = resolveOptions(options); + return this.defaultOptions ? { ...this.defaultOptions, ...opts } : opts; } async delete(key: string) {