From c9480d60ea432e91ed61e7f937f2c4f878e14c85 Mon Sep 17 00:00:00 2001
From: Awiteb
Date: Wed, 24 Jul 2024 08:42:02 +0300
Subject: [PATCH] feat: Save user logout time
Signed-off-by: Awiteb
---
crates/oxidetalis/src/websocket/mod.rs | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/crates/oxidetalis/src/websocket/mod.rs b/crates/oxidetalis/src/websocket/mod.rs
index 5986203..9f93b2a 100644
--- a/crates/oxidetalis/src/websocket/mod.rs
+++ b/crates/oxidetalis/src/websocket/mod.rs
@@ -177,7 +177,7 @@ async fn handle_socket(
}
};
}
- user_disconnected(&conn_id, &user_public_key).await;
+ user_disconnected(&db_conn, &conn_id, &user_public_key, user).await;
};
tokio_spawn(fut);
}
@@ -225,8 +225,21 @@ async fn handle_events(
}
/// Handle user disconnected
-async fn user_disconnected(conn_id: &Uuid, public_key: &PublicKey) {
+async fn user_disconnected(
+ db_conn: &DatabaseConnection,
+ conn_id: &Uuid,
+ public_key: &PublicKey,
+ user: Option,
+) {
ONLINE_USERS.remove_user(conn_id).await;
+ if ONLINE_USERS.is_online(public_key).await.is_none() {
+ if let Some(mut user) = user.map(IntoActiveModel::into_active_model) {
+ user.last_logout = Set(Utc::now());
+ if let Err(err) = user.update(db_conn).await {
+ log::error!("{err}");
+ }
+ }
+ }
log::debug!("User disconnect: ConnId(={conn_id}) PublicKey(={public_key})");
}