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}