Skip to content

Commit

Permalink
feat: Prevent clients from accessing programs they are not enrolled in (
Browse files Browse the repository at this point in the history
  • Loading branch information
RudraPatel2003 authored Jan 27, 2025
1 parent 98a8f24 commit 50757c6
Showing 6 changed files with 274 additions and 0 deletions.
62 changes: 62 additions & 0 deletions src/app/dashboard/client/diabetes-prevention/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
import { Box, Typography } from "@mui/material";
import { redirect } from "next/navigation";

import { getUserByEmail } from "@/server/api/users/queries";
import getUserSession from "@/utils/getUserSession";
import isUserEnrolledInProgram from "@/utils/isEnrolledInProgram";

export default async function DiabetesPreventionPage() {
const session = await getUserSession();

if (!session) {
redirect("/");
}

const [user, error] = await getUserByEmail(session.user.email, {
populateProgramEnrollments: true,
});

if (error !== null) {
return (
<Box
sx={{
height: "100vh",
width: "100vw",
display: "flex",
justifyContent: "center",
alignItems: "center",
}}
>
<Typography>
There was an error fetching your diabetes prevention enrollment.
</Typography>
</Box>
);
}
if (user.role !== "client") {
redirect("/dashboard");
}

const enrolledInDiabetesPreventionProgram = isUserEnrolledInProgram(
user.programEnrollments,
"Diabetes Prevention",
);

if (!enrolledInDiabetesPreventionProgram) {
redirect("/dashboard/client");
}

return (
<Box
sx={{
height: "100vh",
width: "100vw",
display: "flex",
justifyContent: "center",
alignItems: "center",
}}
>
<Typography>Diabetes Prevention Page</Typography>
</Box>
);
}
63 changes: 63 additions & 0 deletions src/app/dashboard/client/get-preventative-screenings/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
import { Box, Typography } from "@mui/material";
import { redirect } from "next/navigation";

import { getUserByEmail } from "@/server/api/users/queries";
import getUserSession from "@/utils/getUserSession";
import isUserEnrolledInProgram from "@/utils/isEnrolledInProgram";

export default async function GetPreventativeScreeningsPage() {
const session = await getUserSession();

if (!session) {
redirect("/");
}

const [user, error] = await getUserByEmail(session.user.email, {
populateProgramEnrollments: true,
});

if (error !== null) {
return (
<Box
sx={{
height: "100vh",
width: "100vw",
display: "flex",
justifyContent: "center",
alignItems: "center",
}}
>
<Typography>
There was an error fetching your get preventative screenings
enrollment.
</Typography>
</Box>
);
}
if (user.role !== "client") {
redirect("/dashboard");
}

const enrolledInGetPreventativeScreeningsProgram = isUserEnrolledInProgram(
user.programEnrollments,
"GPS (Get Preventative Screenings)",
);

if (!enrolledInGetPreventativeScreeningsProgram) {
redirect("/dashboard/client");
}

return (
<Box
sx={{
height: "100vh",
width: "100vw",
display: "flex",
justifyContent: "center",
alignItems: "center",
}}
>
<Typography>Get Preventative Screenings Page</Typography>
</Box>
);
}
15 changes: 15 additions & 0 deletions src/app/dashboard/client/healthy-habits/page.tsx
Original file line number Diff line number Diff line change
@@ -5,6 +5,7 @@ import HealthyHabits from "@/components/ClientDashboard/HealthyHabits";
import { getUserByEmail } from "@/server/api/users/queries";
import { ClientUser } from "@/types";
import getUserSession from "@/utils/getUserSession";
import isUserEnrolledInProgram from "@/utils/isEnrolledInProgram";

export default async function HealthyHabitsPage() {
const session = await getUserSession();
@@ -15,6 +16,7 @@ export default async function HealthyHabitsPage() {

const [user, error] = await getUserByEmail(session.user.email, {
populateHealthyHabitsTrackingForms: true,
populateProgramEnrollments: true,
});

if (error !== null) {
@@ -35,6 +37,19 @@ export default async function HealthyHabitsPage() {
);
}

if (user.role !== "client") {
redirect("/dashboard");
}

const enrolledInHealthyHabitsProgram = isUserEnrolledInProgram(
user.programEnrollments,
"Healthy Habits For The Long Haul",
);

if (!enrolledInHealthyHabitsProgram) {
redirect("/dashboard/client");
}

return (
<Box
sx={{
61 changes: 61 additions & 0 deletions src/app/dashboard/client/rigs-without-cigs/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import { Box, Typography } from "@mui/material";
import { redirect } from "next/navigation";

import { getUserByEmail } from "@/server/api/users/queries";
import getUserSession from "@/utils/getUserSession";
import isUserEnrolledInProgram from "@/utils/isEnrolledInProgram";

export default async function RigsWithoutCigsPage() {
const session = await getUserSession();

if (!session) {
redirect("/");
}

const [user, error] = await getUserByEmail(session.user.email, {
populateProgramEnrollments: true,
});

if (error !== null) {
return (
<Box
sx={{
height: "100vh",
width: "100vw",
display: "flex",
justifyContent: "center",
alignItems: "center",
}}
>
<Typography>
There was an error fetching your rigs without cigs enrollment.
</Typography>
</Box>
);
}
if (user.role !== "client") {
redirect("/dashboard");
}

const enrolledInRigsWithoutCigsProgram = isUserEnrolledInProgram(
user.programEnrollments,
"Rigs Without Cigs",
);

if (!enrolledInRigsWithoutCigsProgram) {
redirect("/dashboard/client");
}
return (
<Box
sx={{
height: "100vh",
width: "100vw",
display: "flex",
justifyContent: "center",
alignItems: "center",
}}
>
<Typography>Rigs Without Cigs Page</Typography>
</Box>
);
}
63 changes: 63 additions & 0 deletions src/app/dashboard/client/vaccine-voucher/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
import { Box, Typography } from "@mui/material";
import { redirect } from "next/navigation";

import { getUserByEmail } from "@/server/api/users/queries";
import getUserSession from "@/utils/getUserSession";
import isUserEnrolledInProgram from "@/utils/isEnrolledInProgram";

export default async function VaccineVoucherPage() {
const session = await getUserSession();

if (!session) {
redirect("/");
}

const [user, error] = await getUserByEmail(session.user.email, {
populateProgramEnrollments: true,
});

if (error !== null) {
return (
<Box
sx={{
height: "100vh",
width: "100vw",
display: "flex",
justifyContent: "center",
alignItems: "center",
}}
>
<Typography>
There was an error fetching your vaccine voucher enrollment.
</Typography>
</Box>
);
}

if (user.role !== "client") {
redirect("/dashboard");
}

const enrolledInVaccineVoucherProgram = isUserEnrolledInProgram(
user.programEnrollments,
"Vaccine Voucher",
);

if (!enrolledInVaccineVoucherProgram) {
redirect("/dashboard/client");
}

return (
<Box
sx={{
height: "100vh",
width: "100vw",
display: "flex",
justifyContent: "center",
alignItems: "center",
}}
>
<Typography>Vaccine Voucher Page</Typography>
</Box>
);
}
10 changes: 10 additions & 0 deletions src/utils/isEnrolledInProgram.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { Program, ProgramEnrollment } from "@/types";

export default function isEnrolledInProgram(
programEnrollments: ProgramEnrollment[],
program: Program,
) {
return programEnrollments
.filter((programEnrollment) => programEnrollment.status === "accepted")
.some((programEnrollment) => programEnrollment.program === program);
}

0 comments on commit 50757c6

Please sign in to comment.