fantasy-manager/pages/[league]/[user]/fantasy/[matchday].js
Lukas Schaefer d3a5fe88f9
switch to kysely (#863)
Signed-off-by: Lukas Schaefer <lukas@lschaefer.xyz>
2025-05-09 19:12:32 -04:00

89 lines
2.9 KiB
JavaScript

import db from "../../../../Modules/database";
import redirect from "../../../../Modules/league";
import HistoricalView from "./index.js";
import { sql } from "kysely";
export default function Home(props) {
return <HistoricalView {...props} />;
}
export async function getServerSideProps(ctx) {
const user = ctx.params.user;
const league = ctx.params.league;
const matchday = ctx.params.matchday;
// Checks if the matchday exists
const timeData = await db
.selectFrom("points")
.selectAll()
.where("matchday", "=", matchday)
.where("leagueID", "=", parseInt(league))
.execute();
if (timeData.length === 0) {
return {
notFound: true,
};
}
// Calculates the timestamp for this matchday
const time = timeData[0].time;
const [transfers, username, latestMatchday, money] = await Promise.all([
// Gets all transfers at the moment from the user
sql`SELECT * FROM historicalTransfers WHERE leagueID=${league} AND matchday=${matchday} AND (buyer=${user} OR seller=${user})`
.execute(db)
.then((e) => e.rows),
// Gets the username of the user
sql`SELECT username FROM users WHERE id=${user}`
.execute(db)
.then((e) => e.rows)
.then((e) => (e.length > 0 ? e[0].username : "")),
// Gets the latest matchday in that league
sql`SELECT matchday FROM points WHERE leagueID=${league} and user=${user} ORDER BY matchday DESC`
.execute(db)
.then((e) => e.rows)
.then((res) => (res.length > 0 ? res[0].matchday : 0)),
// Gets the money
sql`SELECT money FROM points WHERE leagueID=${league} and user=${user} and matchday=${matchday}`
.execute(db)
.then((e) => e.rows)
.then((res) => (res.length > 0 ? res[0].money : 0)),
]);
// Checks if this matchday was finished
const historicalSquadExists = !!time;
// Gets the squad of the user on that matchday
const squad = historicalSquadExists
? await sql`SELECT * FROM historicalSquad WHERE leagueID=${league} AND user=${user} AND matchday=${matchday}`
.execute(db)
.then((e) => e.rows)
: await sql`SELECT * FROM squad WHERE leagueID=${league} AND user=${user}`
.execute(db)
.then((e) => e.rows);
// Calculates the value of the squad
const values = await Promise.all(
squad.map((e) =>
sql`SELECT value FROM players WHERE uid=${e.playeruid} AND league=(SELECT league FROM leagueSettings WHERE leagueID=${league})`
.execute(db)
.then((e) => e.rows)
.then((e) => (e.length > 0 ? e[0].value : 0)),
),
);
let value = money;
values.forEach((e) => {
value += e;
});
// Checks if the user exists
if (username === "") {
return {
notFound: true,
};
}
return await redirect(ctx, {
user,
username,
squad,
transfers,
league,
latestMatchday,
currentMatchday: matchday,
time: historicalSquadExists ? time : null,
money,
value,
});
}