Add skill for gameplay entry type workflows
This commit is contained in:
@@ -75,6 +75,121 @@ pub fn build_runtime_profile_wallet_ledger_list_input(
|
||||
Ok(RuntimeProfileWalletLedgerListInput { user_id })
|
||||
}
|
||||
|
||||
pub fn build_runtime_tracking_event_input(
|
||||
event_id: String,
|
||||
event_key: String,
|
||||
scope_kind: RuntimeTrackingScopeKind,
|
||||
scope_id: String,
|
||||
user_id: Option<String>,
|
||||
owner_user_id: Option<String>,
|
||||
profile_id: Option<String>,
|
||||
module_key: Option<String>,
|
||||
metadata_json: String,
|
||||
occurred_at_micros: i64,
|
||||
) -> Result<RuntimeTrackingEventInput, RuntimeProfileFieldError> {
|
||||
let event_id = normalize_required_string(event_id)
|
||||
.ok_or(RuntimeProfileFieldError::MissingTrackingEventId)?;
|
||||
let event_key =
|
||||
normalize_required_string(event_key).ok_or(RuntimeProfileFieldError::MissingTaskEventKey)?;
|
||||
let scope_id = normalize_required_string(scope_id)
|
||||
.ok_or(RuntimeProfileFieldError::MissingTrackingScopeId)?;
|
||||
let metadata_json = normalize_tracking_metadata_json(metadata_json)?;
|
||||
|
||||
Ok(RuntimeTrackingEventInput {
|
||||
event_id,
|
||||
event_key,
|
||||
scope_kind,
|
||||
scope_id,
|
||||
user_id: normalize_optional_string(user_id),
|
||||
owner_user_id: normalize_optional_string(owner_user_id),
|
||||
profile_id: normalize_optional_string(profile_id),
|
||||
module_key: normalize_optional_string(module_key),
|
||||
metadata_json,
|
||||
occurred_at_micros,
|
||||
})
|
||||
}
|
||||
|
||||
pub fn build_runtime_profile_task_center_get_input(
|
||||
user_id: String,
|
||||
) -> Result<RuntimeProfileTaskCenterGetInput, RuntimeProfileFieldError> {
|
||||
let user_id = normalize_runtime_profile_user_id(user_id)?;
|
||||
Ok(RuntimeProfileTaskCenterGetInput { user_id })
|
||||
}
|
||||
|
||||
pub fn build_runtime_profile_task_claim_input(
|
||||
user_id: String,
|
||||
task_id: String,
|
||||
) -> Result<RuntimeProfileTaskClaimInput, RuntimeProfileFieldError> {
|
||||
let user_id = normalize_runtime_profile_user_id(user_id)?;
|
||||
let task_id = normalize_profile_task_id(task_id)?;
|
||||
Ok(RuntimeProfileTaskClaimInput { user_id, task_id })
|
||||
}
|
||||
|
||||
pub fn build_runtime_profile_task_config_admin_list_input(
|
||||
admin_user_id: String,
|
||||
) -> Result<RuntimeProfileTaskConfigAdminListInput, RuntimeProfileFieldError> {
|
||||
let admin_user_id = normalize_runtime_profile_user_id(admin_user_id)?;
|
||||
Ok(RuntimeProfileTaskConfigAdminListInput { admin_user_id })
|
||||
}
|
||||
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub fn build_runtime_profile_task_config_admin_upsert_input(
|
||||
admin_user_id: String,
|
||||
task_id: String,
|
||||
title: String,
|
||||
description: String,
|
||||
event_key: String,
|
||||
cycle: RuntimeProfileTaskCycle,
|
||||
scope_kind: RuntimeTrackingScopeKind,
|
||||
threshold: u32,
|
||||
reward_points: u64,
|
||||
enabled: bool,
|
||||
sort_order: i32,
|
||||
updated_at_micros: i64,
|
||||
) -> Result<RuntimeProfileTaskConfigAdminUpsertInput, RuntimeProfileFieldError> {
|
||||
let admin_user_id = normalize_runtime_profile_user_id(admin_user_id)?;
|
||||
let task_id = normalize_profile_task_id(task_id)?;
|
||||
let title =
|
||||
normalize_required_string(title).ok_or(RuntimeProfileFieldError::MissingTaskTitle)?;
|
||||
let event_key =
|
||||
normalize_required_string(event_key).ok_or(RuntimeProfileFieldError::MissingTaskEventKey)?;
|
||||
if threshold == 0 {
|
||||
return Err(RuntimeProfileFieldError::InvalidTaskThreshold);
|
||||
}
|
||||
if reward_points == 0 || reward_points > i64::MAX as u64 {
|
||||
return Err(RuntimeProfileFieldError::InvalidTaskReward);
|
||||
}
|
||||
|
||||
Ok(RuntimeProfileTaskConfigAdminUpsertInput {
|
||||
admin_user_id,
|
||||
task_id,
|
||||
title,
|
||||
description: normalize_optional_string(Some(description)).unwrap_or_default(),
|
||||
event_key,
|
||||
cycle,
|
||||
scope_kind,
|
||||
threshold,
|
||||
reward_points,
|
||||
enabled,
|
||||
sort_order,
|
||||
updated_at_micros,
|
||||
})
|
||||
}
|
||||
|
||||
pub fn build_runtime_profile_task_config_admin_disable_input(
|
||||
admin_user_id: String,
|
||||
task_id: String,
|
||||
updated_at_micros: i64,
|
||||
) -> Result<RuntimeProfileTaskConfigAdminDisableInput, RuntimeProfileFieldError> {
|
||||
let admin_user_id = normalize_runtime_profile_user_id(admin_user_id)?;
|
||||
let task_id = normalize_profile_task_id(task_id)?;
|
||||
Ok(RuntimeProfileTaskConfigAdminDisableInput {
|
||||
admin_user_id,
|
||||
task_id,
|
||||
updated_at_micros,
|
||||
})
|
||||
}
|
||||
|
||||
pub fn build_runtime_profile_wallet_adjustment_input(
|
||||
user_id: String,
|
||||
amount: u64,
|
||||
@@ -200,6 +315,13 @@ pub fn build_runtime_profile_redeem_code_admin_upsert_input(
|
||||
})
|
||||
}
|
||||
|
||||
pub fn build_runtime_profile_redeem_code_admin_list_input(
|
||||
admin_user_id: String,
|
||||
) -> Result<RuntimeProfileRedeemCodeAdminListInput, RuntimeProfileFieldError> {
|
||||
let admin_user_id = normalize_runtime_profile_user_id(admin_user_id)?;
|
||||
Ok(RuntimeProfileRedeemCodeAdminListInput { admin_user_id })
|
||||
}
|
||||
|
||||
pub fn build_runtime_profile_invite_code_admin_upsert_input(
|
||||
admin_user_id: String,
|
||||
invite_code: String,
|
||||
@@ -219,6 +341,13 @@ pub fn build_runtime_profile_invite_code_admin_upsert_input(
|
||||
})
|
||||
}
|
||||
|
||||
pub fn build_runtime_profile_invite_code_admin_list_input(
|
||||
admin_user_id: String,
|
||||
) -> Result<RuntimeProfileInviteCodeAdminListInput, RuntimeProfileFieldError> {
|
||||
let admin_user_id = normalize_runtime_profile_user_id(admin_user_id)?;
|
||||
Ok(RuntimeProfileInviteCodeAdminListInput { admin_user_id })
|
||||
}
|
||||
|
||||
pub fn build_runtime_profile_redeem_code_admin_disable_input(
|
||||
admin_user_id: String,
|
||||
code: String,
|
||||
@@ -509,3 +638,22 @@ pub fn normalize_invite_code_metadata_json(
|
||||
|
||||
serde_json::to_string(&parsed).map_err(|_| RuntimeProfileFieldError::InvalidInviteCodeMetadata)
|
||||
}
|
||||
|
||||
fn normalize_tracking_metadata_json(value: String) -> Result<String, RuntimeProfileFieldError> {
|
||||
let trimmed = value.trim();
|
||||
if trimmed.is_empty() {
|
||||
return Ok(PROFILE_INVITE_CODE_METADATA_DEFAULT_JSON.to_string());
|
||||
}
|
||||
|
||||
let parsed = serde_json::from_str::<Value>(trimmed)
|
||||
.map_err(|_| RuntimeProfileFieldError::InvalidInviteCodeMetadata)?;
|
||||
if !parsed.is_object() {
|
||||
return Err(RuntimeProfileFieldError::InvalidInviteCodeMetadata);
|
||||
}
|
||||
|
||||
serde_json::to_string(&parsed).map_err(|_| RuntimeProfileFieldError::InvalidInviteCodeMetadata)
|
||||
}
|
||||
|
||||
fn normalize_profile_task_id(value: String) -> Result<String, RuntimeProfileFieldError> {
|
||||
normalize_required_string(value).ok_or(RuntimeProfileFieldError::MissingTaskId)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user