Files
reader-api/app/api/user/settings/route.ts
T

60 lines
2.0 KiB
TypeScript

import { NextResponse } from "next/server"
import { getServerSession } from "next-auth/next"
import { authOptions } from "@/lib/auth"
import { prisma } from "@/lib/prisma"
export async function GET() {
const session = await getServerSession(authOptions)
if (!session?.user?.id) {
return NextResponse.json({ error: "Unauthorized" }, { status: 401 })
}
try {
const settings = await prisma.userSetting.findUnique({
where: { userId: session.user.id }
})
return NextResponse.json(settings || {})
} catch (error) {
console.error("GET User Settings Error", error)
return NextResponse.json({ error: "Internal Server Error" }, { status: 500 })
}
}
export async function POST(req: Request) {
const session = await getServerSession(authOptions)
if (!session?.user?.id) {
return NextResponse.json({ error: "Unauthorized" }, { status: 401 })
}
try {
const body = await req.json()
const { fontSize, lineHeight, letterSpacing, fontFamily } = body
const updateData: any = {}
if (fontSize !== undefined) updateData.fontSize = Number(fontSize)
if (lineHeight !== undefined) updateData.lineHeight = Number(lineHeight)
if (letterSpacing !== undefined) updateData.letterSpacing = Number(letterSpacing)
if (fontFamily !== undefined) updateData.fontFamily = String(fontFamily)
const createData = {
userId: session.user.id,
fontSize: fontSize !== undefined ? Number(fontSize) : 18,
lineHeight: lineHeight !== undefined ? Number(lineHeight) : 1.8,
letterSpacing: letterSpacing !== undefined ? Number(letterSpacing) : 0,
fontFamily: fontFamily !== undefined ? String(fontFamily) : "font-serif",
}
const settings = await prisma.userSetting.upsert({
where: { userId: session.user.id },
update: updateData,
create: createData
})
return NextResponse.json(settings)
} catch (error) {
console.error("POST User Settings Error", error)
return NextResponse.json({ error: "Internal Server Error" }, { status: 500 })
}
}