use super::ScheckbuchUser; use crate::model::{ logbook::{Logbook, LogbookWithBoatAndRowers}, user::User, }; use serde::{Deserialize, Serialize}; use sqlx::SqlitePool; #[derive(Serialize, Deserialize)] pub(crate) enum Member { SchnupperInterest(User), Schnupperant(User), Scheckbuch(Vec), Regular(User), Foerdernd(User), Unterstuetzend(User), } impl Member { pub(crate) async fn from(db: &SqlitePool, user: User) -> Self { if ScheckbuchUser::new(db, &user).await.is_some() { Self::Scheckbuch(Logbook::completed_with_user(db, &user).await) } else if user.has_role(db, "schnupper-interessierte").await { Self::SchnupperInterest(user) } else if user.has_role(db, "schnupperant").await { Self::Schnupperant(user) } else if user.has_role(db, "Donau Linz").await { Self::Regular(user) } else if user.has_role(db, "Förderndes Mitglied").await { Self::Foerdernd(user) } else if user.has_role(db, "Unterstützend").await { Self::Unterstuetzend(user) } else { panic!("User {user} has no membership_type!!"); } } pub(crate) fn is_club_member(&self) -> bool { matches!( self, Member::Regular(_) | Member::Foerdernd(_) | Member::Unterstuetzend(_) ) } pub(crate) fn supposed_to_pay(&self) -> bool { matches!( self, Member::Schnupperant(_) | Member::Scheckbuch(_) | Member::Regular(_) | Member::Foerdernd(_) | Member::Unterstuetzend(_) ) } }