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