File size: 2,153 Bytes
05c5ed5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
76
77
78
79
80
81
82
83
84
85
import { getSession } from "auth/server";
import { bookmarkRepository } from "lib/db/repository";
import { z } from "zod";

const BookmarkTable = z.object({
  itemId: z.string().min(1),
  itemType: z.enum(["agent", "workflow"]),
});

export async function POST(request: Request) {
  const session = await getSession();

  if (!session?.user?.id) {
    return Response.json({ error: "Unauthorized" }, { status: 401 });
  }

  try {
    const body = await request.json();
    const { itemId, itemType } = BookmarkTable.parse(body);

    // Check if user has access to bookmark this item
    const hasAccess = await bookmarkRepository.checkItemAccess(
      itemId,
      itemType,
      session.user.id,
    );

    if (!hasAccess) {
      return Response.json(
        { error: "Item not found or access denied" },
        { status: 404 },
      );
    }

    // Create bookmark
    await bookmarkRepository.createBookmark(session.user.id, itemId, itemType);

    return Response.json({ success: true });
  } catch (error) {
    if (error instanceof z.ZodError) {
      return Response.json(
        { error: "Invalid input", details: error.message },
        { status: 400 },
      );
    }

    console.error("Error creating bookmark:", error);
    return Response.json(
      { error: "Failed to create bookmark" },
      { status: 500 },
    );
  }
}

export async function DELETE(request: Request) {
  const session = await getSession();

  if (!session?.user?.id) {
    return Response.json({ error: "Unauthorized" }, { status: 401 });
  }

  try {
    const body = await request.json();
    const { itemId, itemType } = BookmarkTable.parse(body);

    // Remove bookmark
    await bookmarkRepository.removeBookmark(session.user.id, itemId, itemType);

    return Response.json({ success: true });
  } catch (error) {
    if (error instanceof z.ZodError) {
      return Response.json(
        { error: "Invalid input", details: error.message },
        { status: 400 },
      );
    }

    console.error("Error deleting bookmark:", error);
    return Response.json(
      { error: "Failed to delete bookmark" },
      { status: 500 },
    );
  }
}