diff --git a/crates/lib/mysql_queries/src/queries/beta_keys/mod.rs b/crates/lib/mysql_queries/src/queries/beta_keys/mod.rs index d28146d767..2c431c5a65 100644 --- a/crates/lib/mysql_queries/src/queries/beta_keys/mod.rs +++ b/crates/lib/mysql_queries/src/queries/beta_keys/mod.rs @@ -1,3 +1,4 @@ pub mod get_beta_key_by_value; pub mod insert_batch_beta_keys; -pub mod list_beta_keys; \ No newline at end of file +pub mod list_beta_keys; +pub mod redeem_beta_key; \ No newline at end of file diff --git a/crates/lib/mysql_queries/src/queries/beta_keys/redeem_beta_key.rs b/crates/lib/mysql_queries/src/queries/beta_keys/redeem_beta_key.rs new file mode 100644 index 0000000000..6180f887dd --- /dev/null +++ b/crates/lib/mysql_queries/src/queries/beta_keys/redeem_beta_key.rs @@ -0,0 +1,31 @@ +use sqlx::{Executor, MySql}; + +use errors::AnyhowResult; +use tokens::tokens::users::UserToken; + +pub async fn redeem_beta_key<'e, 'c, E>( + key_value: &'e str, + redeemer_user_token: &'e UserToken, + mysql_executor: E +) + -> AnyhowResult<()> + where E: 'e + Executor<'c, Database = MySql> +{ + sqlx::query!( + r#" +UPDATE beta_keys +SET + maybe_redeemer_user_token = ?, + maybe_redeemed_at = CURRENT_TIMESTAMP +WHERE + key_value = ? +LIMIT 1 + "#, + redeemer_user_token.as_str(), + key_value + ) + .execute(mysql_executor) + .await?; + + Ok(()) +} diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/beta_keys/redeem_beta_key_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/beta_keys/redeem_beta_key_handler.rs index a8858e0b51..6ec93f4df3 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/beta_keys/redeem_beta_key_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/beta_keys/redeem_beta_key_handler.rs @@ -11,6 +11,7 @@ use enums::by_table::comments::comment_entity_type::CommentEntityType; use enums::by_table::users::user_feature_flag::UserFeatureFlag; use http_server_common::request::get_request_ip::get_request_ip; use mysql_queries::queries::beta_keys::get_beta_key_by_value::get_beta_key_by_value; +use mysql_queries::queries::beta_keys::redeem_beta_key::redeem_beta_key; use mysql_queries::queries::comments::comment_entity_token::CommentEntityToken; use mysql_queries::queries::comments::insert_comment::{insert_comment, InsertCommentArgs}; use mysql_queries::queries::users::user::set_user_feature_flags::{set_user_feature_flags, SetUserFeatureFlagArgs}; @@ -147,6 +148,13 @@ pub async fn redeem_beta_key_handler( RedeemBetaKeyError::ServerError })?; + redeem_beta_key(&request.beta_key, &user_session.user_token, &server_state.mysql_pool) + .await + .map_err(|e| { + warn!("Could not redeem beta key: {:?}", e); + RedeemBetaKeyError::ServerError + })?; + let response = RedeemBetaKeySuccessResponse { success: true, };