From 87b4cfb3f2186191985f41b580bd0e6788b79eaf Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Wed, 24 Sep 2025 18:30:34 -0400 Subject: [PATCH] refactor --- .../down.sql | 2 +- .../up.sql | 5 +++- .../src/queries/analytics_active_users/mod.rs | 2 +- ...rs => upsert_analytics_app_active_user.rs} | 23 ++++++++++++------- 4 files changed, 21 insertions(+), 11 deletions(-) rename _sql/migrations/{2025-09-24-055943_analytics_summaries => 2025-09-24-055943_analytics_app_active_users}/down.sql (76%) rename _sql/migrations/{2025-09-24-055943_analytics_summaries => 2025-09-24-055943_analytics_app_active_users}/up.sql (90%) rename crates/schema/database/mysql_queries/src/queries/analytics_active_users/{upsert_analytics_active_user.rs => upsert_analytics_app_active_user.rs} (70%) diff --git a/_sql/migrations/2025-09-24-055943_analytics_summaries/down.sql b/_sql/migrations/2025-09-24-055943_analytics_app_active_users/down.sql similarity index 76% rename from _sql/migrations/2025-09-24-055943_analytics_summaries/down.sql rename to _sql/migrations/2025-09-24-055943_analytics_app_active_users/down.sql index 91aa0f13eb..74887727e0 100644 --- a/_sql/migrations/2025-09-24-055943_analytics_summaries/down.sql +++ b/_sql/migrations/2025-09-24-055943_analytics_app_active_users/down.sql @@ -2,4 +2,4 @@ -- noinspection SqlNoDataSourceInspectionForFile -- noinspection SqlResolveForFile -drop table analytics_active_users; +drop table analytics_app_active_users; diff --git a/_sql/migrations/2025-09-24-055943_analytics_summaries/up.sql b/_sql/migrations/2025-09-24-055943_analytics_app_active_users/up.sql similarity index 90% rename from _sql/migrations/2025-09-24-055943_analytics_summaries/up.sql rename to _sql/migrations/2025-09-24-055943_analytics_app_active_users/up.sql index ae87bf8159..40ac46e7ba 100644 --- a/_sql/migrations/2025-09-24-055943_analytics_summaries/up.sql +++ b/_sql/migrations/2025-09-24-055943_analytics_app_active_users/up.sql @@ -2,7 +2,7 @@ -- noinspection SqlNoDataSourceInspectionForFile -- noinspection SqlResolveForFile -CREATE TABLE analytics_active_users ( +CREATE TABLE analytics_app_active_users ( -- Not used for anything except replication. id BIGINT(20) NOT NULL AUTO_INCREMENT, @@ -13,6 +13,9 @@ CREATE TABLE analytics_active_users ( -- Who sent the event. user_token VARCHAR(32) NOT NULL, + -- App version is updated on every write. + app_version VARCHAR(32) NOT NULL, + -- IP address is updated on every write. ip_address VARCHAR(40) NOT NULL, diff --git a/crates/schema/database/mysql_queries/src/queries/analytics_active_users/mod.rs b/crates/schema/database/mysql_queries/src/queries/analytics_active_users/mod.rs index 24ff381c13..0c873d7628 100644 --- a/crates/schema/database/mysql_queries/src/queries/analytics_active_users/mod.rs +++ b/crates/schema/database/mysql_queries/src/queries/analytics_active_users/mod.rs @@ -1 +1 @@ -mod upsert_analytics_active_user; \ No newline at end of file +mod upsert_analytics_app_active_user; \ No newline at end of file diff --git a/crates/schema/database/mysql_queries/src/queries/analytics_active_users/upsert_analytics_active_user.rs b/crates/schema/database/mysql_queries/src/queries/analytics_active_users/upsert_analytics_app_active_user.rs similarity index 70% rename from crates/schema/database/mysql_queries/src/queries/analytics_active_users/upsert_analytics_active_user.rs rename to crates/schema/database/mysql_queries/src/queries/analytics_active_users/upsert_analytics_app_active_user.rs index 84995aa311..3dac8797dd 100644 --- a/crates/schema/database/mysql_queries/src/queries/analytics_active_users/upsert_analytics_active_user.rs +++ b/crates/schema/database/mysql_queries/src/queries/analytics_active_users/upsert_analytics_app_active_user.rs @@ -6,33 +6,40 @@ use sqlx::query::Query; use sqlx::MySql; use tokens::tokens::users::UserToken; -pub struct UpsertAnalyticsActiveUser { +pub struct UpsertAnalyticsAppActiveUser<'a> { // TODO: Swap PaymentsNamespace (artcraft,fakeyou) for an AnalyticsNamespace enum. pub namespace: PaymentsNamespace, - pub user_token: UserToken, - pub ip_address: String, + pub user_token: &'a UserToken, + pub ip_address: &'a str, + pub app_version: &'a str, } -impl UpsertAnalyticsActiveUser { +impl <'a> UpsertAnalyticsAppActiveUser<'a> { fn query(&self) -> Query { sqlx::query!( r#" -INSERT INTO analytics_active_users +INSERT INTO analytics_app_active_users SET app_namespace = ?, user_token = ?, + app_version = ?, ip_address = ?, measurement_count = measurement_count + 1, first_active_at = NOW(), last_active_at = NOW() ON DUPLICATE KEY UPDATE + app_version = ?, ip_address = ?, measurement_count = measurement_count + 1, last_active_at = NOW() "#, - &self.namespace.to_str(), - &self.user_token.as_str(), - &self.ip_address, + // Insert case + self.namespace.to_str(), + self.user_token.as_str(), + self.app_version, + self.ip_address, + // Update case + self.app_version, self.ip_address, ) }