vision-agent / lib /kv /chat.ts
MingruiZhang's picture
done (#4)
f80b091 unverified
raw
history blame
1.45 kB
'use server';
import { revalidatePath } from 'next/cache';
import { redirect } from 'next/navigation';
import { kv } from '@vercel/kv';
import { auth } from '@/auth';
import { type Chat } from '@/lib/types';
export async function getKVChats() {
const session = await auth();
const email = session?.user?.email;
if (!email) {
return [];
}
try {
const pipeline = kv.pipeline();
const chats: string[] = await kv.zrange(`user:chat:${email}`, 0, -1, {
rev: true,
});
for (const chat of chats) {
pipeline.hgetall(chat);
}
const results = await pipeline.exec();
return results as Chat[];
} catch (error) {
return [];
}
}
export async function getKVChat(id: string, userId: string) {
const chat = await kv.hgetall<Chat>(`chat:${id}`);
if (!chat || (userId && chat.userId !== userId)) {
return null;
}
return chat;
}
export async function removeKVChat({ id, path }: { id: string; path: string }) {
const session = await auth();
if (!session) {
return {
error: 'Unauthorized',
};
}
//Convert uid to string for consistent comparison with session.user.id
const uid = String(await kv.hget(`chat:${id}`, 'userId'));
if (uid !== session?.user?.id) {
return {
error: 'Unauthorized',
};
}
await kv.del(`chat:${id}`);
await kv.zrem(`user:chat:${session.user.id}`, `chat:${id}`);
revalidatePath('/');
return revalidatePath(path);
}