Generalizace úložiště pro libovolná data

This commit is contained in:
Martin Berka 2023-09-27 15:09:36 +02:00
parent 87beb5b66e
commit bef6178a6f
4 changed files with 24 additions and 26 deletions

View File

@ -43,7 +43,7 @@ function getEmptyData(date?: Date): ClientData {
*/ */
export async function getData(date?: Date): Promise<ClientData> { export async function getData(date?: Date): Promise<ClientData> {
const dateString = formatDate(date ?? getToday()); 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()); data.todayWeekIndex = getDayOfWeekIndex(getToday());
// Dotažení jídel, pokud je ještě nemáme // Dotažení jídel, pokud je ještě nemáme
if (!data.menus) { if (!data.menus) {

View File

@ -8,21 +8,21 @@ import { ClientData } from "../../../types";
*/ */
export interface StorageInterface { export interface StorageInterface {
/** /**
* Vrátí příznak, zda existují data pro předané datum. * Vrátí příznak, zda existují data pro předaný klíč.
* @param date datum, pro které zjišťujeme data * @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. * Vrátí veškerá data pro předaný klíč.
* @param date datum, pro které vrátit data * @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. * Uloží data pod předaný klíč.
* @param date datum, kterému patří ukládaná data * @param key klíč, pod kterým uložit data (typicky datum)
* @param data data pro uložení * @param data data pro uložení
*/ */
setData(date: string, data: ClientData): Promise<void>; setData<Type>(key: string, data: Type): Promise<void>;
} }

View File

@ -1,5 +1,4 @@
import JSONdb from 'simple-json-db'; import JSONdb from 'simple-json-db';
import { ClientData } from "../../../types";
import { StorageInterface } from "./StorageInterface"; import { StorageInterface } from "./StorageInterface";
const db = new JSONdb('./data.json'); const db = new JSONdb('./data.json');
@ -9,16 +8,16 @@ const db = new JSONdb('./data.json');
*/ */
export default class JsonStorage implements StorageInterface { export default class JsonStorage implements StorageInterface {
hasData(date: string): Promise<boolean> { hasData(key: string): Promise<boolean> {
return Promise.resolve(db.has(date)); return Promise.resolve(db.has(key));
} }
getData(date: string): Promise<ClientData> { getData<Type>(key: string): Promise<Type> {
return db.get(date); return db.get(key);
} }
setData(date: string, data: ClientData): Promise<void> { setData<Type>(key: string, data: Type): Promise<void> {
db.set(date, data); db.set(key, data);
return Promise.resolve(); return Promise.resolve();
} }
} }

View File

@ -1,6 +1,5 @@
import { RedisClientType, createClient } from 'redis'; import { RedisClientType, createClient } from 'redis';
import { StorageInterface } from "./StorageInterface"; import { StorageInterface } from "./StorageInterface";
import { ClientData } from '../../../types';
let client: RedisClientType; let client: RedisClientType;
@ -15,18 +14,18 @@ export default class RedisStorage implements StorageInterface {
client.connect(); client.connect();
} }
async hasData(date: string) { async hasData(key: string) {
const data = await client.json.get(date); const data = await client.json.get(key);
return (data ? true : false); return (data ? true : false);
} }
async getData(date: string) { async getData<Type>(key: string) {
const data = await client.json.get(date, { path: '.' }); const data = await client.json.get(key, { path: '.' });
return data as unknown as ClientData; return data as Type;
} }
async setData(date: string, data: ClientData) { async setData<Type>(key: string, data: Type) {
await client.json.set(date, '.', data as any); await client.json.set(key, '.', data as any);
const check = await client.json.get(date); await client.json.get(key);
} }
} }