feat: red test implementation of email confirm

This commit is contained in:
Sandro Eiler 2024-04-18 14:31:06 +02:00
parent 7eebcb12a2
commit 8045eb979e
8 changed files with 75 additions and 9 deletions

View file

@ -33,13 +33,14 @@ impl TryFrom<FormData> for NewSubscriber {
#[tracing::instrument(
name = "Send a confirmation email to a new subscriber",
skip(email_client, new_subscriber)
skip(email_client, new_subscriber, base_url)
)]
pub async fn send_confirmation_email(
email_client: &EmailClient,
new_subscriber: NewSubscriber,
base_url: &str,
) -> Result<(), reqwest::Error> {
let confirmation_link = "https://my-api.com/subscriptions/confirm";
let confirmation_link = format!("{}/subscriptions/confirm?subscription_token=mytoken", base_url);
let plain_body = format!(
"Welcome to our newsletter! Visit {} to confirm your subscription.",
confirmation_link
@ -57,7 +58,7 @@ pub async fn send_confirmation_email(
// TODO: remove request_id?
#[tracing::instrument(
name = "Adding a new subscriber",
skip(form, db_pool, email_client),
skip(form, db_pool, email_client, base_url),
fields(
request_id = %Uuid::new_v4(),
subscriber_email = %form.email,
@ -68,6 +69,7 @@ pub async fn subscribe(
State(AppState {
db_pool,
email_client,
base_url,
}): State<AppState>,
Form(form): Form<FormData>,
) -> Response {
@ -80,7 +82,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();
}
if send_confirmation_email(&email_client, new_subscriber)
if send_confirmation_email(&email_client, new_subscriber, &base_url.0)
.await
.is_err()
{