From 56956dba4fd9c15217b367a99d70d4df97175a31 Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Thu, 23 Jun 2022 20:27:20 +0100 Subject: [PATCH] Adding a class wrapper incase using get/put functions multiple times, functions like the PouchDB constructor. --- .../src/cache/tests/writethrough.spec.js | 12 +++++------ .../backend-core/src/cache/writethrough.ts | 21 ++++++++++++++++--- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/packages/backend-core/src/cache/tests/writethrough.spec.js b/packages/backend-core/src/cache/tests/writethrough.spec.js index 6a949a7489..a0ada8b51b 100644 --- a/packages/backend-core/src/cache/tests/writethrough.spec.js +++ b/packages/backend-core/src/cache/tests/writethrough.spec.js @@ -1,5 +1,5 @@ require("../../../tests/utilities/TestConfiguration") -const { get, put } = require("../writethrough") +const { Writethrough } = require("../writethrough") const { dangerousGetDB } = require("../../db") const tk = require("timekeeper") @@ -9,20 +9,20 @@ tk.freeze(START_DATE) const DELAY = 5000 const db = dangerousGetDB("test") +const writethrough = new Writethrough(db) describe("writethrough", () => { - describe("put", () => { let first it("should be able to store, will go to DB", async () => { - const response = await put(db,{ _id: "test", value: 1 }, DELAY) + const response = await writethrough.put({ _id: "test", value: 1 }, DELAY) const output = await db.get(response._id) first = output expect(output.value).toBe(1) }) it("second put shouldn't update DB", async () => { - const response = await put(db, { ...first, value: 2 }, DELAY) + const response = await writethrough.put({ ...first, value: 2 }, DELAY) const output = await db.get(response._id) expect(first._rev).toBe(output._rev) expect(output.value).toBe(1) @@ -30,7 +30,7 @@ describe("writethrough", () => { it("should put it again after delay period", async () => { tk.freeze(START_DATE + DELAY + 1) - const response = await put(db, { ...first, value: 3 }, DELAY) + const response = await writethrough.put({ ...first, value: 3 }, DELAY) const output = await db.get(response._id) expect(response._rev).not.toBe(first._rev) expect(output.value).toBe(3) @@ -39,7 +39,7 @@ describe("writethrough", () => { describe("get", () => { it("should be able to retrieve", async () => { - const response = await get(db, "test") + const response = await writethrough.get("test") expect(response.value).toBe(3) }) }) diff --git a/packages/backend-core/src/cache/writethrough.ts b/packages/backend-core/src/cache/writethrough.ts index 85e3c9e50e..02932d0c2c 100644 --- a/packages/backend-core/src/cache/writethrough.ts +++ b/packages/backend-core/src/cache/writethrough.ts @@ -21,11 +21,11 @@ function makeCacheItem(value: any, lastWrite: number | null = null): CacheItem { return { value, lastWrite: lastWrite || Date.now() } } -exports.put = async ( +export async function put( db: PouchDB.Database, value: any, writeRateMs: number = DEFAULT_WRITE_RATE_MS -) => { +) { const cache = await getCache() const key = value._id let cacheItem: CacheItem | undefined = await cache.get(key) @@ -46,7 +46,7 @@ exports.put = async ( return output } -exports.get = async (db: PouchDB.Database, id: string): Promise => { +export async function get(db: PouchDB.Database, id: string): Promise { const cache = await getCache() let cacheItem: CacheItem = await cache.get(id) if (!cacheItem) { @@ -56,3 +56,18 @@ exports.get = async (db: PouchDB.Database, id: string): Promise => { } return cacheItem.value } + +export class Writethrough { + db: PouchDB.Database + constructor(db: PouchDB.Database) { + this.db = db + } + + async put(value: any, writeRateMs: number = DEFAULT_WRITE_RATE_MS) { + return put(this.db, value, writeRateMs) + } + + async get(id: string) { + return get(this.db, id) + } +}