import { User, Website } from '@prisma/client'; import redis from '@umami/redis-client'; import { getSession, getUser, getWebsite } from '../queries'; const { fetchObject, storeObject, deleteObject } = redis; async function fetchWebsite(id): Promise { return fetchObject(`website:${id}`, () => getWebsite({ id })); } async function storeWebsite(data) { const { id } = data; const key = `website:${id}`; return storeObject(key, data); } async function deleteWebsite(id) { return deleteObject(`website:${id}`); } async function fetchUser(id): Promise { return fetchObject(`user:${id}`, () => getUser({ id }, { includePassword: true })); } async function storeUser(data) { const { id } = data; const key = `user:${id}`; return storeObject(key, data); } async function deleteUser(id) { return deleteObject(`user:${id}`); } async function fetchSession(id) { return fetchObject(`session:${id}`, () => getSession({ id })); } async function storeSession(data) { const { id } = data; const key = `session:${id}`; return storeObject(key, data); } async function deleteSession(id) { return deleteObject(`session:${id}`); } async function fetchUserBlock(userId: string) { const key = `user:block:${userId}`; return redis.get(key); } async function incrementUserBlock(userId: string) { const key = `user:block:${userId}`; return redis.incr(key); } export default { fetchWebsite, storeWebsite, deleteWebsite, fetchUser, storeUser, deleteUser, fetchSession, storeSession, deleteSession, fetchUserBlock, incrementUserBlock, enabled: redis.enabled, };