feat(model): 新增 TrashSettings 配置模型与 clamp 测试
This commit is contained in:
parent
65e090da27
commit
c4c27a34c5
@ -9,3 +9,5 @@ pub mod comment;
|
|||||||
pub mod post;
|
pub mod post;
|
||||||
/// 用户模型、用户角色与可公开用户信息。
|
/// 用户模型、用户角色与可公开用户信息。
|
||||||
pub mod user;
|
pub mod user;
|
||||||
|
/// 回收站与站点配置模型。
|
||||||
|
pub mod settings;
|
||||||
|
|||||||
71
src/models/settings.rs
Normal file
71
src/models/settings.rs
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
//! 回收站与站点配置模型。
|
||||||
|
|
||||||
|
/// 默认保留天数(天)。
|
||||||
|
pub const DEFAULT_RETENTION_DAYS: i32 = 30;
|
||||||
|
/// 默认不启用自动清理。
|
||||||
|
pub const DEFAULT_AUTO_PURGE_ENABLED: bool = false;
|
||||||
|
/// 保留天数下限(天)。
|
||||||
|
pub const MIN_RETENTION_DAYS: i32 = 1;
|
||||||
|
/// 保留天数上限(天)。防止误填超大值导致永不清理。
|
||||||
|
pub const MAX_RETENTION_DAYS: i32 = 365;
|
||||||
|
|
||||||
|
/// 回收站配置。
|
||||||
|
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
|
||||||
|
pub struct TrashSettings {
|
||||||
|
/// 是否启用自动定时清理。
|
||||||
|
pub auto_purge_enabled: bool,
|
||||||
|
/// 已删除文章保留天数,超过后被后台任务物理删除。
|
||||||
|
pub retention_days: i32,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for TrashSettings {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self {
|
||||||
|
auto_purge_enabled: DEFAULT_AUTO_PURGE_ENABLED,
|
||||||
|
retention_days: DEFAULT_RETENTION_DAYS,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TrashSettings {
|
||||||
|
/// 将保留天数钳制到合法范围 [MIN, MAX]。
|
||||||
|
pub fn clamp_retention(days: i32) -> i32 {
|
||||||
|
days.clamp(MIN_RETENTION_DAYS, MAX_RETENTION_DAYS)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn default_is_disabled_30_days() {
|
||||||
|
let s = TrashSettings::default();
|
||||||
|
assert!(!s.auto_purge_enabled);
|
||||||
|
assert_eq!(s.retention_days, 30);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn clamp_retention_keeps_valid() {
|
||||||
|
assert_eq!(TrashSettings::clamp_retention(7), 7);
|
||||||
|
assert_eq!(TrashSettings::clamp_retention(30), 30);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn clamp_retention_clamps_below_min() {
|
||||||
|
assert_eq!(TrashSettings::clamp_retention(0), MIN_RETENTION_DAYS);
|
||||||
|
assert_eq!(TrashSettings::clamp_retention(-5), MIN_RETENTION_DAYS);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn clamp_retention_clamps_above_max() {
|
||||||
|
assert_eq!(TrashSettings::clamp_retention(366), MAX_RETENTION_DAYS);
|
||||||
|
assert_eq!(TrashSettings::clamp_retention(i32::MAX), MAX_RETENTION_DAYS);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn clamp_retention_boundary() {
|
||||||
|
assert_eq!(TrashSettings::clamp_retention(MIN_RETENTION_DAYS), MIN_RETENTION_DAYS);
|
||||||
|
assert_eq!(TrashSettings::clamp_retention(MAX_RETENTION_DAYS), MAX_RETENTION_DAYS);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user