From 3280306dc0debc687df428b19857824d2a0cac88 Mon Sep 17 00:00:00 2001 From: vextrixes <113197359+vextrixes@users.noreply.github.com> Date: Tue, 27 Oct 2026 23:56:59 +0100 Subject: [PATCH] added setting modules --- src/lib.rs | 4 +- src/user/mod.rs | 7 +++ src/{ => user}/modules.rs | 0 src/user/setting_modules.rs | 116 ++++++++++++++++++++++++++++++++++++ src/{ => user}/user.rs | 6 +- 5 files changed, 126 insertions(+), 7 deletions(-) create mode 100644 src/user/mod.rs rename src/{ => user}/modules.rs (100%) create mode 100644 src/user/setting_modules.rs rename src/{ => user}/user.rs (91%) diff --git a/src/lib.rs b/src/lib.rs index 53fd30f..aeb4bba 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -9,7 +9,6 @@ mod gdpr; mod homework; //TDOS //marking mod marks; -mod modules; mod payments; mod semester; mod stdtype; @@ -32,7 +31,6 @@ pub use gdpr::{ }; pub use homework::{HomeworkList, HomeworkListItem}; pub use marks::{Mark, MarkConfirmationStatus, Marks, SubjectMarks}; -pub use modules::*; pub use payments::*; pub use semester::{ CertificateTerm, CertificateTerms, FinalMark, PedagogicalMeasure, PedagogicalMeasures, @@ -47,4 +45,4 @@ pub use substitutions::{ }; pub use teaching::{Lesson, Teaching, TeachingTheme}; pub use timetable::*; -pub use user::{SchoolType, UserInfo, UserInfoStudent, UserType}; +pub use user::*; diff --git a/src/user/mod.rs b/src/user/mod.rs new file mode 100644 index 0000000..49b3c9b --- /dev/null +++ b/src/user/mod.rs @@ -0,0 +1,7 @@ +mod modules; +mod setting_modules; +mod user; + +pub use modules::*; +pub use setting_modules::*; +pub use user::*; diff --git a/src/modules.rs b/src/user/modules.rs similarity index 100% rename from src/modules.rs rename to src/user/modules.rs diff --git a/src/user/setting_modules.rs b/src/user/setting_modules.rs new file mode 100644 index 0000000..e378d81 --- /dev/null +++ b/src/user/setting_modules.rs @@ -0,0 +1,116 @@ +use chrono::{DateTime, FixedOffset}; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "PascalCase")] +pub struct ModulesSetting { + pub common: CommonModuleSettings, + pub komens: Option, + pub marking: Option, + pub timetable: Option, + pub class_book: Option, + pub emergency: EmergencyModuleSettings, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "PascalCase")] +pub struct CommonModuleSettings { + pub actual_semester: ActualSemester, + pub actual_school_year: Option, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "PascalCase")] +pub struct ActualSemester { + pub semester_id: Option, + pub from: DateTime, + pub to: DateTime, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "PascalCase")] +pub struct ActualSchoolYear { + pub id: String, + pub name: String, + pub effective_start_date: DateTime, + pub effective_end_date: DateTime, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "PascalCase")] +pub struct KomensModuleSettings { + pub upload_folder_verified: bool, + pub current_school_year_start_date: DateTime, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "PascalCase")] +pub struct MarkinModuleSettings { + pub required_classification_confirmation: bool, + pub classification_confirmation_classes_list: Vec, + pub classification_confirmation_notification: bool, + pub number_of_days_classification_confirmation_notifications: i64, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "PascalCase")] +pub struct TimetableModuleSettings { + pub display_type: TimetableDisplayType, + pub header_type: TimetableHeaderType, + pub days_definition: Vec, + pub hours_definition: Vec, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "PascalCase")] +pub enum TimetableDisplayType { + Classic, + Flexi, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "PascalCase")] +pub enum TimetableHeaderType { + HourIndex, + TimeLine, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "PascalCase")] +pub struct TimetableSettingsDayDefinition { + pub id: String, + pub name: String, + pub caption: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "PascalCase")] +pub struct TimetableSettingsHourDefinition { + pub id: i64, + pub caption: String, + pub start: i64, + pub duration: i64, + pub is_visible: bool, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "PascalCase")] +pub struct ClassbookModuleSettings { + pub absence_calculation_type: AbsenceCalculationType, + pub absence_calculation_period: ActualSemester, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "PascalCase")] +pub enum AbsenceCalculationType { + Duration, + Lessons, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "PascalCase")] +pub struct EmergencyModuleSettings { + pub firestore_db_name: String, + pub emergency_server_url: String, + pub is_sms_licensed: bool, +} diff --git a/src/user.rs b/src/user/user.rs similarity index 91% rename from src/user.rs rename to src/user/user.rs index 06e3949..6d70738 100644 --- a/src/user.rs +++ b/src/user/user.rs @@ -1,8 +1,6 @@ use serde::{Deserialize, Serialize}; -use serde_json::Value; -use std::collections::HashMap; -use crate::{Module, SchoolClass}; +use crate::{Module, SchoolClass, user::ModulesSetting}; #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "PascalCase")] @@ -19,7 +17,7 @@ pub struct UserInfo { pub user_type_text: String, pub study_year: Option, pub enabled_modules: Vec, - pub setting_modules: HashMap, // TODO: Setting Module + pub setting_modules: ModulesSetting, pub full_user_name: Option, pub students: Vec, }