use axum::{extract::State, response::IntoResponse}; use tower_sessions::Session; use crate::{ auth::AdminUser, db, error::Result, helpers::get_csrf_token, templates::AdminSignupsTemplate, types::AdminSignupRow, AppState, }; /// Admin page listing email signups from the landing page. #[tracing::instrument(skip_all, name = "admin::admin_signups")] pub(super) async fn admin_signups( State(state): State, session: Session, AdminUser(admin): AdminUser, ) -> Result { let db_signups = db::email_signups::get_all_email_signups(&state.db).await?; let total = db::email_signups::count_email_signups(&state.db).await?; let signups: Vec = db_signups .into_iter() .map(|s| AdminSignupRow { email: s.email, source: s.source, created_at: s.created_at.format("%b %d, %Y %H:%M").to_string(), }) .collect(); Ok(AdminSignupsTemplate { csrf_token: get_csrf_token(&session).await, session_user: Some(admin), signups, total, admin_active_page: "signups", }) }