diff --git a/api/src/lib.rs b/api/src/lib.rs index a12add0..22a905d 100644 --- a/api/src/lib.rs +++ b/api/src/lib.rs @@ -41,13 +41,24 @@ async fn start() -> Result<(), rocket::Error> { routes![ routes::candidate::login, routes::candidate::whoami, - routes::candidate::fill_details, routes::candidate::get_details, - routes::candidate::upload_cover_letter, + ], + ) + .mount( + "/candidate/add", + routes![ + routes::candidate::add_details, routes::candidate::upload_portfolio_letter, routes::candidate::upload_portfolio_zip, + routes::candidate::upload_cover_letter, + ], + ) + .mount( + "/candidate/portfolio", + routes![ routes::candidate::submit_portfolio, - routes::candidate::is_submitted, + routes::candidate::is_portfolio_prepared, + routes::candidate::is_portfolio_submitted, ], ) .mount( diff --git a/api/src/routes/candidate.rs b/api/src/routes/candidate.rs index 4e5113c..dd2dd55 100644 --- a/api/src/routes/candidate.rs +++ b/api/src/routes/candidate.rs @@ -59,7 +59,7 @@ pub async fn whoami(session: CandidateAuth) -> Result> { } #[post("/details", data = "
")] -pub async fn fill_details( +pub async fn add_details( conn: Connection<'_, Db>, details: Json, session: CandidateAuth, @@ -105,14 +105,14 @@ pub async fn get_details( details.map(|d| Json(d)) } -#[post("/coverletter", data = "")] +#[post("/cover_letter", data = "")] pub async fn upload_cover_letter( session: CandidateAuth, letter: Letter, ) -> Result> { let candidate: entity::candidate::Model = session.into(); - let candidate = CandidateService::add_cover_letter(candidate.application, letter.into()).await; + let candidate = CandidateService::add_cover_letter_to_cache(candidate.application, letter.into()).await; if candidate.is_err() { // TODO cleanup @@ -126,7 +126,7 @@ pub async fn upload_cover_letter( Ok("Letter added".to_string()) } -#[post("/portfolioletter", data = "")] +#[post("/portfolio_letter", data = "")] pub async fn upload_portfolio_letter( session: CandidateAuth, letter: Letter, @@ -134,7 +134,7 @@ pub async fn upload_portfolio_letter( let candidate: entity::candidate::Model = session.into(); let candidate = - CandidateService::add_portfolio_letter(candidate.application, letter.into()).await; + CandidateService::add_portfolio_letter_to_cache(candidate.application, letter.into()).await; if candidate.is_err() { // TODO cleanup @@ -148,7 +148,7 @@ pub async fn upload_portfolio_letter( Ok("Letter added".to_string()) } -#[post("/portfolio", data = "")] +#[post("/portfolio_zip", data = "")] pub async fn upload_portfolio_zip( session: CandidateAuth, portfolio: Portfolio, @@ -156,7 +156,7 @@ pub async fn upload_portfolio_zip( let candidate: entity::candidate::Model = session.into(); let candidate = - CandidateService::add_portfolio_zip(candidate.application, portfolio.into()).await; + CandidateService::add_portfolio_zip_to_cache(candidate.application, portfolio.into()).await; if candidate.is_err() { // TODO cleanup @@ -167,7 +167,7 @@ pub async fn upload_portfolio_zip( )); } - Ok("Letter added".to_string()) + Ok("Portfolio added".to_string()) } #[post("/submit")] @@ -179,7 +179,7 @@ pub async fn submit_portfolio( let candidate: entity::candidate::Model = session.into(); - let submit = CandidateService::submit_portfolio(candidate.application, &db).await; + let submit = CandidateService::add_portfolio(candidate.application, &db).await; if submit.is_err() { // TODO cleanup @@ -193,9 +193,27 @@ pub async fn submit_portfolio( Ok("Portfolio submitted".to_string()) } +#[get("/is_prepared")] +pub async fn is_portfolio_prepared( + session: CandidateAuth, +) -> Result> { + let candidate: entity::candidate::Model = session.into(); + + let is_ok = CandidateService::is_portfolio_prepared(candidate.application).await; + + if !is_ok { + // TODO: Correct error + return Err(Custom( + Status::from_code(404).unwrap_or_default(), + "Portfolio not prepared".to_string(), + )); + } + + Ok("Portfolio ok".to_string()) +} #[get("/is_submitted")] -pub async fn is_submitted( +pub async fn is_portfolio_submitted( session: CandidateAuth, ) -> Result> { let candidate: entity::candidate::Model = session.into(); diff --git a/core/src/services/candidate_service.rs b/core/src/services/candidate_service.rs index 8f41dec..6e8f3f7 100644 --- a/core/src/services/candidate_service.rs +++ b/core/src/services/candidate_service.rs @@ -76,7 +76,7 @@ impl CandidateService { Ok(model) } - pub fn is_set_up(candidate: &candidate::Model) -> bool { + pub fn are_candidate_details_complete(candidate: &candidate::Model) -> bool { candidate.name.is_some() && candidate.surname.is_some() && candidate.birthplace.is_some() @@ -103,22 +103,22 @@ impl CandidateService { Ok(()) } - pub async fn add_cover_letter(candidate_id: i32, letter: Vec) -> Result<(), ServiceError> { + pub async fn add_cover_letter_to_cache(candidate_id: i32, letter: Vec) -> Result<(), ServiceError> { Self::write_portfolio_file(candidate_id, letter, "MOTIVACNI_DOPIS.pdf").await } - pub async fn add_portfolio_letter( + pub async fn add_portfolio_letter_to_cache( candidate_id: i32, letter: Vec, ) -> Result<(), ServiceError> { Self::write_portfolio_file(candidate_id, letter, "PORTFOLIO.pdf").await } - pub async fn add_portfolio_zip(candidate_id: i32, zip: Vec) -> Result<(), ServiceError> { + pub async fn add_portfolio_zip_to_cache(candidate_id: i32, zip: Vec) -> Result<(), ServiceError> { Self::write_portfolio_file(candidate_id, zip, "PORTFOLIO.zip").await } - pub async fn is_portfolio_complete(candidate_id: i32) -> bool { + pub async fn is_portfolio_prepared(candidate_id: i32) -> bool { let cache_path = Path::new(&candidate_id.to_string()).join("cache"); tokio::fs::metadata(cache_path.join("MOTIVACNI_DOPIS.pdf")) @@ -132,11 +132,11 @@ impl CandidateService { .is_ok() } - pub async fn submit_portfolio(candidate_id: i32, db: &DbConn) -> Result<(), ServiceError> { + pub async fn add_portfolio(candidate_id: i32, db: &DbConn) -> Result<(), ServiceError> { let path = Path::new(&candidate_id.to_string()).to_path_buf(); let cache_path = path.join("cache"); - if Self::is_portfolio_complete(candidate_id).await == false { + if Self::is_portfolio_prepared(candidate_id).await == false { return Err(ServiceError::IncompletePortfolio); }