Compare commits
	
		
			7 Commits
		
	
	
		
			465a42acac
			...
			main
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 1add5c2a2a | |||
| 567f31dd3d | |||
| eec485dced | |||
| b48b689aeb | |||
| 9f57cbaa71 | |||
| 
						 | 
					284a853344 | ||
| 328a8e3e35 | 
							
								
								
									
										104
									
								
								src/tera/ergo.rs
									
									
									
									
									
								
							
							
						
						
									
										104
									
								
								src/tera/ergo.rs
									
									
									
									
									
								
							@@ -1,6 +1,6 @@
 | 
			
		||||
use std::env;
 | 
			
		||||
 | 
			
		||||
use chrono::Utc;
 | 
			
		||||
use chrono::{Datelike, Utc};
 | 
			
		||||
use rocket::{
 | 
			
		||||
    form::Form,
 | 
			
		||||
    fs::TempFile,
 | 
			
		||||
@@ -17,6 +17,7 @@ use sqlx::SqlitePool;
 | 
			
		||||
use tera::Context;
 | 
			
		||||
 | 
			
		||||
use crate::model::{
 | 
			
		||||
    activity::ActivityBuilder,
 | 
			
		||||
    log::Log,
 | 
			
		||||
    notification::Notification,
 | 
			
		||||
    role::Role,
 | 
			
		||||
@@ -145,47 +146,61 @@ pub struct UserAdd {
 | 
			
		||||
    sex: String,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//#[post("/set-data", data = "<data>")]
 | 
			
		||||
//async fn new_user(db: &State<SqlitePool>, data: Form<UserAdd>, user: User) -> Flash<Redirect> {
 | 
			
		||||
//    if user.has_role(db, "ergo").await {
 | 
			
		||||
//        return Flash::error(Redirect::to("/ergo"), "Du hast deine Daten schon eingegeben. Wenn du sie updaten willst, melde dich bitte bei it@rudernlinz.at");
 | 
			
		||||
//    }
 | 
			
		||||
//
 | 
			
		||||
//    // check data
 | 
			
		||||
//    if data.birthyear < 1900 || data.birthyear > chrono::Utc::now().year() - 5 {
 | 
			
		||||
//        return Flash::error(Redirect::to("/ergo"), "Bitte überprüfe dein Geburtsjahr...");
 | 
			
		||||
//    }
 | 
			
		||||
//    if data.weight < 20 || data.weight > 200 {
 | 
			
		||||
//        return Flash::error(Redirect::to("/ergo"), "Bitte überprüfe dein Gewicht...");
 | 
			
		||||
//    }
 | 
			
		||||
//    if &data.sex != "f" && &data.sex != "m" {
 | 
			
		||||
//        return Flash::error(Redirect::to("/ergo"), "Bitte überprüfe dein Geschlecht...");
 | 
			
		||||
//    }
 | 
			
		||||
//
 | 
			
		||||
//    // set data
 | 
			
		||||
//    user.update_ergo(db, data.birthyear, data.weight, &data.sex)
 | 
			
		||||
//        .await;
 | 
			
		||||
//
 | 
			
		||||
//    // inform all other `ergo` users
 | 
			
		||||
//    let ergo = Role::find_by_name(db, "ergo").await.unwrap();
 | 
			
		||||
//    Notification::create_for_role(
 | 
			
		||||
//        db,
 | 
			
		||||
//        &ergo,
 | 
			
		||||
//        &format!("{} nimmt heuer an der Ergochallenge teil 💪", user.name),
 | 
			
		||||
//        "Ergo Challenge",
 | 
			
		||||
//        None,
 | 
			
		||||
//        None,
 | 
			
		||||
//    )
 | 
			
		||||
//    .await;
 | 
			
		||||
//
 | 
			
		||||
//    // add to `ergo`  group
 | 
			
		||||
//    user.add_role(db, &ergo).await.unwrap();
 | 
			
		||||
//
 | 
			
		||||
//    Flash::success(
 | 
			
		||||
//        Redirect::to("/ergo"),
 | 
			
		||||
//        "Du hast deine Daten erfolgreich eingegeben. Viel Spaß beim Schwitzen :-)",
 | 
			
		||||
//    )
 | 
			
		||||
//}
 | 
			
		||||
#[post("/set-data", data = "<data>")]
 | 
			
		||||
async fn new_user(db: &State<SqlitePool>, data: Form<UserAdd>, user: User) -> Flash<Redirect> {
 | 
			
		||||
    if user.has_role(db, "ergo").await {
 | 
			
		||||
        return Flash::error(Redirect::to("/ergo"), "Du hast deine Daten schon eingegeben. Wenn du sie updaten willst, melde dich bitte bei info@rudernlinz.at");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // check data
 | 
			
		||||
    if data.birthyear < 1900 || data.birthyear > chrono::Utc::now().year() - 5 {
 | 
			
		||||
        return Flash::error(Redirect::to("/ergo"), "Bitte überprüfe dein Geburtsjahr...");
 | 
			
		||||
    }
 | 
			
		||||
    if data.weight < 20 || data.weight > 200 {
 | 
			
		||||
        return Flash::error(Redirect::to("/ergo"), "Bitte überprüfe dein Gewicht...");
 | 
			
		||||
    }
 | 
			
		||||
    if &data.sex != "f" && &data.sex != "m" {
 | 
			
		||||
        return Flash::error(Redirect::to("/ergo"), "Bitte überprüfe dein Geschlecht...");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // set data
 | 
			
		||||
    user.update_ergo(db, data.birthyear, data.weight, &data.sex)
 | 
			
		||||
        .await;
 | 
			
		||||
 | 
			
		||||
    // inform all other `ergo` users
 | 
			
		||||
    let ergo = Role::find_by_name(db, "ergo").await.unwrap();
 | 
			
		||||
    Notification::create_for_role(
 | 
			
		||||
        db,
 | 
			
		||||
        &ergo,
 | 
			
		||||
        &format!("{} nimmt heuer an der Ergochallenge teil 💪", user.name),
 | 
			
		||||
        "Ergo Challenge",
 | 
			
		||||
        None,
 | 
			
		||||
        None,
 | 
			
		||||
    )
 | 
			
		||||
    .await;
 | 
			
		||||
 | 
			
		||||
    // add to `ergo`  group
 | 
			
		||||
    sqlx::query!(
 | 
			
		||||
        "INSERT INTO user_role(user_id, role_id) VALUES (?, ?)",
 | 
			
		||||
        user.id,
 | 
			
		||||
        ergo.id
 | 
			
		||||
    )
 | 
			
		||||
    .execute(db.inner())
 | 
			
		||||
    .await
 | 
			
		||||
    .unwrap();
 | 
			
		||||
 | 
			
		||||
    ActivityBuilder::new(&format!(
 | 
			
		||||
        "{user} nimmt an der Ergo-Challenge teil und hat gerade die Daten eingegeben."
 | 
			
		||||
    ))
 | 
			
		||||
    .user(&user)
 | 
			
		||||
    .save(db)
 | 
			
		||||
    .await;
 | 
			
		||||
 | 
			
		||||
    Flash::success(
 | 
			
		||||
        Redirect::to("/ergo"),
 | 
			
		||||
        "Du hast deine Daten erfolgreich eingegeben. Viel Spaß beim Schwitzen :-)",
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(FromForm, Debug)]
 | 
			
		||||
pub struct ErgoToAdd<'a> {
 | 
			
		||||
@@ -358,10 +373,7 @@ async fn new_dozen(
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub fn routes() -> Vec<Route> {
 | 
			
		||||
    routes![
 | 
			
		||||
        index, new_thirty, new_dozen, send, reset, update,
 | 
			
		||||
        // new_user
 | 
			
		||||
    ]
 | 
			
		||||
    routes![index, new_thirty, new_dozen, send, reset, update, new_user]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[cfg(test)]
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@
 | 
			
		||||
                               class="link-primary">Überblick der Challenges</a>
 | 
			
		||||
                        </li>
 | 
			
		||||
                        <li class="py-1">
 | 
			
		||||
                            Eintragung ist jederzeit möglich, wenn du sie auch an die offizielle Liste schicken willst, kannst du das <a href="https://data.ergochallenge.at/" target="_blank">hier</a> machen
 | 
			
		||||
                            Eintragung ist jederzeit möglich, wenn du sie auch an die offizielle Liste schicken willst, kannst du das <a href="https://data.ergochallenge.at/" target="_blank" style="text-decoration: underline">hier</a> machen
 | 
			
		||||
                            <li class="py-1">
 | 
			
		||||
                                <a href="https://data.ergochallenge.at"
 | 
			
		||||
                                   target="_blank"
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user