use actix_identity::Identity; use actix_web::{web, HttpResponse, Responder}; use askama::Template; use askama_actix::TemplateToResponse; use sqlx::PgPool; use crate::{endpoints::IdPath, models::{Area, Role, User}}; #[derive(Template)] #[template(path = "user/edit.html")] pub struct EditUserTemplate { user: User, areas: Option>, email: String, name: String, role: u8, function: u8, area_id: i32 } #[actix_web::get("/users/edit/{id}")] pub async fn get_edit(user: Identity, pool: web::Data, path: web::Path) -> impl Responder { let current_user = User::read_by_id(pool.get_ref(), user.id().unwrap().parse().unwrap()).await.unwrap(); let mut areas = None; if current_user.role == Role::Admin { areas = Some(Area::read_all(pool.get_ref()).await.unwrap()); } if let Ok(user_in_db) = User::read_by_id(pool.get_ref(), path.id).await { let template = EditUserTemplate { user: current_user, areas, email: user_in_db.email, name: user_in_db.name, role: user_in_db.role as u8, function: user_in_db.function as u8, area_id: user_in_db.area_id }; return template.to_response(); } HttpResponse::BadRequest().body("Fehler beim Bearbeiten des Nutzers") }