1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186
use actix_web::{HttpResponse, ResponseError}; use derive_more::Display; use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize, Debug, Clone)] pub struct GetMyAccountBody { pub id: String, pub language_code: String, } #[derive(Serialize, Deserialize, Debug, Clone)] pub struct GetMyAccountResult { pub account: UserAggregation, } #[derive(Serialize, Deserialize, Debug, Clone)] pub struct UserAggregation { pub id: Option<String>, pub email: Option<String>, pub kind: Option<String>, pub account_activation: Option<AccountActivationAggregation>, pub informations: Option<UserInformationsAggregation>, pub contact: Option<UserContactAggregation>, pub account_settings: Option<AccountSettingsAggregation>, pub company: Option<CompanyAggregation>, } #[derive(Serialize, Deserialize, Debug, Clone)] pub struct AccountActivationAggregation { pub activation_date: Option<String>, pub activation_status: Option<String>, } #[derive(Serialize, Deserialize, Debug, Clone)] pub struct UserInformationsAggregation { pub first_name: Option<String>, pub last_name: Option<String>, pub birthday: Option<String>, pub gender: Option<String>, pub civil_status: Option<String>, pub picture: Option<UserPictureAggregation>, } #[derive(Serialize, Deserialize, Debug, Clone)] pub struct UserPictureAggregation { pub id: Option<String>, pub quality: Option<String>, pub kind: Option<String>, pub file_name: Option<String>, } #[derive(Serialize, Deserialize, Debug, Clone)] pub struct UserContactAggregation { pub address: Option<AddressAggregation>, pub phone: Option<UserPhoneAggregation>, pub socials: Option<Vec<UserSocialAggregation>>, } #[derive(Serialize, Deserialize, Debug, Clone)] pub struct AddressAggregation { pub id: Option<String>, pub road_name: Option<Vec<AddressRoadNameAggregation>>, pub postal_code: Option<i32>, pub country: Option<String>, pub city: Option<String>, pub location: Option<AddressLocationAggregation>, } #[derive(Serialize, Deserialize, Debug, Clone)] pub struct AddressRoadNameAggregation { pub id: Option<String>, pub language_code: Option<String>, pub value: Option<String>, } #[derive(Serialize, Deserialize, Debug, Clone)] pub struct AddressLocationAggregation { pub latitude: Option<f64>, pub longitude: Option<f64>, } #[derive(Serialize, Deserialize, Debug, Clone)] pub struct UserPhoneAggregation { pub country_code: Option<i32>, pub number: Option<String>, } #[derive(Serialize, Deserialize, Debug, Clone)] pub struct UserSocialAggregation { pub kind: Option<String>, pub value: Option<String>, } #[derive(Serialize, Deserialize, Debug, Clone)] pub struct AccountSettingsAggregation { pub language: Option<String>, pub currency: Option<String>, } #[derive(Serialize, Deserialize, Debug, Clone)] pub struct CompanyAggregation { pub id: Option<String>, pub kind: Option<String>, pub domain: Option<String>, pub short_name: Option<String>, pub long_name: Option<String>, pub description: Option<String>, pub activities: Option<Vec<CompanyActivityAggregation>>, pub fiscal: Option<CompanyFiscalAggregation>, pub logo: Option<CompanyLogoAggregation>, pub address: Option<AddressAggregation>, pub website: Option<String>, pub socials: Option<Vec<CompanySocialAggregation>>, pub contacts: Option<Vec<CompanyContactAggregation>>, pub characteristics: Option<Vec<CompanyCharacteristicAggregation>>, } #[derive(Serialize, Deserialize, Debug, Clone)] pub struct CompanyActivityAggregation { pub activity: Option<String>, } #[derive(Serialize, Deserialize, Debug, Clone)] pub struct CompanyFiscalAggregation { pub corporate_name: Option<String>, pub legal_form: Option<String>, pub matriculation: Option<String>, pub tax_code: Option<String>, } #[derive(Serialize, Deserialize, Debug, Clone)] pub struct CompanyLogoAggregation { pub id: Option<String>, pub quality: Option<String>, pub kind: Option<String>, pub file_name: Option<String>, } #[derive(Serialize, Deserialize, Debug, Clone)] pub struct CompanySocialAggregation { pub kind: Option<String>, pub value: Option<String>, } #[derive(Serialize, Deserialize, Debug, Clone)] pub struct CompanyContactAggregation { pub level: Option<i32>, pub first_name: Option<String>, pub last_name: Option<String>, pub phone: Option<CompanyPhoneAggregation>, pub email: Option<String>, pub position: Option<String>, } #[derive(Serialize, Deserialize, Debug, Clone)] pub struct CompanyPhoneAggregation { pub country_code: Option<i32>, pub number: Option<String>, } #[derive(Serialize, Deserialize, Debug, Clone)] pub struct CompanyCharacteristicAggregation { pub kind: Option<String>, pub value: Option<String>, } #[derive(Debug, Display)] pub enum GetMyAccountError { #[display(fmt = "invalid_object_id")] InvalidObjectId, #[display(fmt = "user_not_found")] UserNotFound, Default(String), } impl ResponseError for GetMyAccountError { fn error_response(&self) -> HttpResponse { match self { GetMyAccountError::InvalidObjectId => { HttpResponse::NotAcceptable().body("invalid_object_id") } GetMyAccountError::UserNotFound => HttpResponse::Conflict().body("user_not_found"), GetMyAccountError::Default(error) => HttpResponse::BadRequest().body(error), } } }