From 7067d772bc8c7e3c829a0b43ff9b5579bc07aef3 Mon Sep 17 00:00:00 2001 From: Conrad Ludgate Date: Fri, 29 Sep 2023 02:56:40 +0100 Subject: fix sync timestamps (#1258) * fix timestamp * add sync test * skip all sync tests --- atuin-server-postgres/src/lib.rs | 33 ++++++++++++++++++++++++++++++--- atuin-server-postgres/src/wrappers.rs | 9 +++++++-- 2 files changed, 37 insertions(+), 5 deletions(-) (limited to 'atuin-server-postgres') diff --git a/atuin-server-postgres/src/lib.rs b/atuin-server-postgres/src/lib.rs index 8f473d52..c71d03ae 100644 --- a/atuin-server-postgres/src/lib.rs +++ b/atuin-server-postgres/src/lib.rs @@ -7,7 +7,7 @@ use serde::{Deserialize, Serialize}; use sqlx::postgres::PgPoolOptions; use sqlx::Row; -use time::{OffsetDateTime, PrimitiveDateTime}; +use time::{OffsetDateTime, PrimitiveDateTime, UtcOffset}; use tracing::instrument; use wrappers::{DbHistory, DbRecord, DbSession, DbUser}; @@ -215,8 +215,8 @@ impl Database for Postgres { ) .bind(user.id) .bind(host) - .bind(created_after) - .bind(since) + .bind(into_utc(created_after)) + .bind(into_utc(since)) .bind(page_size) .fetch(&self.pool) .map_ok(|DbHistory(h)| h) @@ -450,3 +450,30 @@ impl Database for Postgres { Ok(res) } } + +fn into_utc(x: OffsetDateTime) -> PrimitiveDateTime { + let x = x.to_offset(UtcOffset::UTC); + PrimitiveDateTime::new(x.date(), x.time()) +} + +#[cfg(test)] +mod tests { + use time::macros::datetime; + + use crate::into_utc; + + #[test] + fn utc() { + let dt = datetime!(2023-09-26 15:11:02 +05:30); + assert_eq!(into_utc(dt), datetime!(2023-09-26 09:41:02)); + assert_eq!(into_utc(dt).assume_utc(), dt); + + let dt = datetime!(2023-09-26 15:11:02 -07:00); + assert_eq!(into_utc(dt), datetime!(2023-09-26 22:11:02)); + assert_eq!(into_utc(dt).assume_utc(), dt); + + let dt = datetime!(2023-09-26 15:11:02 +00:00); + assert_eq!(into_utc(dt), datetime!(2023-09-26 15:11:02)); + assert_eq!(into_utc(dt).assume_utc(), dt); + } +} diff --git a/atuin-server-postgres/src/wrappers.rs b/atuin-server-postgres/src/wrappers.rs index 8bd482b1..b4ae48ae 100644 --- a/atuin-server-postgres/src/wrappers.rs +++ b/atuin-server-postgres/src/wrappers.rs @@ -2,6 +2,7 @@ use ::sqlx::{FromRow, Result}; use atuin_common::record::{EncryptedData, Record}; use atuin_server_database::models::{History, Session, User}; use sqlx::{postgres::PgRow, Row}; +use time::PrimitiveDateTime; pub struct DbUser(pub User); pub struct DbSession(pub Session); @@ -36,9 +37,13 @@ impl<'a> ::sqlx::FromRow<'a, PgRow> for DbHistory { client_id: row.try_get("client_id")?, user_id: row.try_get("user_id")?, hostname: row.try_get("hostname")?, - timestamp: row.try_get("timestamp")?, + timestamp: row + .try_get::("timestamp")? + .assume_utc(), data: row.try_get("data")?, - created_at: row.try_get("created_at")?, + created_at: row + .try_get::("created_at")? + .assume_utc(), })) } } -- cgit v1.3.1