From dacdd2cb8e59d6a923aba766c19df2df6b289c3b Mon Sep 17 00:00:00 2001 From: realaravinth Date: Sat, 14 May 2022 18:22:36 +0530 Subject: [PATCH] feat: implement interface to add user's traffic pattern sqlx postgres --- db/db-sqlx-postgres/src/lib.rs | 29 +++++++++++++++++++++++++++++ db/db-sqlx-postgres/src/tests.rs | 9 ++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/db/db-sqlx-postgres/src/lib.rs b/db/db-sqlx-postgres/src/lib.rs index 5abaa641..d6403e2a 100644 --- a/db/db-sqlx-postgres/src/lib.rs +++ b/db/db-sqlx-postgres/src/lib.rs @@ -532,6 +532,35 @@ impl MCDatabase for Database { Ok(resp.duration) } + /// Add traffic configuration + async fn add_traffic_pattern( + &self, + username: &str, + captcha_key: &str, + pattern: &TrafficPattern, + ) -> DBResult<()> { + sqlx::query!( + "INSERT INTO mcaptcha_sitekey_user_provided_avg_traffic ( + config_id, + avg_traffic, + peak_sustainable_traffic, + broke_my_site_traffic + ) VALUES ( + (SELECT config_id FROM mcaptcha_config WHERE key = ($1) + AND user_id = (SELECT ID FROM mcaptcha_users WHERE name = $2) + ), $3, $4, $5)", + //payload.avg_traffic, + captcha_key, + username, + pattern.avg_traffic as i32, + pattern.peak_sustainable_traffic as i32, + pattern.broke_my_site_traffic.as_ref().map(|v| *v as i32), + ) + .execute(&self.pool) + .await + .map_err(|e| map_row_not_found_err(e, DBError::CaptchaNotFound))?; + Ok(()) + } } fn now_unix_time_stamp() -> i64 { diff --git a/db/db-sqlx-postgres/src/tests.rs b/db/db-sqlx-postgres/src/tests.rs index 81048b83..adc111bf 100644 --- a/db/db-sqlx-postgres/src/tests.rs +++ b/db/db-sqlx-postgres/src/tests.rs @@ -34,6 +34,13 @@ async fn everyting_works() { const CAPTCHA_DESCRIPTION: &str = "postgrescaptchadescription"; const CAPTCHA_DURATION: i32 = 30; + // easy traffic pattern + const TRAFFIC_PATTERN: TrafficPattern = TrafficPattern { + avg_traffic: 500, + peak_sustainable_traffic: 5_000, + broke_my_site_traffic: Some(10_000), + }; + const LEVELS: [Level; 3] = [ Level { difficulty_factor: 1, @@ -67,5 +74,5 @@ async fn everyting_works() { key: CAPTCHA_SECRET, description: CAPTCHA_DESCRIPTION, }; - database_works(&db, &p, &c, &LEVELS).await; + database_works(&db, &p, &c, &LEVELS, &TRAFFIC_PATTERN).await; }