75 lines
2.4 KiB
TypeScript

import { type NextRequest, NextResponse } from "next/server";
import { auth } from "@/auth";
import { prisma } from "@/lib/prisma";
import * as z from "zod";
const SettingsSchema = z.object({
hideGenAI: z.boolean(),
hideUpgrades: z.boolean(),
hideCrypto: z.boolean(),
});
export async function GET() {
const session = await auth();
if (!session || !session.user?.email) {
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
}
const { email } = session.user;
const user = await prisma.user.findUnique({ where: { email } });
if (user) {
return NextResponse.json({
hideGenAI: user.hideGenAI,
hideUpgrades: user.hideUpgrades,
hideCrypto: user.hideCrypto,
});
} else {
const newUser = await prisma.user.create({ data: { email } });
return NextResponse.json({
hideGenAI: newUser.hideGenAI,
hideUpgrades: newUser.hideUpgrades,
hideCrypto: newUser.hideCrypto,
});
}
}
export async function POST(request: NextRequest) {
try {
const session = await auth();
if (!session || !session.user?.email) {
return NextResponse.json({ error: "Unauthorized - Please login first" }, { status: 401 });
}
const jsonData = await request.json();
const parsedSettings = SettingsSchema.safeParse(jsonData);
if (!parsedSettings.success) {
return NextResponse.json({ error: "Invalid settings" }, { status: 400 });
}
const { hideGenAI, hideUpgrades, hideCrypto } = parsedSettings.data;
const { email } = session.user;
const user = await prisma.user.findUnique({ where: { email } });
if (user) {
const updatedUser = await prisma.user.update({
where: { email },
data: { hideGenAI, hideUpgrades, hideCrypto },
});
return NextResponse.json({
hideGenAI: updatedUser.hideGenAI,
hideUpgrades: updatedUser.hideUpgrades,
hideCrypto: updatedUser.hideCrypto,
});
} else {
const newUser = await prisma.user.create({
data: { email, hideGenAI, hideUpgrades, hideCrypto },
});
return NextResponse.json({
hideGenAI: newUser.hideGenAI,
hideUpgrades: newUser.hideUpgrades,
hideCrypto: newUser.hideCrypto,
});
}
} catch (error) {
console.error("[!] Error processing settings update:", error);
return NextResponse.json({ error: "Failed to update settings" }, { status: 500 });
}
}