delete large user-update-function 🎉 Fixes #958
This commit is contained in:
parent
e6895c8cf1
commit
d50501b362
@ -8,14 +8,12 @@ use rocket::{
|
|||||||
http::{Cookie, Status},
|
http::{Cookie, Status},
|
||||||
request::{FromRequest, Outcome},
|
request::{FromRequest, Outcome},
|
||||||
time::{Duration, OffsetDateTime},
|
time::{Duration, OffsetDateTime},
|
||||||
tokio::io::AsyncReadExt,
|
|
||||||
Request,
|
Request,
|
||||||
};
|
};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use sqlx::{FromRow, Sqlite, SqlitePool, Transaction};
|
use sqlx::{FromRow, Sqlite, SqlitePool, Transaction};
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
family::Family,
|
|
||||||
log::Log,
|
log::Log,
|
||||||
logbook::Logbook,
|
logbook::Logbook,
|
||||||
mail::Mail,
|
mail::Mail,
|
||||||
@ -26,7 +24,7 @@ use super::{
|
|||||||
tripdetails::TripDetails,
|
tripdetails::TripDetails,
|
||||||
Day,
|
Day,
|
||||||
};
|
};
|
||||||
use crate::{tera::admin::user::UserEditForm, AMOUNT_DAYS_TO_SHOW_TRIPS_AHEAD};
|
use crate::AMOUNT_DAYS_TO_SHOW_TRIPS_AHEAD;
|
||||||
use scheckbuch::ScheckbuchUser;
|
use scheckbuch::ScheckbuchUser;
|
||||||
|
|
||||||
mod basic;
|
mod basic;
|
||||||
@ -483,68 +481,6 @@ ORDER BY last_access DESC
|
|||||||
.unwrap(); //Okay, because we can only create a User of a valid id
|
.unwrap(); //Okay, because we can only create a User of a valid id
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn update(&self, db: &SqlitePool, data: UserEditForm<'_>) -> Result<(), String> {
|
|
||||||
let mut db = db.begin().await.map_err(|e| e.to_string())?;
|
|
||||||
|
|
||||||
let mut family_id = data.family_id;
|
|
||||||
|
|
||||||
if family_id.is_some_and(|x| x == -1) {
|
|
||||||
family_id = Some(Family::insert_tx(&mut db).await)
|
|
||||||
}
|
|
||||||
|
|
||||||
if !self.has_membership_pdf_tx(&mut db).await {
|
|
||||||
if let Some(membership_pdf) = data.membership_pdf {
|
|
||||||
let mut stream = membership_pdf.open().await.unwrap();
|
|
||||||
let mut buffer = Vec::new();
|
|
||||||
stream.read_to_end(&mut buffer).await.unwrap();
|
|
||||||
sqlx::query!(
|
|
||||||
"UPDATE user SET membership_pdf = ? where id = ?",
|
|
||||||
buffer,
|
|
||||||
self.id
|
|
||||||
)
|
|
||||||
.execute(db.deref_mut())
|
|
||||||
.await
|
|
||||||
.unwrap(); //Okay, because we can only create a User of a valid id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sqlx::query!(
|
|
||||||
"UPDATE user SET dob = ?, weight = ?, sex = ?, member_since_date=?, birthdate=?, mail=?, nickname=?, notes=?, phone=?, address=?, family_id = ? where id = ?",
|
|
||||||
data.dob,
|
|
||||||
data.weight,
|
|
||||||
data.sex,
|
|
||||||
data.member_since_date,
|
|
||||||
data.birthdate,
|
|
||||||
data.mail,
|
|
||||||
data.nickname,
|
|
||||||
data.notes,
|
|
||||||
data.phone,
|
|
||||||
data.address,
|
|
||||||
family_id,
|
|
||||||
self.id
|
|
||||||
)
|
|
||||||
.execute(db.deref_mut())
|
|
||||||
.await
|
|
||||||
.unwrap(); //Okay, because we can only create a User of a valid id
|
|
||||||
|
|
||||||
// handle roles
|
|
||||||
sqlx::query!("DELETE FROM user_role WHERE user_id = ?", self.id)
|
|
||||||
.execute(db.deref_mut())
|
|
||||||
.await
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
for role_id in data.roles.into_keys() {
|
|
||||||
let role = Role::find_by_id_tx(&mut db, role_id.parse::<i32>().unwrap())
|
|
||||||
.await
|
|
||||||
.unwrap();
|
|
||||||
self.add_role_tx(&mut db, &role).await?;
|
|
||||||
}
|
|
||||||
|
|
||||||
db.commit().await.map_err(|e| e.to_string())?;
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn send_end_mail_scheckbuch(
|
async fn send_end_mail_scheckbuch(
|
||||||
&self,
|
&self,
|
||||||
db: &mut Transaction<'_, Sqlite>,
|
db: &mut Transaction<'_, Sqlite>,
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
use std::collections::HashMap;
|
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
model::{
|
model::{
|
||||||
family::Family,
|
family::Family,
|
||||||
@ -301,49 +299,6 @@ async fn delete(db: &State<SqlitePool>, admin: ManageUserUser, user: i32) -> Fla
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(FromForm, Debug)]
|
|
||||||
pub struct UserEditForm<'a> {
|
|
||||||
pub(crate) id: i32,
|
|
||||||
pub(crate) dob: Option<String>,
|
|
||||||
pub(crate) weight: Option<String>,
|
|
||||||
pub(crate) sex: Option<String>,
|
|
||||||
pub(crate) roles: HashMap<String, String>,
|
|
||||||
pub(crate) member_since_date: Option<String>,
|
|
||||||
pub(crate) birthdate: Option<String>,
|
|
||||||
pub(crate) mail: Option<String>,
|
|
||||||
pub(crate) nickname: Option<String>,
|
|
||||||
pub(crate) notes: Option<String>,
|
|
||||||
pub(crate) phone: Option<String>,
|
|
||||||
pub(crate) address: Option<String>,
|
|
||||||
pub(crate) family_id: Option<i64>,
|
|
||||||
pub(crate) membership_pdf: Option<TempFile<'a>>,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[post("/user", data = "<data>", format = "multipart/form-data")]
|
|
||||||
async fn update(
|
|
||||||
db: &State<SqlitePool>,
|
|
||||||
data: Form<UserEditForm<'_>>,
|
|
||||||
admin: ManageUserUser,
|
|
||||||
) -> Flash<Redirect> {
|
|
||||||
let user = User::find_by_id(db, data.id).await;
|
|
||||||
Log::create(
|
|
||||||
db,
|
|
||||||
format!("{} updated user from {user:?} to {data:?}", admin.user.name),
|
|
||||||
)
|
|
||||||
.await;
|
|
||||||
let Some(user) = user else {
|
|
||||||
return Flash::error(
|
|
||||||
Redirect::to("/admin/user"),
|
|
||||||
format!("User with ID {} does not exist!", data.id),
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
match user.update(db, data.into_inner()).await {
|
|
||||||
Ok(_) => Flash::success(Redirect::to("/admin/user"), "Successfully updated user"),
|
|
||||||
Err(e) => Flash::error(Redirect::to("/admin/user"), e),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(FromForm, Debug)]
|
#[derive(FromForm, Debug)]
|
||||||
pub struct MailUpdateForm {
|
pub struct MailUpdateForm {
|
||||||
mail: String,
|
mail: String,
|
||||||
@ -712,11 +667,11 @@ async fn create(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(FromForm, Debug)]
|
//#[derive(FromForm, Debug)]
|
||||||
struct UserAddScheckbuchForm<'r> {
|
//struct UserAddScheckbuchForm<'r> {
|
||||||
name: &'r str,
|
// name: &'r str,
|
||||||
mail: &'r str,
|
// mail: &'r str,
|
||||||
}
|
//}
|
||||||
|
|
||||||
//#[post("/user/new/scheckbuch", data = "<data>")]
|
//#[post("/user/new/scheckbuch", data = "<data>")]
|
||||||
//async fn create_scheckbuch(
|
//async fn create_scheckbuch(
|
||||||
@ -778,7 +733,7 @@ pub struct SchnupperantToRegularForm<'a> {
|
|||||||
#[post("/user/<id>/schnupperant-to-regular", data = "<data>")]
|
#[post("/user/<id>/schnupperant-to-regular", data = "<data>")]
|
||||||
async fn schnupperant_to_regular(
|
async fn schnupperant_to_regular(
|
||||||
db: &State<SqlitePool>,
|
db: &State<SqlitePool>,
|
||||||
data: Form<ScheckToRegularForm<'_>>,
|
data: Form<SchnupperantToRegularForm<'_>>,
|
||||||
admin: ManageUserUser,
|
admin: ManageUserUser,
|
||||||
config: &State<Config>,
|
config: &State<Config>,
|
||||||
id: i32,
|
id: i32,
|
||||||
@ -1174,7 +1129,6 @@ pub fn routes() -> Vec<Route> {
|
|||||||
index_admin,
|
index_admin,
|
||||||
view,
|
view,
|
||||||
resetpw,
|
resetpw,
|
||||||
update,
|
|
||||||
create,
|
create,
|
||||||
//create_scheckbuch,
|
//create_scheckbuch,
|
||||||
delete,
|
delete,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user