From 4ce25a81360dbc416c5f70589085f2be0ce04e65 Mon Sep 17 00:00:00 2001 From: Alphonse Paix Date: Mon, 25 Aug 2025 18:51:37 +0200 Subject: [PATCH] Fix send email request body --- src/domain/subscriber_email.rs | 2 +- src/email_client.rs | 17 +++++++++++++---- src/routes/subscriptions.rs | 9 +++++---- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/domain/subscriber_email.rs b/src/domain/subscriber_email.rs index bf34862..6aef234 100644 --- a/src/domain/subscriber_email.rs +++ b/src/domain/subscriber_email.rs @@ -62,6 +62,6 @@ mod tests { #[quickcheck_macros::quickcheck] fn valid_emails_are_parsed_successfully(valid_email: ValidEmailFixture) -> bool { - SubscriberEmail::parse(dbg!(valid_email.0)).is_ok() + SubscriberEmail::parse(valid_email.0).is_ok() } } diff --git a/src/email_client.rs b/src/email_client.rs index 0d46359..a4f181f 100644 --- a/src/email_client.rs +++ b/src/email_client.rs @@ -32,8 +32,12 @@ impl EmailClient { ) -> Result<(), reqwest::Error> { let url = self.base_url.join("v1/email").unwrap(); let request_body = SendEmailRequest { - from: self.sender.as_ref(), - to: vec![recipient.as_ref()], + from: EmailField { + email: self.sender.as_ref(), + }, + to: vec![EmailField { + email: recipient.as_ref(), + }], subject, text: text_content, html: html_content, @@ -56,13 +60,18 @@ impl EmailClient { #[derive(serde::Serialize)] struct SendEmailRequest<'a> { - from: &'a str, - to: Vec<&'a str>, + from: EmailField<'a>, + to: Vec>, subject: &'a str, text: &'a str, html: &'a str, } +#[derive(serde::Serialize)] +struct EmailField<'a> { + email: &'a str, +} + #[cfg(test)] mod tests { use std::time::Duration; diff --git a/src/routes/subscriptions.rs b/src/routes/subscriptions.rs index 354b795..d07413b 100644 --- a/src/routes/subscriptions.rs +++ b/src/routes/subscriptions.rs @@ -20,7 +20,7 @@ fn generate_subscription_token() -> String { #[tracing::instrument( name = "Adding a new subscriber", - skip(connection_pool, form, email_client), + skip(connection_pool, email_client, base_url, form), fields( subscriber_email = %form.email, subscriber_name = %form.name @@ -50,18 +50,19 @@ pub async fn subscribe( { return StatusCode::INTERNAL_SERVER_ERROR; } - if send_confirmation_email( + if let Err(e) = send_confirmation_email( &email_client, &new_subscriber, &base_url, &subscription_token, ) .await - .is_err() { + tracing::error!("Could not send confirmation email: {:?}", e); return StatusCode::INTERNAL_SERVER_ERROR; } - if transaction.commit().await.is_err() { + if let Err(e) = transaction.commit().await { + tracing::error!("Failed to commit transaction: {:?}", e); return StatusCode::INTERNAL_SERVER_ERROR; } StatusCode::OK