Skip to content
Draft
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
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,9 @@ generated-types/
# others
*.cert
*.key

apps/frontend/tsconfig.node.tsbuildinfo
apps/frontend/tsconfig.tsbuildinfo
apps/frontend/vite.config.d.ts
apps/frontend/vite.config.js
prod-backup.gz
8 changes: 6 additions & 2 deletions apps/backend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@
"@repo/common": "*",
"@repo/shared": "*",
"@repo/sis-api": "*",
"@types/node-cron": "^3.0.11",
"@types/nodemailer": "^7.0.2",
"compression": "^1.8.1",
"connect-redis": "^9.0.0",
"cors": "^2.8.5",
Expand All @@ -54,8 +56,10 @@
"helmet": "^8.1.0",
"keyv": "^5.5.3",
"lodash": "^4.17.21",
"mongodb": "^6.20.0",
"mongoose": "^8.19.1",
"mongodb": "^6.18.0",
"mongoose": "^8.17.0",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a reason these are being downgraded?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This was probably an accident from merging in gql, we should just undo these changes

"node-cron": "^4.2.1",
"nodemailer": "^7.0.7",
"papaparse": "^5.5.3",
"passport": "^0.7.0",
"passport-google-oauth20": "^2.0.0",
Expand Down
30 changes: 30 additions & 0 deletions apps/backend/src/modules/user/controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -79,3 +79,33 @@ export const getBookmarkedClasses = async (

return classes.map(formatClass);
};

export const getMonitoredClasses = async (
monitoredClasses:
| UserModule.MonitoredClassInput[]
| UserModule.MonitoredClass[]
) => {
const classes = [];

for (const monitoredClass of monitoredClasses) {
const classData = monitoredClass.class;

const _class = await ClassModel.findOne({
year: classData.year,
semester: classData.semester,
sessionId: classData.sessionId ? classData.sessionId : "1",
subject: classData.subject,
courseNumber: classData.courseNumber,
number: classData.number,
}).lean();

if (!_class) continue;

classes.push({
class: formatClass(_class),
thresholds: monitoredClass.thresholds,
});
}

return classes;
};
3 changes: 3 additions & 0 deletions apps/backend/src/modules/user/formatter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { UserModule } from "./generated-types/module-types";
interface UserRelationships {
bookmarkedCourses: UserModule.BookmarkedCourseInput[];
bookmarkedClasses: UserModule.BookmarkedClassInput[];
monitoredClasses: UserModule.MonitoredClassInput[];
}

export type IntermediateUser = Omit<UserModule.User, keyof UserRelationships> &
Expand All @@ -21,5 +22,7 @@ export const formatUser = (user: UserType) => {
bookmarkedClasses: user.bookmarkedClasses,
majors: user.majors ? user.majors : [],
minors: user.minors ? user.minors : [],
monitoredClasses: user.monitoredClasses,
notificationsOn: user.notificationsOn,
} as IntermediateUser;
};
16 changes: 16 additions & 0 deletions apps/backend/src/modules/user/resolver.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import {
getBookmarkedClasses,
getBookmarkedCourses,
getMonitoredClasses,
getUser,
updateUser,
} from "./controller";
Expand Down Expand Up @@ -40,6 +41,21 @@ const resolvers: UserModule.Resolvers = {

return courses as unknown as UserModule.Course[];
},

monitoredClasses: async (parent: UserModule.User | IntermediateUser) => {
if (
parent.monitoredClasses[0] &&
(parent.monitoredClasses[0] as UserModule.MonitoredClass).class
) {
return parent.monitoredClasses as UserModule.MonitoredClass[];
}

const monitoredClasses = await getMonitoredClasses(
parent.monitoredClasses
);

return monitoredClasses as unknown as UserModule.MonitoredClass[];
},
},

Mutation: {
Expand Down
37 changes: 37 additions & 0 deletions apps/backend/src/modules/user/typedefs/user.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
import { gql } from "graphql-tag";

const typedef = gql`
type MonitoredClass {
class: Class!
thresholds: [Float]!
}

type User @cacheControl(scope: PRIVATE) {
_id: ID!
email: String!
Expand All @@ -11,6 +16,8 @@ const typedef = gql`
bookmarkedClasses: [Class!]!
majors: [String!]!
minors: [String!]!
monitoredClasses: [MonitoredClass!]!
notificationsOn: Boolean!
}

type Query {
Expand All @@ -31,11 +38,41 @@ const typedef = gql`
number: ClassNumber!
}

input MonitoredClassRefInput {
year: Int!
semester: Semester!
sessionId: SessionIdentifier
subject: String!
courseNumber: CourseNumber!
number: ClassNumber!
}

input MonitoredClassInput {
class: MonitoredClassRefInput!
thresholds: [Float!]!
}

input MonitoredClassRefInput {
year: Int!
semester: Semester!
sessionId: SessionIdentifier
subject: String!
courseNumber: CourseNumber!
number: ClassNumber!
}

input MonitoredClassInput {
class: MonitoredClassRefInput!
thresholds: [Float!]!
}

input UpdateUserInput {
bookmarkedClasses: [BookmarkedClassInput!]
bookmarkedCourses: [BookmarkedCourseInput!]
majors: [String!]
minors: [String!]
monitoredClasses: [MonitoredClassInput!]
notificationsOn: Boolean!
}

type Mutation {
Expand Down
3 changes: 3 additions & 0 deletions apps/backend/src/services/email.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
// Connects to an SMTP server or email provider.
// Formats and sends the email to a user.
// Handles retries or errors if sending fails.
1 change: 1 addition & 0 deletions apps/datapuller/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
"@repo/sis-api": "*",
"dotenv": "^17.2.3",
"luxon": "^3.7.2",
"@sendgrid/mail": "^8.1.4",
"papaparse": "^5.5.3",
"tslog": "^4.10.2"
}
Expand Down
2 changes: 2 additions & 0 deletions apps/datapuller/src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { parseArgs } from "node:util";
import classesPuller from "./pullers/classes";
import coursesPuller from "./pullers/courses";
import enrollmentHistoriesPuller from "./pullers/enrollment";
import enrollmentChecksPuller from "./pullers/enrollment-checks";
import gradeDistributionsPuller from "./pullers/grade-distributions";
import sectionsPuller from "./pullers/sections";
import termsPuller from "./pullers/terms";
Expand All @@ -26,6 +27,7 @@ const pullerMap: {
"grades-recent": gradeDistributionsPuller.recentPastTerms,
"grades-last-five-years": gradeDistributionsPuller.lastFiveYearsTerms,
enrollments: enrollmentHistoriesPuller.updateEnrollmentHistories,
"enrollment-checks": enrollmentChecksPuller.checkEnrollmentThresholds,
"terms-all": termsPuller.allTerms,
"terms-nearby": termsPuller.nearbyTerms,
} as const;
Expand Down
Loading