From 3cca0608447c94dcdfcaa66efe0d5c476e8df518 Mon Sep 17 00:00:00 2001 From: Denys Konovalov Date: Tue, 2 Nov 2021 22:26:53 +0100 Subject: [PATCH] Added lessons endpoint (Unterricht) --- src/indiware_connector.rs | 51 +++++++++++++++++++++++++++++++++++++++ src/main.rs | 10 ++++++++ 2 files changed, 61 insertions(+) diff --git a/src/indiware_connector.rs b/src/indiware_connector.rs index e365420..7c3d3be 100644 --- a/src/indiware_connector.rs +++ b/src/indiware_connector.rs @@ -23,6 +23,13 @@ pub struct TimetableData { pub info: String, } +#[derive(Serialize, Deserialize, Debug)] +pub struct Lesson { + pub subject: String, + pub teacher: String, + pub id: i64, +} + async fn get_today_timetable_xml() -> serde_json::value::Value { let client = reqwest::Client::new(); let resp = client @@ -420,3 +427,47 @@ pub async fn get_classes() -> Vec { } class_list } + +pub async fn get_class_lessons(class: String) -> Vec { + let classes = get_timetable_xml_data().await; + let mut lesson_list: Vec = Vec::new(); + for i in classes.iter() { + let empty_list = serde_json::Value::Array(Vec::new()); + if i.as_object() + .unwrap() + .get("Kurz") + .unwrap() + .as_str() + .unwrap() + .replace("/", "_") + == class + { + let class_lessons = i + .as_object() + .unwrap() + .get("Unterricht") + .unwrap() + .as_object() + .unwrap() + .get("Ue") + .unwrap_or(&empty_list) + .as_array() + .unwrap(); + for lesson in class_lessons.iter() { + let lesson = lesson + .as_object() + .unwrap() + .get("UeNr") + .unwrap() + .as_object() + .unwrap(); + lesson_list.push(Lesson { + subject: lesson.get("@UeFa").unwrap().as_str().unwrap().to_string(), + teacher: lesson.get("@UeLe").unwrap().as_str().unwrap().to_string(), + id: lesson.get("#text").unwrap().as_i64().unwrap(), + }) + } + } + } + lesson_list +} diff --git a/src/main.rs b/src/main.rs index d3924a0..00cd55d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -203,6 +203,15 @@ async fn get_classes(_key: ApiKey<'_>) -> Json> { Json::from(class_list) } +#[get("/")] +async fn get_class_lessons( + _key: ApiKey<'_>, + class: String, +) -> Json> { + let lesson_list = timetable_connector::get_class_lessons(class).await; + Json::from(lesson_list) +} + #[launch] fn rocket() -> _ { rocket::build() @@ -219,5 +228,6 @@ fn rocket() -> _ { ], ) .mount("/api/classes", routes![get_classes]) + .mount("/api/lessons", routes![get_class_lessons]) .mount("/api/userinfo", routes![get_userinfo]) }