Skip to content
Open
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
24 changes: 12 additions & 12 deletions apps/backend/src/bootstrap/graphql/generated/persistedOperations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,12 @@ export const persistedOperations: Readonly<Record<string, PersistedOperation>> =
variableNames: ["id"],
sources: ["apps/ag-frontend/src/lib/api/schedules.ts"],
},
"0947346159f700418bcbf835c87d77ddcf9506783701f3b686c5289718d6e7c6": {
operationName: "UpdateUser",
document: "mutation UpdateUser($user:UpdateUserInput!){updateUser(user:$user){_id name email student notificationsOn majors minors monitoredClasses{notified class{title subject courseNumber number year semester __typename}__typename}__typename}}",
variableNames: ["user"],
sources: ["apps/frontend/src/lib/api/users.ts"],
},
"09dc33a0472806c01a473e16bce469e7060e09060c9185d312d83e16fdabe9a1": {
operationName: "UpdateTargetedMessage",
document: "mutation UpdateTargetedMessage($messageId:ID!$input:UpdateTargetedMessageInput!){updateTargetedMessage(messageId:$messageId input:$input){id title description link linkText visible persistent reappearing clickCount dismissCount currentVersion targetCourses{courseId subject courseNumber __typename}createdAt updatedAt __typename}}",
Expand Down Expand Up @@ -230,12 +236,6 @@ export const persistedOperations: Readonly<Record<string, PersistedOperation>> =
variableNames: ["subject","number","includeFormerNames"],
sources: ["apps/frontend/src/lib/api/courses.ts"],
},
"3179d1aecde57f2f023099dd2b1de9ed7c81cd0746da4ea81e948c430eb585f3": {
operationName: "UpdateUser",
document: "mutation UpdateUser($user:UpdateUserInput!){updateUser(user:$user){_id name email student notificationsOn monitoredClasses{notified class{title subject courseNumber number year semester __typename}__typename}__typename}}",
variableNames: ["user"],
sources: ["apps/frontend/src/lib/api/users.ts"],
},
"322753122a2b1228f6eb1df6b57b5629a41f94e05d771acb01ac32086d1b8511": {
operationName: "DeletePod",
document: "mutation DeletePod($podId:ID!){deletePod(podId:$podId)}",
Expand Down Expand Up @@ -374,12 +374,6 @@ export const persistedOperations: Readonly<Record<string, PersistedOperation>> =
variableNames: ["input"],
sources: ["apps/staff-frontend/src/lib/api/targeted-message.ts"],
},
"5b1db8b7fea7b401c4e3a7d268135a09027d85ce43a68f80b1194e2e0fc1b52f": {
operationName: "GetUser",
document: "query GetUser{user{_id email name student notificationsOn monitoredClasses{notified class{title subject courseNumber number year semester __typename}__typename}__typename}}",
variableNames: [],
sources: ["apps/frontend/src/lib/api/users.ts"],
},
"5d1675146672fd8912c17991d416c8bf8049f01feec299335ba1905ce5481c76": {
operationName: "UpdateCuratedClass",
document: "mutation UpdateCuratedClass($id:ID!$curatedClass:UpdateCuratedClassInput!){updateCuratedClass(id:$id curatedClass:$curatedClass){_id text image subject courseNumber number semester year sessionId publishedAt createdAt updatedAt class{number sessionId title unitsMax unitsMin finalExam gradingBasis primarySection{component online instructionMode attendanceRequired lecturesRecorded enrollment{latest{status enrolledCount maxEnroll waitlistedCount maxWaitlist __typename}__typename}meetings{days __typename}__typename}course{subject number title gradeDistribution{average __typename}academicCareer __typename}__typename}__typename}}",
Expand Down Expand Up @@ -584,6 +578,12 @@ export const persistedOperations: Readonly<Record<string, PersistedOperation>> =
variableNames: ["subject","courseNumber","semester","year","classNumber"],
sources: ["apps/ag-frontend/src/lib/api/ratings.ts","apps/frontend/src/lib/api/ratings.ts"],
},
"9acaa58b959c2b3d035f5bb7195240d25c724cd629bdf426e46c066d148705a8": {
operationName: "GetUser",
document: "query GetUser{user{_id email name student notificationsOn majors minors monitoredClasses{notified class{title subject courseNumber number year semester __typename}__typename}__typename}}",
variableNames: [],
sources: ["apps/frontend/src/lib/api/users.ts"],
},
"9d64fb0136d28325822a321e61969fbd9bf8387ec1e5a8df4c9416557c5c085f": {
operationName: "CreateNewPlan",
document: "mutation CreateNewPlan($colleges:[Colleges!]!$startYear:Int!$endYear:Int!$majors:[String!]!$minors:[String!]!){createNewPlan(colleges:$colleges startYear:$startYear endYear:$endYear majors:$majors minors:$minors){_id planTerms{_id name year term courses{courseID courseName courseTitle courseUnits pnp transfer labels{name color __typename}__typename}hidden status pinned __typename}majors minors colleges labels{name color __typename}__typename}}",
Expand Down
25 changes: 25 additions & 0 deletions apps/backend/src/modules/user/controller.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
import { GraphQLError } from "graphql";

import { VALID_MAJORS, VALID_MINORS } from "@repo/common/lib/degreePrograms";
import {
AggregatedMetricsModel,
CollectionModel,
Expand Down Expand Up @@ -25,6 +28,20 @@ export const getUser = async (context: RequestContext) => {
return formatUser(user);
};

const validateDegrees = (
values: readonly string[],
vocabulary: ReadonlySet<string>,
field: string
) => {
for (const value of values) {
if (!vocabulary.has(value)) {
throw new GraphQLError(`Invalid ${field}: "${value}"`, {
extensions: { code: "BAD_USER_INPUT" },
});
}
}
};

export const updateUser = async (
context: RequestContext,
user: UpdateUserInput
Expand All @@ -35,6 +52,14 @@ export const updateUser = async (
const existingUser = await UserModel.findById(userId);
if (!existingUser) throw new Error("Not found");

if (user.majors != null) {
validateDegrees(user.majors, VALID_MAJORS, "major");
}

if (user.minors != null) {
validateDegrees(user.minors, VALID_MINORS, "minor");
}

const { monitoredClasses, ...rest } = user;
const update: Record<string, unknown> = { ...rest };

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { useEffect, useState } from "react";

import { Xmark } from "iconoir-react";

import { DEGREE_PROGRAMS as DEGREES } from "@repo/common/lib/degreePrograms";
import { Button, Dialog, Flex, Select, Text } from "@repo/theme";

import MajorSearch from "@/components/MajorSearch";
Expand All @@ -12,7 +13,6 @@ import { Colleges, PlanInput } from "@/lib/generated/graphql";
import collegesData from "../Onboarding/AddColleges/colleges.json";
import { DegreeOption } from "../types";
import styles from "./EditPlanDialog.module.scss";
import DEGREES from "./degree-programs-types.json";

type CollegeOption = {
label: string;
Expand Down

This file was deleted.

Loading
Loading