summaryrefslogtreecommitdiff
path: root/app/api/table-presets/route.ts
blob: f276b469a06af5d4274e56a201699d1939e9dc86 (plain)
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
86
87
88
89
90
91
92
93
94
95
96
97
98
// app/api/table-presets/route.ts
import { NextRequest, NextResponse } from "next/server"
import { getServerSession } from "next-auth"
import { authOptions } from "@/app/api/auth/[...nextauth]/route"
import  db  from "@/db/db"
import { eq, and, or } from "drizzle-orm"
import { tablePresets } from "@/db/schema/setting"

export async function GET(request: NextRequest) {
  try {
    const session = await getServerSession(authOptions)
    if (!session?.user?.id) {
      return NextResponse.json({ error: "Unauthorized" }, { status: 401 })
    }

    const { searchParams } = new URL(request.url)
    const tableId = searchParams.get("tableId")

    if (!tableId) {
      return NextResponse.json({ error: "tableId is required" }, { status: 400 })
    }

    // 사용자의 프리셋 + 공유된 프리셋 조회
    const presets = await db
      .select()
      .from(tablePresets)
      .where(
        and(
          eq(tablePresets.tableId, tableId),
          or(
            eq(tablePresets.userId, session.user.id),
            eq(tablePresets.isShared, true)
          )
        )
      )
      .orderBy(tablePresets.createdAt)

    return NextResponse.json(presets)
  } catch (error) {
    console.error("Error fetching presets:", error)
    return NextResponse.json({ error: "Internal Server Error" }, { status: 500 })
  }
}

export async function POST(request: NextRequest) {
  try {
    const session = await getServerSession(authOptions)
    if (!session?.user?.id) {
      return NextResponse.json({ error: "Unauthorized" }, { status: 401 })
    }

    const body = await request.json()
    const { tableId, name, settings, isDefault } = body

    // 기본 프리셋으로 설정하는 경우 기존 기본 프리셋 해제
    if (isDefault) {
      await db
        .update(tablePresets)
        .set({ isDefault: false })
        .where(
          and(
            eq(tablePresets.userId, session.user.id),
            eq(tablePresets.tableId, tableId)
          )
        )
    }

    const newPreset = await db
      .insert(tablePresets)
      .values({
        userId: session.user.id,
        tableId,
        name,
        settings,
        isDefault: Boolean(isDefault),
        isActive: true,
        createdBy: session.user.id,
      })
      .returning()

    // 다른 프리셋들의 active 상태 해제
    await db
      .update(tablePresets)
      .set({ isActive: false })
      .where(
        and(
          eq(tablePresets.userId, session.user.id),
          eq(tablePresets.tableId, tableId),
          eq(tablePresets.id, newPreset[0].id)
        )
      )

    return NextResponse.json(newPreset[0])
  } catch (error) {
    console.error("Error creating preset:", error)
    return NextResponse.json({ error: "Internal Server Error" }, { status: 500 })
  }
}