diff --git a/src/configuration.rs b/src/configuration.rs index 4f197dc..a496a3c 100644 --- a/src/configuration.rs +++ b/src/configuration.rs @@ -19,6 +19,12 @@ pub struct Settings { } #[derive(serde::Deserialize, Clone)] +/// The email client settings. +/// +/// * `base_url`: The base URL for the email client +/// * `sender_email`: The email address of the sender +/// * `authorization_token`: The authorization token +/// * `timeout_milliseconds`: The timeout in milliseconds pub struct EmailClientSettings { pub base_url: String, pub sender_email: String, @@ -31,6 +37,7 @@ pub struct EmailClientSettings { /// /// * `port`: The port to listen on /// * `host`: The host address to listen on +/// * `base_url`: The base URL for the application pub struct ApplicationSettings { #[serde(deserialize_with = "deserialize_number_from_string")] pub port: u16, diff --git a/src/routes/subscriptions_confirm.rs b/src/routes/subscriptions_confirm.rs index ca5ed06..613ee13 100644 --- a/src/routes/subscriptions_confirm.rs +++ b/src/routes/subscriptions_confirm.rs @@ -12,12 +12,19 @@ pub struct Parameters { subscription_token: String, } -// #[tracing::instrument(name = "Confirm a pending subscriber", skip(_parameters))] +#[tracing::instrument(name = "Confirm a pending subscriber", skip(_parameters))] +/// Confirm a pending subscriber. +/// # Parameters +/// - subscription_token: The subscription token. +/// # Returns +/// - 200 OK: The subscriber has been confirmed. +/// - 400 Bad Request: The subscription token is missing. pub async fn confirm(Query(_parameters): Query) -> Response { println!("subscription_token: {}", _parameters.subscription_token); (StatusCode::OK,).into_response() } +/// The routes for subscription confirmation. pub fn routes_subscriptions_confirm() -> Router { Router::new().route("/subscriptions/confirm", get(confirm)) } diff --git a/src/startup.rs b/src/startup.rs index 93397c0..dde2937 100644 --- a/src/startup.rs +++ b/src/startup.rs @@ -63,15 +63,13 @@ impl Application { ); let listener = TcpListener::bind(&address).await?; - // FIXME: don't clone if not necessary let state = AppState { - db_pool: connection_pool.clone(), - email_client: email_client.clone(), + db_pool: connection_pool, + email_client, base_url: ApplicationBaseUrl(configuration.application.base_url), }; let app = Router::new() - // TODO: check whether state cloning is what we want .merge(crate::routes::routes_subscriptions()) .merge(crate::routes::routes_subscriptions_confirm()) .with_state(state)