From bef6178a6f7e9531843b345b6bc2beb757f9549b Mon Sep 17 00:00:00 2001 From: Martin Berka <martin.berka@radbuza.net> Date: Wed, 27 Sep 2023 15:09:36 +0200 Subject: [PATCH] =?UTF-8?q?Generalizace=20=C3=BAlo=C5=BEi=C5=A1t=C4=9B=20p?= =?UTF-8?q?ro=20libovoln=C3=A1=20data?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/src/service.ts | 2 +- server/src/storage/StorageInterface.ts | 18 +++++++++--------- server/src/storage/json.ts | 13 ++++++------- server/src/storage/redis.ts | 17 ++++++++--------- 4 files changed, 24 insertions(+), 26 deletions(-) diff --git a/server/src/service.ts b/server/src/service.ts index 02403f8..ef045e6 100644 --- a/server/src/service.ts +++ b/server/src/service.ts @@ -43,7 +43,7 @@ function getEmptyData(date?: Date): ClientData { */ export async function getData(date?: Date): Promise<ClientData> { const dateString = formatDate(date ?? getToday()); - const data = await storage.getData(dateString) || getEmptyData(date); + const data: ClientData = await storage.getData(dateString) || getEmptyData(date); data.todayWeekIndex = getDayOfWeekIndex(getToday()); // Dotažení jídel, pokud je ještě nemáme if (!data.menus) { diff --git a/server/src/storage/StorageInterface.ts b/server/src/storage/StorageInterface.ts index d49d828..cc4d6ec 100644 --- a/server/src/storage/StorageInterface.ts +++ b/server/src/storage/StorageInterface.ts @@ -8,21 +8,21 @@ import { ClientData } from "../../../types"; */ export interface StorageInterface { /** - * Vrátí příznak, zda existují data pro předané datum. - * @param date datum, pro které zjišťujeme data + * Vrátí příznak, zda existují data pro předaný klíč. + * @param key klíč, pro který zjišťujeme data (typicky datum) */ - hasData(date: string): Promise<boolean>; + hasData(key: string): Promise<boolean>; /** - * Vrátí veškerá data pro předané datum. - * @param date datum, pro které vrátit data + * Vrátí veškerá data pro předaný klíč. + * @param key klíč, pro který vrátit data (typicky datum) */ - getData(date: string): Promise<ClientData>; + getData<Type>(key: string): Promise<Type>; /** - * Uloží data pro předané datum. - * @param date datum, kterému patří ukládaná data + * Uloží data pod předaný klíč. + * @param key klíč, pod kterým uložit data (typicky datum) * @param data data pro uložení */ - setData(date: string, data: ClientData): Promise<void>; + setData<Type>(key: string, data: Type): Promise<void>; } \ No newline at end of file diff --git a/server/src/storage/json.ts b/server/src/storage/json.ts index a3758c7..be331b1 100644 --- a/server/src/storage/json.ts +++ b/server/src/storage/json.ts @@ -1,5 +1,4 @@ import JSONdb from 'simple-json-db'; -import { ClientData } from "../../../types"; import { StorageInterface } from "./StorageInterface"; const db = new JSONdb('./data.json'); @@ -9,16 +8,16 @@ const db = new JSONdb('./data.json'); */ export default class JsonStorage implements StorageInterface { - hasData(date: string): Promise<boolean> { - return Promise.resolve(db.has(date)); + hasData(key: string): Promise<boolean> { + return Promise.resolve(db.has(key)); } - getData(date: string): Promise<ClientData> { - return db.get(date); + getData<Type>(key: string): Promise<Type> { + return db.get(key); } - setData(date: string, data: ClientData): Promise<void> { - db.set(date, data); + setData<Type>(key: string, data: Type): Promise<void> { + db.set(key, data); return Promise.resolve(); } } \ No newline at end of file diff --git a/server/src/storage/redis.ts b/server/src/storage/redis.ts index 188b114..4251223 100644 --- a/server/src/storage/redis.ts +++ b/server/src/storage/redis.ts @@ -1,6 +1,5 @@ import { RedisClientType, createClient } from 'redis'; import { StorageInterface } from "./StorageInterface"; -import { ClientData } from '../../../types'; let client: RedisClientType; @@ -15,18 +14,18 @@ export default class RedisStorage implements StorageInterface { client.connect(); } - async hasData(date: string) { - const data = await client.json.get(date); + async hasData(key: string) { + const data = await client.json.get(key); return (data ? true : false); } - async getData(date: string) { - const data = await client.json.get(date, { path: '.' }); - return data as unknown as ClientData; + async getData<Type>(key: string) { + const data = await client.json.get(key, { path: '.' }); + return data as Type; } - async setData(date: string, data: ClientData) { - await client.json.set(date, '.', data as any); - const check = await client.json.get(date); + async setData<Type>(key: string, data: Type) { + await client.json.set(key, '.', data as any); + await client.json.get(key); } } \ No newline at end of file