From 3f2bbdd2293b4137e38b46b00677e2acabc2f160 Mon Sep 17 00:00:00 2001 From: Joshua Coles Date: Sat, 27 Jul 2024 18:39:31 +0100 Subject: [PATCH] Make description field optional and allow for a fixed lookback --- ...20240727173725_make_description_optional.sql | 1 + src/main.rs | 17 +++++++++++++---- src/toggl/mod.rs | 4 ++-- 3 files changed, 16 insertions(+), 6 deletions(-) create mode 100644 migrations/20240727173725_make_description_optional.sql diff --git a/migrations/20240727173725_make_description_optional.sql b/migrations/20240727173725_make_description_optional.sql new file mode 100644 index 0000000..418ff8c --- /dev/null +++ b/migrations/20240727173725_make_description_optional.sql @@ -0,0 +1 @@ +alter table time_entries alter column description drop not null; diff --git a/src/main.rs b/src/main.rs index 35e0d68..439e715 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,4 @@ -use chrono::{TimeDelta, Utc}; +use chrono::{DateTime, TimeDelta, Utc}; use sqlx::{Connection, PgConnection}; use toggl::TogglApi; @@ -51,18 +51,27 @@ impl Worker { tag_ids: tag_ids.iter().map(|row| row.id as u64).collect(), }) } + + async fn fetch_changed_since(&mut self, look_back: TimeDelta) -> Result<(), AppError> { + self.update_time_entries(Utc::now() - look_back).await + } + async fn update(&mut self, default_look_back: TimeDelta) -> Result<(), AppError> { let result = sqlx::query!("select max(updated_at) as last_updated_at from time_entries") .fetch_optional(&mut self.db) .await .expect("Could not fetch max updated_at from time_entries"); - let existing_ids = self.get_ids().await?; - let fetch_since = result .and_then(|record| record.last_updated_at) .unwrap_or_else(|| Utc::now() - default_look_back); + self.update_time_entries(fetch_since).await + } + + async fn update_time_entries(&mut self, fetch_since: DateTime) -> Result<(), AppError> { + let existing_ids = self.get_ids().await?; + let time_entries = self.toggl_api .get_time_entries_for_user_modified_since(fetch_since).await?; @@ -308,7 +317,7 @@ async fn main() { toggl_api: api, }; - worker.update(TimeDelta::days(90)) + worker.fetch_changed_since(TimeDelta::days(90)) .await .unwrap(); } diff --git a/src/toggl/mod.rs b/src/toggl/mod.rs index 9d4d78d..86fb413 100644 --- a/src/toggl/mod.rs +++ b/src/toggl/mod.rs @@ -265,7 +265,7 @@ pub mod types { #[serde(rename = "at")] pub updated_at: DateTime, - pub description: String, + pub description: Option, #[serde(default)] pub tags: Vec, @@ -397,7 +397,7 @@ pub mod types { pub project_id: Option, pub task_id: Option, pub billable: bool, - pub description: String, + pub description: Option, pub tag_ids: Vec, pub billable_amount_in_cents: Option, pub hourly_rate_in_cents: Option,