File size: 1,332 Bytes
c3e8f3d
 
 
 
 
 
d0a1b70
c3e8f3d
 
f80b091
 
c3e8f3d
f80b091
 
 
c3e8f3d
f80b091
 
 
 
 
c3e8f3d
f80b091
 
 
c3e8f3d
f80b091
c3e8f3d
d0a1b70
f80b091
 
 
c3e8f3d
 
d0a1b70
 
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
'use server';

import { revalidatePath } from 'next/cache';
import { kv } from '@vercel/kv';

import { auth } from '@/auth';
import { ChatEntity } 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 ChatEntity[];
  } catch (error) {
    return [];
  }
}

export async function getKVChat(id: string) {
  const chat = await kv.hgetall<ChatEntity>(`chat:${id}`);

  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);
}