feat: add per-user retention settings to users.toml

New [user.retention] TOML sub-block with auto_close_days and
auto_delete_days. Both default to 0, which disables the respective
sweep — a conservative default that preserves current behaviour for
existing deployments and lets admins test auto-close in isolation.

Only parsing + the test User literals are touched here; the actual
lazy sweep consuming these values lands in the next commit.
This commit is contained in:
2026-04-21 10:48:24 +02:00
parent 8173ff2f26
commit e5a62d8f10
14 changed files with 90 additions and 0 deletions
+1
View File
@@ -31,6 +31,7 @@ fn make_user(slug: &str) -> User {
web_password: bcrypt::hash("s", 4).unwrap(),
role: "doctor".into(),
whisper: Default::default(),
retention: Default::default(),
}
}
+1
View File
@@ -17,6 +17,7 @@ fn test_config() -> Arc<Config> {
web_password: "unused".into(),
role: "doctor".into(),
whisper: Default::default(),
retention: Default::default(),
}],
api_keys: HashMap::from([("test-key-123".into(), "dr_test".into())]),
..Config::test_default()
+1
View File
@@ -23,6 +23,7 @@ fn make_user(slug: &str) -> User {
web_password: bcrypt::hash("s", 4).unwrap(),
role: "doctor".into(),
whisper: Default::default(),
retention: Default::default(),
}
}
+1
View File
@@ -23,6 +23,7 @@ fn make_user(slug: &str, password_plain: &str) -> User {
web_password: bcrypt::hash(password_plain, 4).unwrap(),
role: "doctor".into(),
whisper: Default::default(),
retention: Default::default(),
}
}
+1
View File
@@ -23,6 +23,7 @@ fn make_user(slug: &str, password_plain: &str) -> User {
web_password: bcrypt::hash(password_plain, 4).unwrap(),
role: "doctor".into(),
whisper: Default::default(),
retention: Default::default(),
}
}
+1
View File
@@ -14,6 +14,7 @@ fn make_user(slug: &str, password_plain: &str) -> User {
web_password: bcrypt::hash(password_plain, 4).unwrap(),
role: "doctor".into(),
whisper: Default::default(),
retention: Default::default(),
}
}
+1
View File
@@ -22,6 +22,7 @@ fn make_user() -> User {
web_password: bcrypt::hash("unused", 4).unwrap(),
role: "doctor".into(),
whisper: Default::default(),
retention: Default::default(),
}
}
+1
View File
@@ -28,6 +28,7 @@ fn test_config() -> (Arc<Config>, PathBuf) {
web_password: "unused".into(),
role: "doctor".into(),
whisper: Default::default(),
retention: Default::default(),
}],
api_keys: HashMap::from([(TEST_KEY.into(), TEST_SLUG.into())]),
..Config::test_default()
+1
View File
@@ -37,6 +37,7 @@ fn make_user(slug: &str) -> User {
web_password: bcrypt::hash("s", 4).unwrap(),
role: "doctor".into(),
whisper: Default::default(),
retention: Default::default(),
}
}
+1
View File
@@ -265,6 +265,7 @@ fn test_config_with_whisper(whisper_url: String) -> Arc<Config> {
web_password: "unused".into(),
role: "doctor".into(),
whisper: Default::default(),
retention: Default::default(),
}],
whisper_url,
whisper_timeout_seconds: 5,
+1
View File
@@ -22,6 +22,7 @@ fn test_config() -> Arc<Config> {
web_password: "unused".into(),
role: "doctor".into(),
whisper: Default::default(),
retention: Default::default(),
}],
api_keys: HashMap::from([("test-key-123".into(), "dr_test".into())]),
..Config::test_default()
+1
View File
@@ -21,6 +21,7 @@ fn test_config() -> Arc<Config> {
web_password: "unused".into(),
role: "doctor".into(),
whisper: Default::default(),
retention: Default::default(),
}],
api_keys: HashMap::from([("test-key".into(), "dr_test".into())]),
..Config::test_default()