File size: 1,623 Bytes
c3e8f3d
 
 
 
 
 
d0a1b70
a86b547
c3e8f3d
a86b547
f80b091
 
 
a86b547
f80b091
a86b547
 
 
 
 
c3e8f3d
f80b091
 
 
 
 
c3e8f3d
f80b091
 
 
c3e8f3d
f80b091
c3e8f3d
d0a1b70
f80b091
 
 
c3e8f3d
 
d0a1b70
a86b547
d0a1b70
c3e8f3d
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?.user !== email || !isAdmin) {
    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);
}