You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

42 lines
1.1 KiB

import { randomUUID } from "node:crypto";
import {
HOST_PUBLIC_SESSION_PREFIX,
HOST_PUBLIC_SESSION_TTL_SECONDS,
} from "@/lib/constants/host-public-api";
import { getRedis } from "@/lib/redis";
import type { HostPublicSessionPayload } from "@/modules/host/types";
function sessionKey(id: string): string {
return `${HOST_PUBLIC_SESSION_PREFIX}${id}`;
}
export async function saveHostPublicSession(
payload: Omit<HostPublicSessionPayload, "created_at">,
): Promise<string> {
const id = randomUUID();
const record: HostPublicSessionPayload = {
...payload,
created_at: new Date().toISOString(),
};
await getRedis().setex(
sessionKey(id),
HOST_PUBLIC_SESSION_TTL_SECONDS,
JSON.stringify(record),
);
return id;
}
export async function loadHostPublicSession(
id: string,
): Promise<HostPublicSessionPayload | null> {
const raw = await getRedis().get(sessionKey(id));
if (!raw) {
return null;
}
return JSON.parse(raw) as HostPublicSessionPayload;
}
export async function deleteHostPublicSession(id: string): Promise<void> {
await getRedis().del(sessionKey(id));
}