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}