1use crate::models::common::*;
4use serde::{Deserialize, Serialize};
5use uuid::Uuid;
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
9pub struct User {
10 pub id: Uuid,
11 #[serde(skip_serializing_if = "Option::is_none")]
12 pub company_id: Option<Uuid>,
13 pub first_name: String,
14 pub last_name: String,
15 pub email: String,
16 pub is_active: bool,
17 pub is_terms_of_service_accepted: bool,
18 #[serde(skip_serializing_if = "Option::is_none")]
19 pub address: Option<Address>,
20 #[serde(skip_serializing_if = "Option::is_none")]
21 pub phone_country_code: Option<String>,
22 #[serde(skip_serializing_if = "Option::is_none")]
23 pub phone_number: Option<String>,
24 #[serde(skip_serializing_if = "Option::is_none")]
25 pub wallet_address: Option<String>,
26 #[serde(skip_serializing_if = "Option::is_none")]
27 pub solana_address: Option<String>,
28 #[serde(skip_serializing_if = "Option::is_none")]
29 pub tron_address: Option<String>,
30 #[serde(skip_serializing_if = "Option::is_none")]
31 pub stellar_address: Option<String>,
32 #[serde(skip_serializing_if = "Option::is_none")]
33 pub application_status: Option<ApplicationStatus>,
34 #[serde(skip_serializing_if = "Option::is_none")]
35 pub application_external_verification_link: Option<ApplicationLink>,
36 #[serde(skip_serializing_if = "Option::is_none")]
37 pub application_completion_link: Option<ApplicationLink>,
38 #[serde(skip_serializing_if = "Option::is_none")]
39 pub application_reason: Option<String>,
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize)]
44pub struct CreateCompanyUserRequest {
45 pub first_name: String,
46 pub last_name: String,
47 pub email: String,
48 pub is_terms_of_service_accepted: bool,
49 #[serde(skip_serializing_if = "Option::is_none")]
50 pub birth_date: Option<String>,
51 #[serde(skip_serializing_if = "Option::is_none")]
52 pub wallet_address: Option<String>,
53 #[serde(skip_serializing_if = "Option::is_none")]
54 pub solana_address: Option<String>,
55 #[serde(skip_serializing_if = "Option::is_none")]
56 pub address: Option<Address>,
57 #[serde(skip_serializing_if = "Option::is_none")]
58 pub phone_country_code: Option<String>,
59 #[serde(skip_serializing_if = "Option::is_none")]
60 pub phone_number: Option<String>,
61}
62
63#[derive(Debug, Clone, Serialize, Deserialize)]
65pub struct CreateUserRequest {
66 pub first_name: String,
67 pub last_name: String,
68 pub email: String,
69 #[serde(skip_serializing_if = "Option::is_none")]
70 pub wallet_address: Option<String>,
71 #[serde(skip_serializing_if = "Option::is_none")]
72 pub solana_address: Option<String>,
73 #[serde(skip_serializing_if = "Option::is_none")]
74 pub address: Option<Address>,
75 #[serde(skip_serializing_if = "Option::is_none")]
76 pub phone_country_code: Option<String>,
77 #[serde(skip_serializing_if = "Option::is_none")]
78 pub phone_number: Option<String>,
79}
80
81#[derive(Debug, Clone, Serialize, Deserialize)]
83pub struct UpdateUserRequest {
84 #[serde(skip_serializing_if = "Option::is_none")]
85 pub first_name: Option<String>,
86 #[serde(skip_serializing_if = "Option::is_none")]
87 pub last_name: Option<String>,
88 #[serde(skip_serializing_if = "Option::is_none")]
89 pub email: Option<String>,
90 #[serde(skip_serializing_if = "Option::is_none")]
91 pub is_active: Option<bool>,
92 #[serde(skip_serializing_if = "Option::is_none")]
93 pub is_terms_of_service_accepted: Option<bool>,
94 #[serde(skip_serializing_if = "Option::is_none")]
95 pub address: Option<Address>,
96 #[serde(skip_serializing_if = "Option::is_none")]
97 pub phone_country_code: Option<String>,
98 #[serde(skip_serializing_if = "Option::is_none")]
99 pub phone_number: Option<String>,
100 #[serde(skip_serializing_if = "Option::is_none")]
101 pub wallet_address: Option<String>,
102 #[serde(skip_serializing_if = "Option::is_none")]
103 pub solana_address: Option<String>,
104 #[serde(skip_serializing_if = "Option::is_none")]
105 pub tron_address: Option<String>,
106 #[serde(skip_serializing_if = "Option::is_none")]
107 pub stellar_address: Option<String>,
108}
109
110#[derive(Debug, Clone, Serialize, Deserialize)]
112pub struct ListUsersParams {
113 pub company_id: Option<Uuid>,
114 pub cursor: Option<String>,
115 pub limit: Option<u32>,
116}
117
118pub type ListUsersResponse = Vec<User>;