fantasy-manager/pages/api/user/index.js
Lukas Schaefer 6ac2c5fb4e
Fix bad query
Signed-off-by: Lukas Schaefer <lukas@lschaefer.xyz>
2025-06-07 14:04:38 -04:00

135 lines
4.5 KiB
JavaScript

import db from "../../../Modules/database";
import { getServerSession } from "next-auth";
import { authOptions } from "#/pages/api/auth/[...nextauth]";
import { hash } from "bcrypt";
// Used to change a users username
export default async function handler(req, res) {
const session = await getServerSession(req, res, authOptions);
const id = session?.user?.id;
switch (req.method) {
case "POST":
if (!id) {
res.status(401).end("Not logged in");
} else if (req.body.password !== undefined) {
// Updates the password if one is given.
const password = req.body.password;
await db
.updateTable("users")
.set({
password:
password === ""
? ""
: await hash(password, parseInt(process.env.BCRYPT_ROUNDS)),
})
.where("id", "=", id)
.execute();
if (password === "") {
res.status(200).end("Disabled password auth");
console.log(`User ${id} disabled password auth`);
} else {
res.status(200).end("Changed password");
console.log(`User ${id} changed password`);
}
} else if (
req.body.provider === "google" ||
req.body.provider === "github"
) {
// Used to update the username
const email = String(req.body.email);
// Disconnects the email
if (email === "") {
await db
.updateTable("users")
.set({
[req.body.provider]: "",
})
.where("id", "=", id)
.execute();
console.log(`User ${id} disconnected from ${req.body.provider}`);
res.status(200).end(`Disconnected from {provider}`);
} else {
await db
.updateTable("users")
.set({ [req.body.provider]: email })
.where("id", "=", id)
.execute();
console.log(`User ${id} connected to ${req.body.provider}`);
res.status(200).end(`Connected to {provider}`);
}
// Used to update the league favorite
} else if (req.body.favorite) {
// Checks if a possible favorite is given otherwise favorites are cleared
if (parseInt(req.body.favorite) > 0) {
await db
.updateTable("users")
.set({ favoriteLeague: parseInt(req.body.favorite) })
.where("id", "=", id)
.execute();
} else {
await db
.updateTable("users")
.set({ favoriteLeague: null })
.where("id", "=", id)
.execute();
}
res.status(200).end("Updated favorite");
} else if (req.body.theme) {
await db
.updateTable("users")
.set({ theme: req.body.theme })
.where("id", "=", id)
.execute();
res.status(200).end("Updated theme");
} else if (req.body.locale) {
await db
.updateTable("users")
.set({ locale: req.body.locale })
.where("id", "=", id)
.execute();
res.status(200).end("Updated locale");
} else if (
req.body.username === undefined ||
String(req.body.username) === ""
) {
// Checks if a username was given for this change
res.status(500).end("No username given");
} else {
await db
.updateTable("users")
.set({ username: req.body.username })
.where("id", "=", id)
.execute();
res.status(200).end("Changed username");
console.log(`User ${id} changed username to ${req.body.username}`);
}
break;
// Used to delete the user
case "DELETE":
if (!id) {
res.status(401).end("Not logged in");
// Makes sure the user passed the correct id
} else if (req.body.user === id) {
// Checks if the user is in any leagues
const anyLeagues =
(await db
.selectFrom("leagueUsers")
.selectAll()
.where("user", "=", id)
.executeTakeFirst()) !== undefined;
if (anyLeagues) {
res.status(401).end("You can not be in any leagues");
} else {
console.log(`User ${id} was deleted`);
await db.deleteFrom("users").where("id", "=", id).execute();
res.status(200).end("Deleted user successfully");
}
} else {
res.status(400).end("Please pass the user id under user");
}
break;
default:
res.status(405).end(`Method ${req.method} Not Allowed`);
break;
}
}