making health forms more asynchronous
This commit is contained in:
		
							parent
							
								
									a9d2a043a6
								
							
						
					
					
						commit
						19c6ec1ff7
					
				
					 1 changed files with 18 additions and 12 deletions
				
			
		| 
						 | 
				
			
			@ -2,7 +2,11 @@ use std::{collections::HashMap, fs};
 | 
			
		|||
 | 
			
		||||
use actix_multipart::form::{tempfile::TempFile, text::Text, MultipartForm};
 | 
			
		||||
use actix_web::{post, HttpResponse};
 | 
			
		||||
use color_eyre::{eyre::eyre, Result};
 | 
			
		||||
use color_eyre::{
 | 
			
		||||
    eyre::{eyre, Context},
 | 
			
		||||
    Result,
 | 
			
		||||
};
 | 
			
		||||
use futures::FutureExt;
 | 
			
		||||
use lettre::{
 | 
			
		||||
    message::{header::ContentType, Attachment, MultiPart, SinglePart},
 | 
			
		||||
    Message,
 | 
			
		||||
| 
						 | 
				
			
			@ -110,7 +114,7 @@ impl From<&HealthForm> for HashMap<i32, String> {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
impl HealthForm {
 | 
			
		||||
    async fn build_email(&self) -> Markup {
 | 
			
		||||
    fn build_email(&self) -> Markup {
 | 
			
		||||
        html! {
 | 
			
		||||
            (DOCTYPE)
 | 
			
		||||
                meta charset="utf-8";
 | 
			
		||||
| 
						 | 
				
			
			@ -312,12 +316,12 @@ impl HealthForm {
 | 
			
		|||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    async fn send_email(&mut self) -> Result<()> {
 | 
			
		||||
    fn send_email(&mut self) -> Result<Message> {
 | 
			
		||||
        let first = self.first_name.clone();
 | 
			
		||||
        let last = self.last_name.clone();
 | 
			
		||||
        let email_subject = format!("{} {} filled out a health form!", first, last);
 | 
			
		||||
        info!("{first} {last} filled out a health form!");
 | 
			
		||||
        let email = self.build_email().await;
 | 
			
		||||
        let email = self.build_email();
 | 
			
		||||
        let temp_file = self.get_temp_file();
 | 
			
		||||
        let multi = if let Some((file, path, content_type)) = temp_file {
 | 
			
		||||
            let filebody = fs::read(path);
 | 
			
		||||
| 
						 | 
				
			
			@ -332,7 +336,7 @@ impl HealthForm {
 | 
			
		|||
            MultiPart::alternative_plain_html(String::from("Testing"), email.into_string())
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        if let Ok(m) = Message::builder()
 | 
			
		||||
        Message::builder()
 | 
			
		||||
            .from(
 | 
			
		||||
                "TFC ADMIN <no-reply@mail.tfcconnection.org>"
 | 
			
		||||
                    .parse()
 | 
			
		||||
| 
						 | 
				
			
			@ -342,19 +346,21 @@ impl HealthForm {
 | 
			
		|||
            // .to("Ethan Rose <ethan@tfcconnection.org>".parse().unwrap())
 | 
			
		||||
            .subject(email_subject)
 | 
			
		||||
            .multipart(multi)
 | 
			
		||||
        {
 | 
			
		||||
            send_email(m).await
 | 
			
		||||
        } else {
 | 
			
		||||
            Err(eyre!("Email incorrect"))
 | 
			
		||||
        }
 | 
			
		||||
            .wrap_err("Email incorrect")
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[post("/api/health-form")]
 | 
			
		||||
pub async fn health_form(MultipartForm(mut form): MultipartForm<HealthForm>) -> HttpResponse {
 | 
			
		||||
    info!("Starting health form work: {:?}", form);
 | 
			
		||||
    match form.send_email().await {
 | 
			
		||||
        Ok(_) => info!("Successfully sent email health form"),
 | 
			
		||||
    match form.send_email() {
 | 
			
		||||
        Ok(m) => {
 | 
			
		||||
            actix_rt::spawn(send_email(m).map(|r| match r {
 | 
			
		||||
                Ok(_) => info!("Email sent successfully"),
 | 
			
		||||
                Err(e) => error!("There was an erroring sending form to nextcloud: {e}"),
 | 
			
		||||
            }));
 | 
			
		||||
            info!("Successfully sent email health form")
 | 
			
		||||
        }
 | 
			
		||||
        Err(e) => error!("There was an error sending email: {e}"),
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue