userlib/dto/
user_with_roles_response.rs1use chrono::NaiveDateTime;
2use common::enums::gender::Gender;
3use common::enums::status::Status;
4use common::utils::serialize_option_naive_date;
5use serde::{Deserialize, Serialize};
6use uuid::Uuid;
7
8use crate::dto::user_role_response::UserRoleResponse;
9use crate::enums::aboriginality_type::AboriginalityType;
10use crate::jsonb::address::Address;
11use crate::jsonb::court_order::CourtOrder;
12use crate::jsonb::emergency_contacts::EmergencyDetails;
13use crate::jsonb::ern_details::ERNDetails;
14use crate::jsonb::mfa::Mfa;
15use crate::jsonb::visa_info::VisaInfo;
16
17#[derive(Serialize, Deserialize, Clone)]
18#[serde(rename_all = "camelCase")]
19pub struct UserWithRolesResponse {
20 pub first_name: String,
21 #[serde(skip_serializing_if = "Option::is_none")]
22 pub middle_name: Option<String>,
23 pub last_name: String,
24 pub full_name: String,
25 #[serde(skip_serializing_if = "Option::is_none")]
26 pub nickname: Option<String>,
27 #[serde(default)]
28 #[serde(with = "serialize_option_naive_date")]
29 #[serde(skip_serializing_if = "Option::is_none")]
30 pub birthday: Option<NaiveDateTime>,
31 pub email: String,
32 #[serde(skip_serializing_if = "Option::is_none")]
33 pub phone: Option<String>,
34 #[serde(skip_serializing_if = "Option::is_none")]
35 pub site: Option<String>,
36 #[serde(default)]
37 #[serde(with = "serialize_option_naive_date")]
38 #[serde(skip_serializing_if = "Option::is_none")]
39 pub last_online: Option<NaiveDateTime>,
40 #[serde(default)]
41 #[serde(with = "serialize_option_naive_date")]
42 #[serde(skip_serializing_if = "Option::is_none")]
43 pub last_offline: Option<NaiveDateTime>,
44 #[serde(skip_serializing_if = "Option::is_none")]
45 pub language: Option<String>,
46 pub is_first_login: bool,
47 pub id: Uuid,
48 #[serde(skip_serializing_if = "Option::is_none")]
49 pub avatar_path: Option<String>,
50 pub status: Status,
51 pub gender: Gender,
52 #[serde(skip_serializing_if = "Option::is_none")]
53 pub time_zone: Option<String>,
54 #[serde(skip_serializing_if = "Option::is_none")]
55 pub title: Option<String>,
56 #[serde(rename = "userRoles")]
57 pub roles: Vec<UserRoleResponse>,
58 #[serde(skip_serializing_if = "Option::is_none")]
59 pub online_status: Option<String>,
60 #[serde(skip_serializing_if = "Option::is_none")]
61 pub mfa: Option<Mfa>,
62 #[serde(skip_serializing_if = "Option::is_none")]
63 pub emergency_contacts: Option<Vec<EmergencyDetails>>,
64 #[serde(skip_serializing_if = "Option::is_none")]
65 pub preferred_name: Option<String>,
66 #[serde(skip_serializing_if = "Option::is_none")]
67 pub co_enrolment: Option<bool>,
68 #[serde(skip_serializing_if = "Option::is_none")]
69 pub visa_information: Option<VisaInfo>,
70 #[serde(skip_serializing_if = "Option::is_none")]
71 pub orders: Option<Vec<CourtOrder>>,
72 #[serde(skip_serializing_if = "Option::is_none")]
73 pub aboriginality: Option<AboriginalityType>,
74 #[serde(skip_serializing_if = "Option::is_none")]
75 pub ern_details: Option<ERNDetails>,
76 #[serde(skip_serializing_if = "Option::is_none")]
77 pub addresses: Option<Vec<Address>>,
78 #[serde(skip_serializing_if = "Option::is_none")]
79 pub block_reason: Option<String>,
80 pub discoverable_external: bool,
81 pub discoverable_external_admins: bool,
82 pub discoverable_internal: bool,
83}