essences/
referrals.rs

1use crate::prelude::*;
2use base64::Engine;
3
4use crate::currency::CurrencyUnit;
5
6use crate::characters::Character;
7use crate::users::User;
8
9#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Copy, JsonSchema, Tsify)]
10pub struct ShareLinkParam {
11    pub character_id: uuid::Uuid,
12}
13
14impl ShareLinkParam {
15    pub fn from_base64(encoded: &str) -> anyhow::Result<Self> {
16        let decoded = base64::prelude::BASE64_STANDARD.decode(encoded)?;
17        Ok(serde_json::from_slice(&decoded)?)
18    }
19
20    pub fn encode_base64(&self) -> anyhow::Result<String> {
21        Ok(base64::prelude::BASE64_STANDARD.encode(serde_json::to_string(self)?))
22    }
23}
24
25#[derive(Default, Debug)]
26pub struct ReferralConnection {
27    pub character_id: uuid::Uuid,
28    pub referenced_by: uuid::Uuid,
29}
30
31#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Copy, JsonSchema, Tsify)]
32pub struct Patron {
33    pub character_id: uuid::Uuid,
34}
35
36#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Tsify, JsonSchema)]
37pub struct ReferralLevelInfo {
38    #[schemars(title = "Реферальный уровень игрока")]
39    pub level: i64,
40    #[schemars(
41        title = "Минимальный опыт для получения",
42        description = "Минимальный опыт игрока для получения реферального уровня"
43    )]
44    pub required_experience: i64,
45    #[schemars(
46        title = "Награда за уровень",
47        description = "Награда за получение уровня"
48    )]
49    pub lvlup_reward: Vec<CurrencyUnit>,
50    #[schemars(
51        title = "Ежедневная награда",
52        description = "Ежедневная награда за уровень"
53    )]
54    pub daily_reward: Vec<CurrencyUnit>,
55}
56
57#[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq, JsonSchema, Tsify)]
58#[tsify(into_wasm_abi, from_wasm_abi)]
59pub struct GetReferralsRequest {
60    pub character_id: uuid::Uuid,
61    pub offset: i64,
62}
63
64#[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq, JsonSchema, Tsify)]
65#[tsify(into_wasm_abi, from_wasm_abi)]
66pub struct ReferralWithExp {
67    pub user: User,
68    pub character: Character,
69    pub experience: i64,
70}
71
72#[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq, JsonSchema, Tsify)]
73#[tsify(into_wasm_abi, from_wasm_abi)]
74pub enum GetReferralsResponse {
75    Ok {
76        patron_level: i64,
77        patron_experience: i64,
78        referrals_with_exp: Vec<ReferralWithExp>,
79    },
80    Error {
81        code: String,
82        message: String,
83    },
84}