Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
141 changes: 73 additions & 68 deletions server/mongodb/actions/AggregatedAnalytics.ts
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,6 @@ export const getAggregatedAnalytics = async (

let counter = 0;
const lenOfMetrics = analyticsRecord.weeklyMetrics.length;
const groupSize = Math.floor(lenOfMetrics / 12);

// reversing the list
const reversedWeeklyMetrics = analyticsRecord.weeklyMetrics.reverse();
Expand All @@ -106,10 +105,6 @@ export const getAggregatedAnalytics = async (
reversedWeeklyMetrics.length === 0
? lastMonday
: new Date(reversedWeeklyMetrics[0].date);
let lastDateMax =
reversedWeeklyMetrics.length === 0
? lastMonday
: new Date(reversedWeeklyMetrics[0].date);

const dbDateVars = new Set<string>();

Expand All @@ -121,13 +116,14 @@ export const getAggregatedAnalytics = async (
dateVar = formatDateByRangeEnum(lastDate, range);
}

// group into groups of 12 and put everything into the last object once it goes over
if (range === DateRangeEnum.MAX) {
if (counter % groupSize === 0 && counter < groupSize * 12) {
lastDateMax = item.date;
if (lenOfMetrics > 12) {
dateVar = formatDateByRangeEnum(item.date, range, true);
} else {
dateVar = formatDateByRangeEnum(item.date, range);
}
dateVar = formatDateByRangeEnum(lastDateMax, range);
}

counter += 1;
lastDate = item.date;

Expand Down Expand Up @@ -231,6 +227,7 @@ export const getAggregatedAnalytics = async (
"questionsCompleted",
"questionsCorrect",
]);

Object.values(groupSumDict).forEach((monthDict) => {
Object.values(monthDict).forEach((monthTypeDict) => {
Object.keys(monthTypeDict).forEach((property) => {
Expand Down Expand Up @@ -260,70 +257,78 @@ export const getAggregatedAnalytics = async (
const allDateVars = Array.from(dbDateVars).reverse();

// PADDING
if (range !== DateRangeEnum.MAX) {
let len = Object.keys(groupSumDict).length;

let totalWeeks = numOfWeeks;
if (range === DateRangeEnum.HALF) {
totalWeeks = 13;
} else if (range === DateRangeEnum.YEAR) {
totalWeeks = 12;
}
if (
userIDs.length === 1 &&
(analyticsRecords[0].weeklyMetrics as []).length === 0
) {
let len = Object.keys(groupSumDict).length;

let totalWeeks = numOfWeeks;
if (range === DateRangeEnum.HALF) {
totalWeeks = 13;
} else if (range === DateRangeEnum.YEAR) {
totalWeeks = 12;
} else if (range === DateRangeEnum.MAX) {
if (lenOfMetrics === 1) {
totalWeeks = 6;
} else {
totalWeeks = 0;
}
}

while (len < totalWeeks) {
if (range === DateRangeEnum.RECENT || range === DateRangeEnum.QUARTER) {
paddingDate.setDate(paddingDate.getDate() - 7);
} else if (range === DateRangeEnum.HALF) {
paddingDate.setDate(paddingDate.getDate() - 14);
} else if (range === DateRangeEnum.YEAR) {
paddingDate.setMonth(paddingDate.getMonth() - 1);
}

const tempDateString = formatDateByRangeEnum(paddingDate, range);

allDateVars.push(tempDateString);
groupSumDict[tempDateString] = Object.fromEntries(
Object.entries({
overall: {
streakLength: 0,
streakHistory: 0,
},
math: {
avgAccuracy: 0,
avgDifficultyScore: 0,
avgQuestionsCompleted: 0,
avgTimePerQuestion: 0,
},
reading: {
avgSessionsCompleted: 0,
avgSessionsAttempted: 0,
avgWordsPerMin: 0,
avgPassagesRead: 0,
avgTimePerPassage: 0,
},
writing: {
avgSessionsCompleted: 0,
avgSessionsAttempted: 0,
avgPromptsAnswered: 0,
avgTimePerQuestion: 0,
},
trivia: {
avgAccuracy: 0,
avgQuestionsCompleted: 0,
avgTimePerQuestion: 0,
},
}).filter(([k]) => sections.includes(k as AnalyticsSectionEnum)),
);
if (
userIDs.length === 1 &&
(analyticsRecords[0].weeklyMetrics as []).length === 0
) {
totalWeeks = 0;
}

len += 1;
while (len < totalWeeks) {
if (range === DateRangeEnum.RECENT || range === DateRangeEnum.QUARTER) {
paddingDate.setDate(paddingDate.getDate() - 7);
} else if (range === DateRangeEnum.HALF) {
paddingDate.setDate(paddingDate.getDate() - 14);
} else if (range === DateRangeEnum.YEAR) {
paddingDate.setMonth(paddingDate.getMonth() - 1);
} else if (range === DateRangeEnum.MAX) {
paddingDate.setDate(paddingDate.getDate() - 7);
}

const tempDateString = formatDateByRangeEnum(paddingDate, range);

allDateVars.push(tempDateString);
groupSumDict[tempDateString] = Object.fromEntries(
Object.entries({
overall: {
streakLength: 0,
streakHistory: 0,
},
math: {
avgAccuracy: 0,
avgDifficultyScore: 0,
avgQuestionsCompleted: 0,
avgTimePerQuestion: 0,
},
reading: {
avgSessionsCompleted: 0,
avgSessionsAttempted: 0,
avgWordsPerMin: 0,
avgPassagesRead: 0,
avgTimePerPassage: 0,
},
writing: {
avgSessionsCompleted: 0,
avgSessionsAttempted: 0,
avgPromptsAnswered: 0,
avgTimePerQuestion: 0,
},
trivia: {
avgAccuracy: 0,
avgQuestionsCompleted: 0,
avgTimePerQuestion: 0,
},
}).filter(([k]) => sections.includes(k as AnalyticsSectionEnum)),
);

len += 1;
}
// }

const result: Result = {};
sections.forEach((type) => {
Expand Down Expand Up @@ -416,7 +421,7 @@ export const getAggregatedAnalytics = async (
};
const obj = result.overall;
if (obj) {
obj.streakHistory.push(dr);
obj.streakHistory.unshift(dr);
}
}

Expand Down
17 changes: 13 additions & 4 deletions server/utils/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,12 @@ export function getCurrentSunday() {
return new Date(date.toDateString());
}

export function formatDateByRangeEnum(date: Date, range: DateRangeEnum) {
export function formatDateByRangeEnum(
date: Date,
range: DateRangeEnum,
month?: boolean,
) {
const boolMonth = month || false;
const monthName = date.toLocaleString("default", {
timeZone: "UTC",
month: "short",
Expand All @@ -28,9 +33,13 @@ export function formatDateByRangeEnum(date: Date, range: DateRangeEnum) {
const year = String(date.getUTCFullYear());

if (
[DateRangeEnum.RECENT, DateRangeEnum.QUARTER, DateRangeEnum.HALF].includes(
range,
)
[
DateRangeEnum.RECENT,
DateRangeEnum.QUARTER,
DateRangeEnum.HALF,
DateRangeEnum.MAX,
].includes(range) &&
!boolMonth
) {
return `${monthName} ${day}`;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,4 +69,4 @@
position: absolute;
bottom: 20px;
right: 40px;
}
}
3 changes: 0 additions & 3 deletions src/app/api/patient/internal/seed/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,6 @@ import APIWrapper from "@server/utils/APIWrapper";
import User from "@server/mongodb/models/User";
import { IUser } from "@/common_utils/types";
import { createAnalyticsID } from "@server/mongodb/actions/Analytics";
import Analytics from "@server/mongodb/models/Analytics";
import { sampleUsers } from "@src/utils/patients";
import mongoose from "mongoose";

export const dynamic = "force-dynamic";

Expand Down
14 changes: 10 additions & 4 deletions src/components/Graphs/BarChart/BarChart.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -201,15 +201,21 @@ export default function BarChart({
.tickSizeOuter(0)
.tickSizeInner(0)
.tickPadding(15)
.tickFormat((d) => newData[d.valueOf()]?.interval?.split(" ")[0] ?? "");
.tickFormat((d) => {
const index = Math.round(Number(d));
return newData[index]?.interval?.split(" ")[0] ?? "";
});

const xAxisLabelBottom = d3
.axisBottom(x)
.ticks(newData.length)
.tickSizeOuter(0)
.tickSizeInner(0)
.tickPadding(15)
.tickFormat((d) => newData[d.valueOf()]?.interval?.split(" ")[1] ?? "");
.tickFormat((d) => {
const index = Math.round(Number(d));
return newData[index]?.interval?.split(" ")[1] ?? "";
});

const yAxisLabel = d3
.axisLeft(y)
Expand Down Expand Up @@ -336,8 +342,8 @@ export default function BarChart({
if (d.value === 0) {
// Render a semi-circle (half-circle) if the value is 0
return `
M ${x0},${y0}
A ${radius},${radius} 0 1 1 ${x0 + barWidth},${y0}
M ${x0},${height - marginBottom}
A ${radius},${radius} 0 1 1 ${x0 + barWidth},${height - marginBottom}
`;
}
// Render a rectangle with a rounded top if the value is non-zero
Expand Down
5 changes: 4 additions & 1 deletion src/components/Graphs/PopupModal/PopupModal.module.css
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@
z-index: 50;
background-color: #cdcdcd;
width: 300px;
border-radius: 10px;
border-radius: 12px;
padding: 10px;
border: "0.8px solid black";
overflow: visible;
white-space: normal;
word-wrap: break-word;
}
Loading