diff options
| author | Conrad Ludgate <conradludgate@gmail.com> | 2023-09-29 02:56:40 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-09-28 18:56:40 -0700 |
| commit | 7067d772bc8c7e3c829a0b43ff9b5579bc07aef3 (patch) | |
| tree | 731b44997e3ffc86ddc527ffb87827bd8ab9cea1 /atuin-server-postgres | |
| parent | Update support.yml (#1268) (diff) | |
| download | atuin-7067d772bc8c7e3c829a0b43ff9b5579bc07aef3.zip | |
fix sync timestamps (#1258)
* fix timestamp
* add sync test
* skip all sync tests
Diffstat (limited to 'atuin-server-postgres')
| -rw-r--r-- | atuin-server-postgres/src/lib.rs | 33 | ||||
| -rw-r--r-- | atuin-server-postgres/src/wrappers.rs | 9 |
2 files changed, 37 insertions, 5 deletions
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::<PrimitiveDateTime, _>("timestamp")? + .assume_utc(), data: row.try_get("data")?, - created_at: row.try_get("created_at")?, + created_at: row + .try_get::<PrimitiveDateTime, _>("created_at")? + .assume_utc(), })) } } |
