75 lines
2.4 KiB
TypeScript
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 });
|
||
|
}
|
||
|
}
|