fantasy-manager/Modules/delete.ts
Lukas Schaefer d3a5fe88f9
switch to kysely (#863)
Signed-off-by: Lukas Schaefer <lukas@lschaefer.xyz>
2025-05-09 19:12:32 -04:00

82 lines
2.4 KiB
TypeScript

import db from "./database";
/**
+ * Deletes a user from a league and performs related cleanup tasks.
+ *
+ * @param {number} league - The ID of the league from which the user will be removed.
+ * @param {number} user - The ID of the user to be removed from the league.
+ * @return {Promise<void>} A promise that resolves once the user has been removed
+ */
export async function leaveLeague(league: number, user: number): Promise<void> {
await db
.deleteFrom("leagueUsers")
.where("leagueID", "=", league)
.where("user", "=", user)
.execute();
await db
.deleteFrom("points")
.where("leagueID", "=", league)
.where("user", "=", user)
.execute();
await db
.deleteFrom("squad")
.where("leagueID", "=", league)
.where("user", "=", user)
.execute();
await db
.deleteFrom("historicalSquad")
.where("leagueID", "=", league)
.where("user", "=", user)
.execute();
await db
.deleteFrom("historicalTransfers")
.where("leagueID", "=", league)
.where((eb) =>
eb.or([
eb.and([eb("buyer", "=", user), eb("seller", "=", 0)]),
eb.and([eb("buyer", "=", 0), eb("seller", "=", user)]),
]),
)
.execute();
await db
.updateTable("transfers")
.set("seller", 0)
.where("leagueID", "=", league)
.where("seller", "=", user)
.execute();
await db
.updateTable("transfers")
.set("buyer", 0)
.where("leagueID", "=", league)
.where("buyer", "=", user)
.execute();
console.log(`User ${user} left league ${league}`);
// Checks if the league still has users
const isEmpty = await db
.selectFrom("leagueUsers")
.selectAll()
.where("leagueID", "=", league)
.execute()
.then((e) => e.length === 0);
if (isEmpty) {
await db.deleteFrom("invite").where("leagueID", "=", league).execute();
await db.deleteFrom("transfers").where("leagueID", "=", league).execute();
await db
.deleteFrom("leagueSettings")
.where("leagueID", "=", league)
.execute();
await db
.deleteFrom("historicalTransfers")
.where("leagueID", "=", league)
.execute();
await db
.deleteFrom("historicalSquad")
.where("leagueID", "=", league)
.execute();
await db
.deleteFrom("announcements")
.where("leagueID", "=", league)
.execute();
console.log(`League ${league} is now empty and is being deleted`);
}
}