diff --git a/pages/xtrends.tsx b/pages/xtrends.tsx new file mode 100644 index 000000000..d8bba21bf --- /dev/null +++ b/pages/xtrends.tsx @@ -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 = ({ trends }) => { + console.log({ trends }); + return <>asd; +}; + +export const getStaticProps: GetStaticProps = async () => { + const trends = await getXTrends(); + + return { props: { trends } }; +}; + +export default XTrendsPage; diff --git a/prisma/queries/getXTrends.ts b/prisma/queries/getXTrends.ts new file mode 100644 index 000000000..6d115a45d --- /dev/null +++ b/prisma/queries/getXTrends.ts @@ -0,0 +1,51 @@ +import { Prisma } from "@prisma/client"; +import prisma from "prisma/client"; + +export type GetXTrendsData = Prisma.PromiseReturnType; + +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; +};