/* hrtime - transgender survey website * Copyright (C) 2025 Olive * see LICENCE file for licensing information */ use std::path::Path; use diesel::insert_into; use diesel::RunQueryDsl; use rocket::form::{Form, FromForm}; use rocket::fs::NamedFile; use crate::Database; use crate::models; use crate::schema::*; #[derive(FromForm, Debug)] pub struct Primary { hrt: String, sex: bool, entry: models::Entry, gender: models::Gender, ethnicity: models::Ethnicity, meds: Vec, masc: models::Masculine, mascsex: models::MasculineSex, fem: models::Feminine, femsex: models::FeminineSex, } #[rocket::post("/", data="
")] pub async fn form( mut form: Form, conn: Database, ) -> Option { let entry = form.entry.clone(); let id = conn.run(|conn| insert_into(entry::table) .values(entry) .returning(entry::dsl::id) .get_result::>(conn) .unwrap()).await.unwrap(); form.gender.entry = id; form.ethnicity.entry = id; for med in form.meds.iter_mut() { med.entry = id; } let gender = form.gender.clone(); conn.run(|conn| insert_into(gender::table) .values(gender) .execute(conn) .unwrap()).await; let ethnicity = form.ethnicity.clone(); conn.run(|conn| insert_into(ethnicity::table) .values(ethnicity) .execute(conn) .unwrap()).await; let meds = form.meds.clone(); conn.run(|conn| insert_into(medication::table) .values(meds) .execute(conn) .unwrap()).await; if form.hrt == "Masculinizing" { form.masc.entry = id; let masc = form.masc.clone(); conn.run(|conn| insert_into(masculine::table) .values(masc) .execute(conn) .unwrap()).await; if form.sex { form.mascsex.entry = id; let mascsex = form.mascsex.clone(); conn.run(|conn| insert_into(masculine_sex::table) .values(mascsex) .execute(conn) .unwrap()).await; } } else { form.fem.entry = id; let fem = form.fem.clone(); conn.run(|conn| insert_into(feminine::table) .values(fem) .execute(conn) .unwrap()).await; if form.sex { form.femsex.entry = id; let femsex = form.femsex.clone(); conn.run(|conn| insert_into(feminine_sex::table) .values(femsex) .execute(conn) .unwrap()).await; } } return NamedFile::open(Path::new("/var/www/thanks.html")).await.ok(); }