Spaces:
Sleeping
Sleeping
File size: 1,454 Bytes
c3e8f3d f80b091 c3e8f3d f80b091 c3e8f3d f80b091 c3e8f3d f80b091 c3e8f3d f80b091 c3e8f3d f80b091 c3e8f3d f80b091 c3e8f3d f80b091 c3e8f3d f80b091 c3e8f3d f80b091 c3e8f3d f80b091 c3e8f3d f80b091 c3e8f3d f80b091 c3e8f3d f80b091 c3e8f3d f80b091 c3e8f3d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
'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);
}
|