diff --git a/src/graphql/mod.rs b/src/graphql/mod.rs index 28963a6..a113afb 100644 --- a/src/graphql/mod.rs +++ b/src/graphql/mod.rs @@ -33,7 +33,7 @@ use axum::{Extension, Json, Router}; use axum_extra::headers::authorization::Bearer; use axum_extra::headers::Authorization; use axum_extra::TypedHeader; -use chrono::{Datelike, Local}; +use chrono::{DateTime, Datelike, Local}; use derive_more::{Display, Error}; use tokio::net::TcpListener; use tracing::{debug, info, instrument, trace, warn}; @@ -145,6 +145,7 @@ struct DirectoryPath { struct ScanPaths { directory: DirectoryPath, subdirectory: Subdirectory, + timestamp: DateTime, } /// GraphQL type to provide current configuration for an instrument @@ -308,6 +309,8 @@ impl FieldSource for ScanPaths { ScanField::Subdirectory => self.subdirectory.to_string().into(), ScanField::ScanNumber => self.directory.info.scan_number().to_string().into(), ScanField::Directory(dir) => self.directory.resolve(dir), + ScanField::YearMonthDay => self.timestamp.format("%Y%m%d").to_string().into(), + ScanField::HourMinuteSecond => self.timestamp.format("%H%M%S").to_string().into(), } } } @@ -425,6 +428,7 @@ impl Mutation { instrument_session, info: next_scan, }, + timestamp: Local::now(), subdirectory: sub.unwrap_or_default(), }) } diff --git a/src/paths.rs b/src/paths.rs index 3f0fa8b..d64a718 100644 --- a/src/paths.rs +++ b/src/paths.rs @@ -38,6 +38,10 @@ pub enum ScanField { Subdirectory, #[display("scan_number")] ScanNumber, + #[display("ts_ymd")] + YearMonthDay, + #[display("ts_hms")] + HourMinuteSecond, #[display("{_0}")] Directory(DirectoryField), } @@ -73,6 +77,8 @@ impl TryFrom for ScanField { match value.as_str() { "scan_number" => Ok(ScanField::ScanNumber), "subdirectory" => Ok(ScanField::Subdirectory), + "ts_hms" => Ok(ScanField::HourMinuteSecond), + "ts_ymd" => Ok(ScanField::YearMonthDay), _ => Ok(ScanField::Directory(DirectoryField::try_from(value)?)), } }