1use crate::models::common::*;
4use serde::{Deserialize, Serialize};
5use uuid::Uuid;
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
13pub struct CreateCompanyApplicationRequest {
14 pub initial_user: InitialUser,
15 pub name: String,
16 pub address: Address,
17 #[serde(skip_serializing_if = "Option::is_none")]
18 pub chain_id: Option<String>,
19 #[serde(skip_serializing_if = "Option::is_none")]
20 pub contract_address: Option<String>,
21 #[serde(skip_serializing_if = "Option::is_none")]
22 pub source_key: Option<String>,
23 pub entity: EntityInfo,
24 pub representatives: Vec<Representative>,
25 pub ultimate_beneficial_owners: Vec<UltimateBeneficialOwner>,
26}
27
28#[derive(Debug, Clone, Serialize, Deserialize)]
30pub struct InitialUser {
31 #[serde(skip_serializing_if = "Option::is_none")]
32 pub id: Option<Uuid>,
33 pub first_name: String,
34 pub last_name: String,
35 pub birth_date: String,
36 pub national_id: String,
37 pub country_of_issue: String,
38 pub email: String,
39 #[serde(skip_serializing_if = "Option::is_none")]
40 pub phone_country_code: Option<String>,
41 #[serde(skip_serializing_if = "Option::is_none")]
42 pub phone_number: Option<String>,
43 pub address: Address,
44 #[serde(skip_serializing_if = "Option::is_none")]
45 pub role: Option<String>,
46 #[serde(skip_serializing_if = "Option::is_none")]
47 pub wallet_address: Option<String>,
48 #[serde(skip_serializing_if = "Option::is_none")]
49 pub solana_address: Option<String>,
50 #[serde(skip_serializing_if = "Option::is_none")]
51 pub tron_address: Option<String>,
52 #[serde(skip_serializing_if = "Option::is_none")]
53 pub stellar_address: Option<String>,
54 pub ip_address: String,
55 pub is_terms_of_service_accepted: bool,
56}
57
58#[derive(Debug, Clone, Serialize, Deserialize)]
60pub struct EntityInfo {
61 pub name: String,
62 #[serde(skip_serializing_if = "Option::is_none")]
63 pub r#type: Option<String>,
64 pub description: String,
65 pub industry: String,
66 pub registration_number: String,
67 pub tax_id: String,
68 pub website: String,
69 #[serde(skip_serializing_if = "Option::is_none")]
70 pub expected_spend: Option<String>,
71}
72
73#[derive(Debug, Clone, Serialize, Deserialize)]
75pub struct EntityUpdateInfo {
76 #[serde(skip_serializing_if = "Option::is_none")]
77 pub r#type: Option<String>,
78 #[serde(skip_serializing_if = "Option::is_none")]
79 pub description: Option<String>,
80 #[serde(skip_serializing_if = "Option::is_none")]
81 pub industry: Option<String>,
82 #[serde(skip_serializing_if = "Option::is_none")]
83 pub registration_number: Option<String>,
84 #[serde(skip_serializing_if = "Option::is_none")]
85 pub tax_id: Option<String>,
86 #[serde(skip_serializing_if = "Option::is_none")]
87 pub website: Option<String>,
88 #[serde(skip_serializing_if = "Option::is_none")]
89 pub expected_spend: Option<String>,
90}
91
92#[derive(Debug, Clone, Serialize, Deserialize)]
94pub struct Representative {
95 #[serde(skip_serializing_if = "Option::is_none")]
96 pub id: Option<Uuid>,
97 pub first_name: String,
98 pub last_name: String,
99 pub birth_date: String,
100 pub national_id: String,
101 pub country_of_issue: String,
102 pub email: String,
103 #[serde(skip_serializing_if = "Option::is_none")]
104 pub phone_country_code: Option<String>,
105 #[serde(skip_serializing_if = "Option::is_none")]
106 pub phone_number: Option<String>,
107 pub address: Address,
108}
109
110#[derive(Debug, Clone, Serialize, Deserialize)]
112pub struct UltimateBeneficialOwner {
113 #[serde(skip_serializing_if = "Option::is_none")]
114 pub id: Option<Uuid>,
115 pub first_name: String,
116 pub last_name: String,
117 pub birth_date: String,
118 pub national_id: String,
119 pub country_of_issue: String,
120 pub email: String,
121 #[serde(skip_serializing_if = "Option::is_none")]
122 pub phone_country_code: Option<String>,
123 #[serde(skip_serializing_if = "Option::is_none")]
124 pub phone_number: Option<String>,
125 pub address: Address,
126}
127
128#[derive(Debug, Clone, Serialize, Deserialize)]
130pub struct CompanyApplicationResponse {
131 pub id: Uuid,
132 pub name: String,
133 pub address: Address,
134 #[serde(skip_serializing_if = "Option::is_none")]
135 pub ultimate_beneficial_owners: Option<Vec<UltimateBeneficialOwnerResponse>>,
136 #[serde(skip_serializing_if = "Option::is_none")]
137 pub application_status: Option<ApplicationStatus>,
138 #[serde(skip_serializing_if = "Option::is_none")]
139 pub application_external_verification_link: Option<ApplicationLink>,
140 #[serde(skip_serializing_if = "Option::is_none")]
141 pub application_completion_link: Option<ApplicationLink>,
142 #[serde(skip_serializing_if = "Option::is_none")]
143 pub application_reason: Option<String>,
144}
145
146#[derive(Debug, Clone, Serialize, Deserialize)]
148pub struct UltimateBeneficialOwnerResponse {
149 pub id: Uuid,
150 #[serde(skip_serializing_if = "Option::is_none")]
151 pub first_name: Option<String>,
152 #[serde(skip_serializing_if = "Option::is_none")]
153 pub last_name: Option<String>,
154 #[serde(skip_serializing_if = "Option::is_none")]
155 pub email: Option<String>,
156 #[serde(skip_serializing_if = "Option::is_none")]
157 pub application_status: Option<ApplicationStatus>,
158 #[serde(skip_serializing_if = "Option::is_none")]
159 pub application_external_verification_link: Option<ApplicationLink>,
160 #[serde(skip_serializing_if = "Option::is_none")]
161 pub application_completion_link: Option<ApplicationLink>,
162 #[serde(skip_serializing_if = "Option::is_none")]
163 pub application_reason: Option<String>,
164}
165
166#[derive(Debug, Clone, Serialize, Deserialize)]
168pub struct UpdateCompanyApplicationRequest {
169 #[serde(skip_serializing_if = "Option::is_none")]
170 pub name: Option<String>,
171 #[serde(skip_serializing_if = "Option::is_none")]
172 pub address: Option<Address>,
173 #[serde(skip_serializing_if = "Option::is_none")]
174 pub entity: Option<EntityUpdateInfo>,
175}
176
177#[derive(Debug, Clone, Serialize, Deserialize)]
179pub struct UpdateUltimateBeneficialOwnerRequest {
180 #[serde(skip_serializing_if = "Option::is_none")]
181 pub first_name: Option<String>,
182 #[serde(skip_serializing_if = "Option::is_none")]
183 pub last_name: Option<String>,
184 #[serde(skip_serializing_if = "Option::is_none")]
185 pub birth_date: Option<String>,
186 #[serde(skip_serializing_if = "Option::is_none")]
187 pub national_id: Option<String>,
188 #[serde(skip_serializing_if = "Option::is_none")]
189 pub country_of_issue: Option<String>,
190 #[serde(skip_serializing_if = "Option::is_none")]
191 pub email: Option<String>,
192 #[serde(skip_serializing_if = "Option::is_none")]
193 pub address: Option<Address>,
194}
195
196#[derive(Debug, Clone, Serialize, Deserialize)]
202pub struct CreateUserApplicationRequest {
203 pub ip_address: String,
204 pub occupation: String,
205 pub annual_salary: String,
206 pub account_purpose: String,
207 pub expected_monthly_volume: String,
208 pub is_terms_of_service_accepted: bool,
209 pub sumsub_share_token: String,
210 #[serde(skip_serializing_if = "Option::is_none")]
211 pub wallet_address: Option<String>,
212 #[serde(skip_serializing_if = "Option::is_none")]
213 pub solana_address: Option<String>,
214 #[serde(skip_serializing_if = "Option::is_none")]
215 pub tron_address: Option<String>,
216 #[serde(skip_serializing_if = "Option::is_none")]
217 pub stellar_address: Option<String>,
218 #[serde(skip_serializing_if = "Option::is_none")]
219 pub chain_id: Option<String>,
220 #[serde(skip_serializing_if = "Option::is_none")]
221 pub contract_address: Option<String>,
222 #[serde(skip_serializing_if = "Option::is_none")]
223 pub source_key: Option<String>,
224 #[serde(skip_serializing_if = "Option::is_none")]
225 pub has_existing_documents: Option<bool>,
226}
227
228#[derive(Debug, Clone, Serialize, Deserialize)]
230pub struct InitiateUserApplicationRequest {
231 #[serde(skip_serializing_if = "Option::is_none")]
232 pub first_name: Option<String>,
233 #[serde(skip_serializing_if = "Option::is_none")]
234 pub last_name: Option<String>,
235 #[serde(skip_serializing_if = "Option::is_none")]
236 pub email: Option<String>,
237 #[serde(skip_serializing_if = "Option::is_none")]
238 pub wallet_address: Option<String>,
239}
240
241#[derive(Debug, Clone, Serialize, Deserialize)]
243pub struct UserApplicationResponse {
244 pub id: Uuid,
245 #[serde(skip_serializing_if = "Option::is_none")]
246 pub company_id: Option<Uuid>,
247 #[serde(skip_serializing_if = "Option::is_none")]
248 pub first_name: Option<String>,
249 #[serde(skip_serializing_if = "Option::is_none")]
250 pub last_name: Option<String>,
251 #[serde(skip_serializing_if = "Option::is_none")]
252 pub email: Option<String>,
253 #[serde(skip_serializing_if = "Option::is_none")]
254 pub is_active: Option<bool>,
255 #[serde(skip_serializing_if = "Option::is_none")]
256 pub is_terms_of_service_accepted: Option<bool>,
257 #[serde(skip_serializing_if = "Option::is_none")]
258 pub address: Option<Address>,
259 #[serde(skip_serializing_if = "Option::is_none")]
260 pub phone_country_code: Option<String>,
261 #[serde(skip_serializing_if = "Option::is_none")]
262 pub phone_number: Option<String>,
263 #[serde(skip_serializing_if = "Option::is_none")]
264 pub wallet_address: Option<String>,
265 #[serde(skip_serializing_if = "Option::is_none")]
266 pub solana_address: Option<String>,
267 #[serde(skip_serializing_if = "Option::is_none")]
268 pub application_status: Option<ApplicationStatus>,
269 #[serde(skip_serializing_if = "Option::is_none")]
270 pub application_external_verification_link: Option<ApplicationLink>,
271 #[serde(skip_serializing_if = "Option::is_none")]
272 pub application_completion_link: Option<ApplicationLink>,
273 #[serde(skip_serializing_if = "Option::is_none")]
274 pub application_reason: Option<String>,
275}
276
277#[derive(Debug, Clone, Serialize, Deserialize)]
279pub struct UpdateUserApplicationRequest {
280 #[serde(skip_serializing_if = "Option::is_none")]
281 pub first_name: Option<String>,
282 #[serde(skip_serializing_if = "Option::is_none")]
283 pub last_name: Option<String>,
284 #[serde(skip_serializing_if = "Option::is_none")]
285 pub birth_date: Option<String>,
286 #[serde(skip_serializing_if = "Option::is_none")]
287 pub national_id: Option<String>,
288 #[serde(skip_serializing_if = "Option::is_none")]
289 pub country_of_issue: Option<String>,
290 #[serde(skip_serializing_if = "Option::is_none")]
291 pub address: Option<Address>,
292 #[serde(skip_serializing_if = "Option::is_none")]
293 pub ip_address: Option<String>,
294 #[serde(skip_serializing_if = "Option::is_none")]
295 pub occupation: Option<String>,
296 #[serde(skip_serializing_if = "Option::is_none")]
297 pub annual_salary: Option<String>,
298 #[serde(skip_serializing_if = "Option::is_none")]
299 pub account_purpose: Option<String>,
300 #[serde(skip_serializing_if = "Option::is_none")]
301 pub expected_monthly_volume: Option<String>,
302 #[serde(skip_serializing_if = "Option::is_none")]
303 pub is_terms_of_service_accepted: Option<bool>,
304 #[serde(skip_serializing_if = "Option::is_none")]
305 pub has_existing_documents: Option<bool>,
306}
307
308#[derive(Debug, Clone)]
314pub struct DocumentUploadParams {
315 pub document_type: String,
316 pub side: String,
317 pub country: Option<String>,
318 pub country_code: Option<String>,
319 pub name: Option<String>, pub file_path: String,
321}