1
0
mirror of https://git.ngram.ca/OpenJam/rc-servers synced 2026-08-23 23:08:52 +00:00

Allow promo codes to only be redeemed once

This commit is contained in:
NG (Graham)
2026-02-07 12:27:48 -05:00
parent 514db6fd02
commit 31d7dd462f
7 changed files with 98 additions and 0 deletions

View File

@@ -41,6 +41,22 @@ impl SimpleOperation<()> for PromoCodeApplier {
if let Some(Typed::Str(promo_code)) = params.remove(&CODE_NAME_PARAM_KEY) {
let user_info = user.user()?;
if let Some(code_info) = self.code_map.get(&promo_code.string) {
if !code_info.is_repeatable {
if !user_info.mark_code_redeemed(promo_code.string.clone()).await? {
params.insert(SUCCESS_PARAM_KEY, Typed::Bool(false));
params.insert(RESULT_CODE_PARAM_KEY, Typed::Int(PromoResultCode::AlreadyAwarded as _));
params.insert(IS_SERIAL_PARAM_KEY, Typed::Bool(false));
params.insert(VALUE_PARAM_KEY, Typed::Float(0.0));
params.insert(PROMO_ID_PARAM_KEY, Typed::Str(promo_code.clone()));
params.insert(CUBES_AWARDED_PARAM_KEY, Typed::Str("{}".into()));
params.insert(MSG_PARAM_KEY, Typed::Str("".into()));
params.insert(BUNDLE_ID_PARAM_KEY, Typed::Str(code_info.bundle_id.clone().into()));
params.insert(ROBOPASS_PARAM_KEY, Typed::Bool(false));
params.insert(PAID_CURRENCY_PARAM_KEY, Typed::Long(0));
log::debug!("Code \"{}\" not redeemed by {} (code already redeemed)", promo_code.string, user_info.public_id());
return Ok(params);
}
}
let result = user_info.apply_purchase(&code_info.transaction).await?;
params.insert(SUCCESS_PARAM_KEY, Typed::Bool(result.success));
params.insert(RESULT_CODE_PARAM_KEY, Typed::Int(PromoResultCode::Success as _));