From dbe54c88aeef370abeb5b75da1920a54995990d7 Mon Sep 17 00:00:00 2001 From: Benny Nazimov <66024037+benny-n@users.noreply.github.com> Date: Mon, 30 Jan 2023 01:46:50 +0200 Subject: [PATCH] Fix course tags update bug (#187) * Change argument order for `db.get_filtered` * Update course tags from actually tagged courses * Get student's courses instead of tagged courses --- packages/server/src/api/students.rs | 28 +++++++++++++++++++++------- packages/server/src/db/services.rs | 2 +- packages/server/src/db/tests.rs | 6 +++--- 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/packages/server/src/api/students.rs b/packages/server/src/api/students.rs index 62074e5a..4b31b047 100644 --- a/packages/server/src/api/students.rs +++ b/packages/server/src/api/students.rs @@ -14,7 +14,7 @@ use crate::{ middleware::auth::Sub, resources::{ catalog::{Catalog, DisplayCatalog}, - course::{self, Course}, + course::{self, Course, CourseId}, user::{User, UserDetails, UserSettings}, }, }; @@ -93,13 +93,13 @@ pub async fn get_courses_by_filter( match (params.get("name"), params.get("number")) { (Some(name), None) => { let courses = db - .get_filtered::(name, FilterType::Regex, "name") + .get_filtered::(FilterType::Regex, "name", name) .await?; Ok(HttpResponse::Ok().json(courses)) } (None, Some(number)) => { let courses = db - .get_filtered::(number, FilterType::Regex, "_id") + .get_filtered::(FilterType::Regex, "_id", number) .await?; Ok(HttpResponse::Ok().json(courses)) } @@ -137,8 +137,22 @@ pub async fn compute_degree_status(mut user: User, db: Data) -> Result(catalog.get_all_course_ids(), FilterType::In, "_id") + let courses = db + .get_filtered::( + FilterType::In, + "_id", + catalog + .get_all_course_ids() + .into_iter() + .chain( + user.details + .degree_status + .course_statuses + .iter() + .map(|cs| cs.course.id.clone()), + ) + .collect::>(), + ) .await?; // Fill tags for all student courses @@ -147,7 +161,7 @@ pub async fn compute_degree_status(mut user: User, db: Data) -> Result) -> Result( &self, - filter: impl Into, filter_type: FilterType, field_to_filter: impl AsRef, + filter: impl Into, ) -> Result, AppError> where T: CollectionName + DeserializeOwned + Send + Sync + Unpin, diff --git a/packages/server/src/db/tests.rs b/packages/server/src/db/tests.rs index 80c4364c..387c1769 100644 --- a/packages/server/src/db/tests.rs +++ b/packages/server/src/db/tests.rs @@ -63,7 +63,7 @@ pub async fn test_get_courses_by_filters() { let db = Db::new().await; let courses = db - .get_filtered::("חשבון אינפיניטסימלי 1מ'", FilterType::Regex, "name") + .get_filtered::(FilterType::Regex, "name", "חשבון אינפיניטסימלי 1מ'") .await .expect("Failed to get courses by name"); @@ -72,7 +72,7 @@ pub async fn test_get_courses_by_filters() { assert_eq!(courses[0].id, "104031"); let courses = db - .get_filtered::("104031", FilterType::Regex, "_id") + .get_filtered::(FilterType::Regex, "_id", "104031") .await .expect("Failed to get courses by number"); @@ -81,7 +81,7 @@ pub async fn test_get_courses_by_filters() { assert_eq!(courses[0].id, "104031"); let courses = db - .get_filtered::(vec!["104031", "104166"], FilterType::In, "_id") + .get_filtered::(FilterType::In, "_id", vec!["104031", "104166"]) .await .expect("Failed to get courses by number");