diff --git a/api/src/lib.rs b/api/src/lib.rs index 7d57562..a12add0 100644 --- a/api/src/lib.rs +++ b/api/src/lib.rs @@ -47,6 +47,7 @@ async fn start() -> Result<(), rocket::Error> { routes::candidate::upload_portfolio_letter, routes::candidate::upload_portfolio_zip, routes::candidate::submit_portfolio, + routes::candidate::is_submitted, ], ) .mount( diff --git a/api/src/routes/candidate.rs b/api/src/routes/candidate.rs index 7360429..4e5113c 100644 --- a/api/src/routes/candidate.rs +++ b/api/src/routes/candidate.rs @@ -193,3 +193,22 @@ pub async fn submit_portfolio( Ok("Portfolio submitted".to_string()) } + +#[get("/is_submitted")] +pub async fn is_submitted( + session: CandidateAuth, +) -> Result> { + let candidate: entity::candidate::Model = session.into(); + + let is_ok = CandidateService::is_portfolio_submitted(candidate.application).await; + + if !is_ok { + // TODO: Correct error + return Err(Custom( + Status::from_code(404).unwrap_or_default(), + "Portfolio not submitted".to_string(), + )); + } + + Ok("Portfolio ok".to_string()) +} diff --git a/core/src/services/candidate_service.rs b/core/src/services/candidate_service.rs index c524d3d..8f41dec 100644 --- a/core/src/services/candidate_service.rs +++ b/core/src/services/candidate_service.rs @@ -192,6 +192,12 @@ impl CandidateService { Ok(()) } + pub async fn is_portfolio_submitted(candidate_id: i32) -> bool { + let path = Path::new(&candidate_id.to_string()).join("PORTFOLIO.age"); + + tokio::fs::metadata(path).await.is_ok() + } + pub async fn get_portfolio(candidate_id: i32, db: &DbConn) -> Result, ServiceError> { let candidate = Query::find_candidate_by_id(db, candidate_id) .await?