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