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