diff --git a/src/routes/subscriptions.rs b/src/routes/subscriptions.rs index 7167657..25b3f99 100644 --- a/src/routes/subscriptions.rs +++ b/src/routes/subscriptions.rs @@ -1,5 +1,6 @@ use crate::domain::SubscriberEmail; use crate::domain::{NewSubscriber, SubscriberName}; +use crate::email_client::EmailClient; use crate::startup::AppState; use axum::extract::State; use axum::routing::post; @@ -30,6 +31,29 @@ impl TryFrom for NewSubscriber { } } +#[tracing::instrument( + name = "Send a confirmation email to a new subscriber", + skip(email_client, new_subscriber) +)] +pub async fn send_confirmation_email( + email_client: &EmailClient, + new_subscriber: NewSubscriber, +) -> Result<(), reqwest::Error> { + let confirmation_link = "https://my-api.com/subscriptions/confirm"; + let plain_body = format!( + "Welcome to our newsletter! Visit {} to confirm your subscription.", + confirmation_link + ); + let html_body = format!( + "Welcome to our newsletter!
\ + Click here to confirm your subscription.", + confirmation_link + ); + email_client + .send_email(new_subscriber.email, "Welcome!", &html_body, &plain_body) + .await +} + // TODO: remove request_id? #[tracing::instrument( name = "Adding a new subscriber", @@ -56,21 +80,7 @@ pub async fn subscribe( if insert_subscriber(&db_pool, &new_subscriber).await.is_err() { return (StatusCode::INTERNAL_SERVER_ERROR, "Something went wrong.").into_response(); } - let confirmation_link = "https://my-api.com/subscriptions/confirm"; - if email_client - .send_email( - new_subscriber.email, - "Welcome!", - &format!( - "Welcome to our newsletter!
\ - Click here to confirm your subscription.", - confirmation_link, - ), - &format!( - "Welcome to our newsletter! \nVisit {} to confirm your subscription.", - confirmation_link, - ), - ) + if send_confirmation_email(&email_client, new_subscriber) .await .is_err() {