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