diff options
| author | batsumaru <> | 2026-10-16 15:41:00 +0900 |
|---|---|---|
| committer | batsumaru <> | 2026-10-16 15:41:00 +0900 |
| commit | 0033269fb879cab7e6227d0fd601f18402effe00 (patch) | |
| tree | 39f6fcdef6431c8e474df45d013dd2884c7915ab /src/models.rs | |
| parent | 289cdfd01ec2dda208de3cd67313c57133c1f092 (diff) | |
Add reject future timestamps on write
Diffstat (limited to 'src/models.rs')
| -rw-r--r-- | src/models.rs | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/models.rs b/src/models.rs index 15da87b..480ef2f 100644 --- a/src/models.rs +++ b/src/models.rs @@ -1,8 +1,10 @@ -use chrono::{DateTime, Utc}; +use chrono::{DateTime, TimeDelta, Utc}; use serde::{Deserialize, Serialize}; use strum::{EnumIter, IntoStaticStr}; use uuid::Uuid; +const FUTURE_TOLERANCE: TimeDelta = TimeDelta::minutes(5); + #[derive(sqlx::Type, Serialize, Deserialize, EnumIter, Debug, IntoStaticStr, Clone, Copy)] #[sqlx(type_name = "metric_type")] pub enum MetricType { @@ -62,6 +64,9 @@ impl TryFrom<MeasurementDataUnchecked> for MeasurementData { if value.value < 0.0 || value.value.is_nan() { return Err("Invalid value".to_string()); } + if value.measured_at > Utc::now() + FUTURE_TOLERANCE { + return Err("measured_at is in the future".to_string()); + } if !value.metric_type.accepts(&value.unit) { let metric_type: &'static str = (&value.metric_type).into(); let unit: &'static str = (&value.unit).into(); |
