refactor: clean up subscription
This commit is contained in:
parent
90fc6abf19
commit
9a31080707
1 changed files with 25 additions and 15 deletions
|
|
@ -1,5 +1,6 @@
|
||||||
use crate::domain::SubscriberEmail;
|
use crate::domain::SubscriberEmail;
|
||||||
use crate::domain::{NewSubscriber, SubscriberName};
|
use crate::domain::{NewSubscriber, SubscriberName};
|
||||||
|
use crate::email_client::EmailClient;
|
||||||
use crate::startup::AppState;
|
use crate::startup::AppState;
|
||||||
use axum::extract::State;
|
use axum::extract::State;
|
||||||
use axum::routing::post;
|
use axum::routing::post;
|
||||||
|
|
@ -30,6 +31,29 @@ impl TryFrom<FormData> 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!<br />\
|
||||||
|
Click <a href=\"{}\">here</a> to confirm your subscription.",
|
||||||
|
confirmation_link
|
||||||
|
);
|
||||||
|
email_client
|
||||||
|
.send_email(new_subscriber.email, "Welcome!", &html_body, &plain_body)
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: remove request_id?
|
// TODO: remove request_id?
|
||||||
#[tracing::instrument(
|
#[tracing::instrument(
|
||||||
name = "Adding a new subscriber",
|
name = "Adding a new subscriber",
|
||||||
|
|
@ -56,21 +80,7 @@ pub async fn subscribe(
|
||||||
if insert_subscriber(&db_pool, &new_subscriber).await.is_err() {
|
if insert_subscriber(&db_pool, &new_subscriber).await.is_err() {
|
||||||
return (StatusCode::INTERNAL_SERVER_ERROR, "Something went wrong.").into_response();
|
return (StatusCode::INTERNAL_SERVER_ERROR, "Something went wrong.").into_response();
|
||||||
}
|
}
|
||||||
let confirmation_link = "https://my-api.com/subscriptions/confirm";
|
if send_confirmation_email(&email_client, new_subscriber)
|
||||||
if email_client
|
|
||||||
.send_email(
|
|
||||||
new_subscriber.email,
|
|
||||||
"Welcome!",
|
|
||||||
&format!(
|
|
||||||
"Welcome to our newsletter!<br />\
|
|
||||||
Click <a href=\"{}\">here</a> to confirm your subscription.",
|
|
||||||
confirmation_link,
|
|
||||||
),
|
|
||||||
&format!(
|
|
||||||
"Welcome to our newsletter! \nVisit {} to confirm your subscription.",
|
|
||||||
confirmation_link,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
.await
|
.await
|
||||||
.is_err()
|
.is_err()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue