use crate::models::common::*;
use serde::{Deserialize, Serialize};
use uuid::Uuid;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct User {
pub id: Uuid,
#[serde(skip_serializing_if = "Option::is_none")]
pub company_id: Option<Uuid>,
pub first_name: String,
pub last_name: String,
pub email: String,
pub is_active: bool,
pub is_terms_of_service_accepted: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub address: Option<Address>,
#[serde(skip_serializing_if = "Option::is_none")]
pub phone_country_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub phone_number: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub wallet_address: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub solana_address: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tron_address: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub stellar_address: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub application_status: Option<ApplicationStatus>,
#[serde(skip_serializing_if = "Option::is_none")]
pub application_external_verification_link: Option<ApplicationLink>,
#[serde(skip_serializing_if = "Option::is_none")]
pub application_completion_link: Option<ApplicationLink>,
#[serde(skip_serializing_if = "Option::is_none")]
pub application_reason: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CreateCompanyUserRequest {
pub first_name: String,
pub last_name: String,
pub email: String,
pub is_terms_of_service_accepted: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub birth_date: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub wallet_address: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub solana_address: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub address: Option<Address>,
#[serde(skip_serializing_if = "Option::is_none")]
pub phone_country_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub phone_number: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CreateUserRequest {
pub first_name: String,
pub last_name: String,
pub email: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub wallet_address: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub solana_address: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub address: Option<Address>,
#[serde(skip_serializing_if = "Option::is_none")]
pub phone_country_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub phone_number: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UpdateUserRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub first_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub last_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub email: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_active: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_terms_of_service_accepted: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub address: Option<Address>,
#[serde(skip_serializing_if = "Option::is_none")]
pub phone_country_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub phone_number: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub wallet_address: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub solana_address: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tron_address: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub stellar_address: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ListUsersParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub company_id: Option<Uuid>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cursor: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<u32>,
}
pub type ListUsersResponse = Vec<User>;