diff --git a/api/src/lib.rs b/api/src/lib.rs index 29499c0..2bc516d 100644 --- a/api/src/lib.rs +++ b/api/src/lib.rs @@ -152,7 +152,13 @@ pub fn rocket() -> Rocket { routes::admin::get_candidate_portfolio, ], ) - .mount("/admin/list", routes![routes::admin::list_candidates,]) + .mount( + "/admin/list", + routes![ + routes::admin::list_candidates, + routes::admin::list_candidates_csv, + ] + ) .register("/", catchers![]) } diff --git a/api/src/routes/admin.rs b/api/src/routes/admin.rs index aac339f..25d9a57 100644 --- a/api/src/routes/admin.rs +++ b/api/src/routes/admin.rs @@ -2,7 +2,7 @@ use std::net::{SocketAddr, IpAddr, Ipv4Addr}; use portfolio_core::{ crypto::random_8_char_string, - services::{admin_service::AdminService, candidate_service::CandidateService, application_service::ApplicationService, portfolio_service::PortfolioService}, models::candidate::{BaseCandidateResponse, CreateCandidateResponse, ApplicationDetails}, sea_orm::prelude::Uuid, Query, error::ServiceError, + services::{admin_service::AdminService, candidate_service::CandidateService, application_service::ApplicationService, portfolio_service::PortfolioService}, models::candidate::{BaseCandidateResponse, CreateCandidateResponse, ApplicationDetails}, sea_orm::prelude::Uuid, Query, error::ServiceError, utils::csv, }; use requests::{AdminLoginRequest, RegisterRequest}; use rocket::http::{Cookie, Status, CookieJar}; @@ -137,6 +137,23 @@ pub async fn list_candidates( ) } +#[get("/candidates_csv")] +pub async fn list_candidates_csv( + conn: Connection<'_, Db>, + session: AdminAuth, +) -> Result, Custom> { + let db = conn.into_inner(); + let private_key = session.get_private_key(); + + let candidates = csv::export(db, private_key) + .await + .map_err(to_custom_error)?; + + Ok( + candidates + ) +} + #[get("/candidate/")] pub async fn get_candidate( conn: Connection<'_, Db>,