From a69e78b7482227f22e7ddbfaa7dc7ee31f29a99b Mon Sep 17 00:00:00 2001 From: batsumaru <> Date: Fri, 16 Oct 2026 11:57:17 +0900 Subject: Add enum fetchers --- src/models.rs | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 src/models.rs (limited to 'src/models.rs') diff --git a/src/models.rs b/src/models.rs new file mode 100644 index 0000000..b3f23d1 --- /dev/null +++ b/src/models.rs @@ -0,0 +1,76 @@ +use chrono::{DateTime, NaiveDate, Utc}; +use serde::{Deserialize, Serialize}; +use strum::EnumIter; +use uuid::Uuid; + +#[derive(sqlx::Type, Serialize, Deserialize, EnumIter)] +#[sqlx(type_name = "metric_type")] +pub enum MetricType { + BodyWeight, + Hip, + Waist, +} + +#[derive(sqlx::Type, Serialize, Deserialize, EnumIter)] +#[sqlx(type_name = "unit")] +pub enum Unit { + Kilogram, + Centimeter, +} + +#[derive(Serialize)] +pub struct MeasurementView { + pub id: Uuid, + pub measured_at: DateTime, + pub metric_type: MetricType, + pub value: f64, + pub unit: Unit, +} + +#[derive(Deserialize)] +pub struct MeasurementData { + pub measured_at: DateTime, + pub metric_type: MetricType, + pub value: f64, + pub unit: Unit, +} + +#[derive(Deserialize)] +pub struct DateQuery { + pub date: Option, + pub from: Option, + pub to: Option, +} + +#[cfg(test)] +mod tests { + use super::*; + use sqlx::PgPool; + use strum::IntoEnumIterator; + + #[sqlx::test] + async fn unit_enums_match(pool: PgPool) { + let values: Vec = sqlx::query_scalar("SELECT enum_range(NULL::unit)") + .fetch_one(&pool) + .await + .expect("Database has a variant that Rust doesn't"); + assert_eq!( + values.len(), + Unit::iter().count(), + "Rust has a variant that the database doesn't" + ); + } + + #[sqlx::test] + async fn metric_type_enums_match(pool: PgPool) { + let values: Vec = sqlx::query_scalar("SELECT enum_range(NULL::metric_type)") + .fetch_one(&pool) + .await + .expect("Database has a variant that Rust doesn't"); + assert_eq!( + values.len(), + MetricType::iter().count(), + "Rust has a variant that the database doesn't" + ); + } +} -- cgit v1.3