mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-05 17:58:55 +00:00
expire key once redeemed
This commit is contained in:
1 parent
91705499da
commit
df43cb3759
3 files changed
+41
-1
No files matched your search
@@ -1,3 +1,4 @@
|
||||
pub mod get_beta_key_by_value;
|
||||
pub mod insert_batch_beta_keys;
|
||||
pub mod list_beta_keys;
|
||||
pub mod list_beta_keys;
|
||||
pub mod redeem_beta_key;
|
||||
@@ -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(())
|
||||
}
|
||||
+8
@@ -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,
|
||||
};
|
||||
|
||||
Reference in new issue
Block a user