Can update profile information
This commit is contained in:
		| @@ -2,10 +2,12 @@ | ||||
| //! | ||||
| //! The actions of the user on his account when he is authenticated. | ||||
|  | ||||
| use crate::constants::StaticConstraints; | ||||
| use crate::controllers::HttpResult; | ||||
| use crate::models::User; | ||||
| use crate::services::login_token_service::LoginToken; | ||||
| use crate::services::users_service; | ||||
| use actix_web::web::Json; | ||||
| use actix_web::HttpResponse; | ||||
|  | ||||
| #[derive(serde::Serialize)] | ||||
| @@ -28,3 +30,24 @@ pub async fn auth_info(token: LoginToken) -> HttpResult { | ||||
|             .unwrap_or_default(), | ||||
|     })) | ||||
| } | ||||
|  | ||||
| #[derive(serde::Deserialize)] | ||||
| pub struct ProfileUpdate { | ||||
|     name: String, | ||||
| } | ||||
|  | ||||
| /// Update profile information | ||||
| pub async fn update_profile(token: LoginToken, profile: Json<ProfileUpdate>) -> HttpResult { | ||||
|     if !StaticConstraints::default() | ||||
|         .user_name_len | ||||
|         .validate(&profile.name) | ||||
|     { | ||||
|         return Ok(HttpResponse::BadRequest().json("Nom invalide!")); | ||||
|     } | ||||
|  | ||||
|     let mut user = users_service::get_by_id(token.user_id).await?; | ||||
|     user.name = profile.0.name; | ||||
|     users_service::update_account(user).await?; | ||||
|  | ||||
|     Ok(HttpResponse::Accepted().finish()) | ||||
| } | ||||
|   | ||||
| @@ -54,6 +54,10 @@ async fn main() -> std::io::Result<()> { | ||||
|             .route("/auth/logout", web::get().to(auth_controller::logout)) | ||||
|             // User controller | ||||
|             .route("/user/info", web::get().to(user_controller::auth_info)) | ||||
|             .route( | ||||
|                 "/user/update_profile", | ||||
|                 web::post().to(user_controller::update_profile), | ||||
|             ) | ||||
|     }) | ||||
|     .bind(AppConfig::get().listen_address.as_str())? | ||||
|     .run() | ||||
|   | ||||
| @@ -138,6 +138,14 @@ pub async fn validate_account(user: &User) -> anyhow::Result<()> { | ||||
|         return Ok(()); | ||||
|     } | ||||
|  | ||||
|     db_connection::execute(|conn| { | ||||
|         Ok( | ||||
|             diesel::update(users::dsl::users.filter(users::dsl::id.eq(user.id))) | ||||
|                 .set((users::dsl::time_activate.eq(time() as i64),)) | ||||
|                 .execute(conn)?, | ||||
|         ) | ||||
|     })?; | ||||
|  | ||||
|     mail_service::send_mail( | ||||
|         &user.email, | ||||
|         "Activation de votre compte GeneIT", | ||||
| @@ -148,10 +156,20 @@ pub async fn validate_account(user: &User) -> anyhow::Result<()> { | ||||
|     ) | ||||
|     .await?; | ||||
|  | ||||
|     Ok(()) | ||||
| } | ||||
|  | ||||
| /// Update account information | ||||
| pub async fn update_account(user: User) -> anyhow::Result<()> { | ||||
|     db_connection::execute(|conn| { | ||||
|         Ok( | ||||
|             diesel::update(users::dsl::users.filter(users::dsl::id.eq(user.id))) | ||||
|                 .set((users::dsl::time_activate.eq(time() as i64),)) | ||||
|                 .set(( | ||||
|                     users::dsl::name.eq(user.name), | ||||
|                     users::dsl::admin.eq(user.admin), | ||||
|                     users::dsl::active.eq(user.active), | ||||
|                     users::dsl::email.eq(user.email), | ||||
|                 )) | ||||
|                 .execute(conn)?, | ||||
|         ) | ||||
|     })?; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user