Spaces:
Running
Running
File size: 1,599 Bytes
c3e8f3d d0a1b70 a86b547 c3e8f3d a86b547 f80b091 a86b547 f80b091 a86b547 c3e8f3d f80b091 c3e8f3d f80b091 c3e8f3d f80b091 c3e8f3d d0a1b70 f80b091 c3e8f3d d0a1b70 38448fc d0a1b70 c3e8f3d 38448fc a86b547 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 71 72 73 74 75 |
'use server';
import { revalidatePath } from 'next/cache';
import { kv } from '@vercel/kv';
import { auth } from '@/auth';
import { ChatEntity } from '@/lib/types';
import { redirect } from 'next/navigation';
async function authCheck() {
const session = await auth();
const email = session?.user?.email;
if (!email) {
redirect('/');
}
return { email, isAdmin: email.endsWith('landing.ai') };
}
export async function getKVChats() {
const { email } = await authCheck();
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 ChatEntity[];
} catch (error) {
return [];
}
}
export async function getKVChat(id: string) {
// const { email, isAdmin } = await authCheck();
const chat = await kv.hgetall<ChatEntity>(`chat:${id}`);
if (!chat) {
redirect('/');
}
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);
}
|