diff --git a/pages/api/user/profile.ts b/pages/api/user/profile.ts index 2c3f930528..43562cc743 100644 --- a/pages/api/user/profile.ts +++ b/pages/api/user/profile.ts @@ -1,6 +1,6 @@ import type { NextApiRequest, NextApiResponse } from "next"; +import prisma from "@lib/prisma"; import { getSession } from "@lib/auth"; -import prisma, { whereAndSelect } from "@lib/prisma"; export default async function handler(req: NextApiRequest, res: NextApiResponse) { const session = await getSession({ req: req }); @@ -10,56 +10,25 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) return; } - // Get user - const user = await whereAndSelect( - prisma.user.findUnique, - { - id: session.user.id, - }, - ["id", "password"] - ); + const description = req.body.description; + delete req.body.description; - if (!user) { - res.status(404).json({ message: "User not found" }); - return; - } - - const username = req.body.username; - // username is changed: username is optional but it is necessary to be unique, enforce here - if (username !== session.user.username) { - const userConflict = await prisma.user.findFirst({ + try { + await prisma.user.update({ where: { - username, + id: session.user.id, + }, + data: { + ...req.body, + bio: description, }, }); - if (userConflict) { + } catch (e) { + if (e.code === "P2002") { return res.status(409).json({ message: "Username already taken" }); } + throw e; } - const name = req.body.name; - const description = req.body.description; - const avatar = req.body.avatar; - const timeZone = req.body.timeZone; - const weekStart = req.body.weekStart; - const hideBranding = req.body.hideBranding; - const theme = req.body.theme; - - await prisma.user.update({ - where: { - id: user.id, - }, - data: { - username, - name, - avatar, - bio: description, - timeZone, - weekStart, - hideBranding, - theme, - }, - }); - return res.status(200).json({ message: "Profile updated successfully" }); }