brass/src/endpoints/user/get_edit.rs

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")
}