allow moving scheckbuch -> regular
All checks were successful
CI/CD Pipeline / test (push) Successful in 15m20s
CI/CD Pipeline / deploy-staging (push) Has been skipped
CI/CD Pipeline / deploy-main (push) Has been skipped

This commit is contained in:
2025-05-03 12:27:02 +02:00
parent c47b1988b2
commit 9aab07422d
8 changed files with 228 additions and 127 deletions

View File

@ -1,8 +1,7 @@
use super::member::Member;
use super::regular::RegularUser;
use super::{ManageUserUser, User};
use crate::model::role::Role;
use crate::model::user::LoginError;
use crate::tera::admin::user::ScheckToRegularForm;
use crate::NonEmptyString;
use crate::{
model::{mail::Mail, notification::Notification},
special_user, SCHECKBUCH,
@ -10,13 +9,7 @@ use crate::{
use chrono::NaiveDate;
use rocket::async_trait;
use rocket::fs::TempFile;
use rocket::http::Status;
use rocket::request;
use rocket::request::FromRequest;
use rocket::request::Outcome;
use rocket::Request;
use sqlx::SqlitePool;
use std::ops::Deref;
special_user!(ScheckbuchUser, +"scheckbuch");
@ -24,11 +17,12 @@ impl ScheckbuchUser {
pub(crate) async fn convert_to_regular_user(
self,
db: &SqlitePool,
smtp_pw: &str,
changed_by: &ManageUserUser,
member_since: &NaiveDate,
birthdate: &NaiveDate,
phone: &str,
address: &str,
phone: NonEmptyString,
address: NonEmptyString,
membership_pdf: &TempFile<'_>,
) -> Result<(), String> {
// Set data
@ -36,9 +30,9 @@ impl ScheckbuchUser {
self.user
.update_member_since(db, changed_by, member_since)
.await;
self.user.update_phone(db, changed_by, phone).await?;
self.user.update_address(db, changed_by, address).await?;
self.user.update_address(db, changed_by, address).await?;
self.user.update_phone(db, changed_by, &phone).await;
self.user.update_address(db, changed_by, &address).await;
self.user
.add_membership_pdf(db, changed_by, membership_pdf)
.await?;
@ -50,25 +44,13 @@ impl ScheckbuchUser {
self.user.add_role(db, changed_by, &regular).await?;
// Notify
todo!() // Continue here
let regular = RegularUser::new(db, &self.user).await.unwrap();
regular.notify(db, smtp_pw).await?;
Ok(())
}
//async fn from(user: User, db: &SqlitePool, mail: &str, smtp_pw: &str) -> Result<(), String> {
// if user.has_role(db, "scheckbuch").await {
// return Err("User is already a scheckbuch".into());
// }
// // TODO: do we allow e.g. DonauLinz to scheckbuch?
// let scheckbuch = Role::find_by_name(db, "scheckbuch").await.unwrap();
// user.add_role(db, &scheckbuch).await.unwrap();
// // TODO: remove all other `membership_type` roles
// let new_user = Self::new(db, &user).await.unwrap();
// new_user.notify(db, mail, smtp_pw).await
//}
// TODO: make private
pub(crate) async fn notify(
&self,
db: &SqlitePool,