fantasy-manager/pages/api/analytics.ts
Lukas Schaefer cfa460c6b0
forgot to await db query for analytics
Signed-off-by: Lukas Schaefer <lukas@lschaefer.xyz>
2025-06-26 14:09:43 -04:00

103 lines
2.8 KiB
TypeScript

import { NextApiRequest, NextApiResponse } from "next";
import db from "../../Modules/database";
import { detailedAnalytics } from "#types/database";
import { compareSemanticVersions } from "../../Modules/semantic";
export default async function handler(
req: NextApiRequest,
res: NextApiResponse,
) {
if (req.method == "POST") {
// Collects the data from the request
let {
active = 0,
total = 0,
leagueActive = "{}",
leagueTotal = "{}",
}: detailedAnalytics = req.body;
const {
serverID = "fake",
version = "0.0.0",
themeActive = "{}",
themeTotal = "{}",
localeActive = "{}",
localeTotal = "{}",
}: detailedAnalytics = req.body;
// Makes sure that the JSON is valid
try {
JSON.parse(leagueActive);
JSON.parse(leagueTotal);
JSON.parse(themeActive);
JSON.parse(themeTotal);
JSON.parse(localeActive);
JSON.parse(localeTotal);
} catch {
res.status(400).send("Invalid JSON");
return;
}
const day = Math.floor(Date.now() / 1000 / 86400);
// Checks if the analytics have to be translated from the old version used before 1.11 to the new version.
if (compareSemanticVersions("1.11.0", version) === -1) {
if (req.body?.users) {
total = req.body.users;
}
if (req.body?.activeUsers) {
active = req.body.activeUsers;
}
const tempLeagueActive: { [Key: string]: number } = {};
if (req.body?.BundesligaActive) {
tempLeagueActive.Bundesliga = req.body.BundesligaActive;
}
if (req.body?.EPLActive) {
tempLeagueActive.EPL = req.body.EPLActive;
}
if (req.body?.WorldCup2022Active) {
tempLeagueActive.WorldCup2022 = req.body.WorldCup2022Active;
}
leagueActive = JSON.stringify(tempLeagueActive);
const tempLeagueTotal: { [Key: string]: number } = {};
if (req.body?.Bundesliga) {
tempLeagueTotal.Bundesliga = req.body.Bundesliga;
}
if (req.body?.EPL) {
tempLeagueTotal.EPL = req.body.EPL;
}
if (req.body?.WorldCup2022) {
tempLeagueTotal.WorldCup2022 = req.body.WorldCup2022;
}
leagueTotal = JSON.stringify(tempLeagueTotal);
}
await db
.insertInto("detailedAnalytics")
.values({
serverID,
day,
version,
active,
total,
leagueActive,
leagueTotal,
themeActive,
themeTotal,
localeActive,
localeTotal,
})
.onConflict((oc) =>
oc.doUpdateSet({
version,
active,
total,
leagueActive,
leagueTotal,
themeActive,
themeTotal,
localeActive,
localeTotal,
}),
)
.execute();
res.status(200).end();
} else {
res.status(400).end("Method does not exist");
}
}