38 lines
1.2 KiB
Rust
38 lines
1.2 KiB
Rust
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<Vec<Area>>,
|
|
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<PgPool>, path: web::Path<IdPath>) -> 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")
|
|
}
|