From aa3b323cb697fa5e04212e9288bb4026057073e1 Mon Sep 17 00:00:00 2001 From: Ben Grant Date: Mon, 15 May 2023 16:48:00 +1000 Subject: [PATCH] Update visited date when event is fetched --- backend/adaptors/datastore/src/lib.rs | 17 +++++++++++++---- backend/adaptors/sql/src/lib.rs | 15 ++++++++++----- backend/common/src/adaptor.rs | 1 + 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/backend/adaptors/datastore/src/lib.rs b/backend/adaptors/datastore/src/lib.rs index b2e4d8b..d5bbc7c 100644 --- a/backend/adaptors/datastore/src/lib.rs +++ b/backend/adaptors/datastore/src/lib.rs @@ -135,11 +135,20 @@ impl Adaptor for DatastoreAdaptor { async fn get_event(&self, id: String) -> Result, Self::Error> { let mut client = self.client.lock().await; - // TODO: mark as visited + let key = Key::new(EVENT_KIND).id(id.clone()); + let existing_event = client.get::(key.clone()).await?; - Ok(client - .get::(Key::new(EVENT_KIND).id(id.clone())) - .await? + // Mark as visited if it exists + if let Some(mut event) = existing_event + .clone() + .map(HashMap::::from_value) + .transpose()? + { + event.insert(String::from("visited"), Utc::now().timestamp().into_value()); + client.put((key, event)).await?; + } + + Ok(existing_event .map(|value| parse_into_event(id, value)) .transpose()?) } diff --git a/backend/adaptors/sql/src/lib.rs b/backend/adaptors/sql/src/lib.rs index 147ba27..7d691dc 100644 --- a/backend/adaptors/sql/src/lib.rs +++ b/backend/adaptors/sql/src/lib.rs @@ -91,11 +91,16 @@ impl Adaptor for SqlAdaptor { } async fn get_event(&self, id: String) -> Result, Self::Error> { - // TODO: mark as visited - Ok(event::Entity::find_by_id(id) - .one(&self.db) - .await? - .map(|model| model.into())) + let existing_event = event::Entity::find_by_id(id).one(&self.db).await?; + + // Mark as visited + if let Some(event) = existing_event.clone() { + let mut event: event::ActiveModel = event.into(); + event.visited_at = Set(Utc::now().naive_utc()); + event.save(&self.db).await?; + } + + Ok(existing_event.map(|model| model.into())) } async fn create_event(&self, event: Event) -> Result { diff --git a/backend/common/src/adaptor.rs b/backend/common/src/adaptor.rs index b6e0350..73da286 100644 --- a/backend/common/src/adaptor.rs +++ b/backend/common/src/adaptor.rs @@ -21,6 +21,7 @@ pub trait Adaptor: Send + Sync { async fn get_people(&self, event_id: String) -> Result>, Self::Error>; async fn upsert_person(&self, event_id: String, person: Person) -> Result; + /// Get an event and update visited date to current time async fn get_event(&self, id: String) -> Result, Self::Error>; async fn create_event(&self, event: Event) -> Result;