userlib/dto/
user_with_roles_response.rs

1use 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}