import { z } from "zod"; import * as cache from "@lib/cache/cache.ts"; export function createSchema(name: string, schema: T) { type Data = z.infer; return { async create(input: Omit): Promise { const data = schema.safeParse(input); if (data.success) { const d = data.data; const id = d["id"]; if (!id) return d; await cache.set(`${name}:${id}`, JSON.stringify(d)); return d; } return null; }, async findAll(): Promise { const keys = await cache.keys(`${name}:*`); return Promise.all(keys.map((k) => { return cache.get(k); })).then((values) => values.map((v) => JSON.parse(v || "null"))); }, async find(id: string) { const k = await cache.get(`${name}:${id}`); return JSON.parse(k || "null") as Data | null; }, delete(id: string) { return cache.del(`${name}:${id}`); }, }; }