Documentation
use crate::static_def::BASE_CONFIG;
use once_cell::sync::OnceCell;
use serde::{Deserialize, Serialize};

/// 老虎机游戏的押注区间
/// table:slots_bet_ratios
#[derive(sqlx::FromRow, Serialize, Deserialize, Debug, Clone)]
pub struct SlotsBetRatios {
    /// 游戏级别
    #[serde(default)]
    #[sqlx(default)]
    pub level_id: i32,
    /// 押注金额
    #[serde(default)]
    #[sqlx(default)]
    pub bet_money: f64,
    /// 押注线数
    #[serde(default)]
    #[sqlx(default)]
    pub bet_line: i32,
    /// 难度
    #[serde(default)]
    #[sqlx(default)]
    pub radio: i32,
    /// key
    #[serde(skip_serializing, skip_deserializing)]
    #[sqlx(skip)]
    key: OnceCell<String>,
}

impl SlotsBetRatios {
    /// 获取redis缓存的key
    #[inline]
    pub fn get_redis_key(&self) -> &str {
        self.key.get_or_init(|| {
            format!(
                "game_cache:{}_{}_{}_{}",
                BASE_CONFIG.base.server_id, self.level_id, self.bet_money, self.radio
            )
        })
    }
}