55 lines
1.7 KiB
Rust
55 lines
1.7 KiB
Rust
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<LogbookWithBoatAndRowers>),
|
|
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(_)
|
|
)
|
|
}
|
|
}
|