x trends backend first ver

This commit is contained in:
Kalle (Sendou)
2020-12-10 18:00:48 +02:00
parent 70bbb05bf2
commit bb66525214
2 changed files with 118 additions and 0 deletions

67
pages/xtrends.tsx Normal file
View File

@@ -0,0 +1,67 @@
import { GetStaticProps } from "next";
import { getXTrends, GetXTrendsData } from "prisma/queries/getXTrends";
const tiers = [
{
label: "X",
criteria: 6,
color: "purple.700",
},
{
label: "S+",
criteria: 5,
color: "red.700",
},
{
label: "S",
criteria: 4,
color: "red.700",
},
{
label: "A+",
criteria: 3,
color: "orange.700",
},
{
label: "A",
criteria: 2,
color: "orange.700",
},
{
label: "B+",
criteria: 1.5,
color: "yellow.700",
},
{
label: "B",
criteria: 1,
color: "yellow.700",
},
{
label: "C+",
criteria: 0.5,
color: "green.700",
},
{
label: "C",
criteria: 0.002, //1 in 500
color: "green.700",
},
] as const;
interface Props {
trends: GetXTrendsData;
}
const XTrendsPage: React.FC<Props> = ({ trends }) => {
console.log({ trends });
return <>asd</>;
};
export const getStaticProps: GetStaticProps<Props> = async () => {
const trends = await getXTrends();
return { props: { trends } };
};
export default XTrendsPage;

View File

@@ -0,0 +1,51 @@
import { Prisma } from "@prisma/client";
import prisma from "prisma/client";
export type GetXTrendsData = Prisma.PromiseReturnType<typeof getXTrends>;
export const getXTrends = async () => {
const placements = await prisma.xRankPlacement.findMany({
select: { mode: true, month: true, year: true, weapon: true, xPower: true },
});
const result: {
[year: string]: {
[month: string]: {
[weapon: string]: {
SZ?: { xPowerAverage: number; count: number };
TC?: { xPowerAverage: number; count: number };
RM?: { xPowerAverage: number; count: number };
CB?: { xPowerAverage: number; count: number };
};
};
};
} = {};
placements.forEach((placement) => {
if (!result[placement.year]) result[placement.year] = {};
if (!result[placement.year][placement.month]) {
result[placement.year][placement.month] = {};
}
if (!result[placement.year][placement.month][placement.weapon]) {
result[placement.year][placement.month][placement.weapon] = {};
}
const weaponObj = result[placement.year][placement.month][placement.weapon][
placement.mode
] ?? { xPowerAverage: 0, count: 0 };
const previousAverage = weaponObj.xPowerAverage;
const previousCount = weaponObj.count;
weaponObj.xPowerAverage =
(previousAverage * previousCount + placement.xPower) /
(previousCount + 1);
weaponObj.count++;
result[placement.year][placement.month][placement.weapon][
placement.mode
] = weaponObj;
});
return result;
};