diff --git a/api/src/routes/candidate.rs b/api/src/routes/candidate.rs index aefc98b..f7408a0 100644 --- a/api/src/routes/candidate.rs +++ b/api/src/routes/candidate.rs @@ -253,12 +253,14 @@ mod tests { \"personalIdNumber\": \"0000000000\", \"study\": \"KB\" }, - \"parent\": { - \"name\": \"maminka\", - \"surname\": \"chad\", - \"telephone\": \"420111222333\", - \"email\": \"maminka@centrum.cz\" - } + \"parents\": [ + { + \"name\": \"maminka\", + \"surname\": \"chad\", + \"telephone\": \"420111222333\", + \"email\": \"maminka@centrum.cz\" + } + ] }"; #[test] diff --git a/core/src/database/mutation/parent.rs b/core/src/database/mutation/parent.rs index 37f4631..7d96ddb 100644 --- a/core/src/database/mutation/parent.rs +++ b/core/src/database/mutation/parent.rs @@ -88,7 +88,7 @@ mod tests { .await .unwrap(); - Mutation::add_parent_details(&db, parent, encrypted_details.parent) + Mutation::add_parent_details(&db, parent, encrypted_details.parents[0].clone()) .await .unwrap(); diff --git a/core/src/models/candidate.rs b/core/src/models/candidate.rs index ffa8b6a..14c4082 100644 --- a/core/src/models/candidate.rs +++ b/core/src/models/candidate.rs @@ -59,32 +59,8 @@ pub struct ParentDetails { pub struct ApplicationDetails { // Candidate pub candidate: CandidateDetails, - pub parent: ParentDetails, - // pub opt_parent2: Option, + pub parents: Vec, } -/* impl ApplicationDetails { - pub fn new_one_parent( - candidate: CandidateDetails, - parent: ParentDetails, - ) -> Self { - Self { - candidate, - parent, - opt_parent2: None, - } - } - pub fn new_two_parents( - candidate: CandidateDetails, - parent: ParentDetails, - opt_parent2: ParentDetails, - ) -> Self { - Self { - candidate, - parent, - opt_parent2: Some(opt_parent2), - } - } -} */ /// CSV export (admin endpoint) #[derive(FromQueryResult, Serialize, Default)] diff --git a/core/src/models/candidate_details.rs b/core/src/models/candidate_details.rs index c7a6cbb..c5093b6 100644 --- a/core/src/models/candidate_details.rs +++ b/core/src/models/candidate_details.rs @@ -36,7 +36,7 @@ pub struct EncryptedParentDetails { #[derive(Clone)] pub struct EncryptedApplicationDetails { pub candidate: EncryptedCandidateDetails, - pub parent: EncryptedParentDetails, + pub parents: Vec, } impl EncryptedString { @@ -244,26 +244,26 @@ impl EncryptedApplicationDetails { form: &ApplicationDetails, recipients: Vec, ) -> Result { - let (candidate, parent) = tokio::try_join!( - EncryptedCandidateDetails::new(&form.candidate, recipients.clone()), - EncryptedParentDetails::new(&form.parent, recipients), - )?; + let candidate = EncryptedCandidateDetails::new(&form.candidate, recipients.clone()).await?; + let parent = EncryptedParentDetails::new(&form.parents[0], recipients.clone()).await?; // TODO async Ok( EncryptedApplicationDetails { candidate, - parent, + parents: vec![parent], } ) } pub async fn decrypt(self, priv_key: String) -> Result { - let (candidate, parent) = tokio::try_join!( - self.candidate.decrypt(priv_key.clone()), - self.parent.decrypt(priv_key), - )?; + /* let (candidate, parent) = tokio::try_join!( + &self.candidate.decrypt(priv_key.clone()), + self.parents[0].decrypt(priv_key), + )?; */ + let candidate = self.candidate.decrypt(priv_key.clone()).await?; + let parent = self.parents[0].clone().decrypt(priv_key).await?; Ok(ApplicationDetails { candidate, - parent, + parents: vec![parent], }) } } @@ -277,7 +277,7 @@ impl TryFrom<(candidate::Model, parent::Model)> for EncryptedApplicationDetails ) -> Result { Ok(EncryptedApplicationDetails { candidate: EncryptedCandidateDetails::try_from(candidate)?, - parent: EncryptedParentDetails::try_from(parent)?, + parents: vec![EncryptedParentDetails::try_from(parent)?], }) } } @@ -302,12 +302,12 @@ impl TryFrom for EncryptedApplicationDetails { personal_id_number: EncryptedString::try_from(cp.personal_identification_number)?, study: cp.study.ok_or(ServiceError::CandidateDetailsNotSet)?, }, - parent: EncryptedParentDetails { + parents: vec![EncryptedParentDetails { name: EncryptedString::try_from(cp.parent_name)?, surname: EncryptedString::try_from(cp.parent_surname)?, telephone: EncryptedString::try_from(cp.parent_telephone)?, email: EncryptedString::try_from(cp.parent_email)?, - } + }] }) } @@ -352,12 +352,12 @@ pub mod tests { personal_id_number: "personal_id_number".to_string(), study: "study".to_string(), }, - parent: ParentDetails { + parents: vec![ParentDetails { email: "parent_email".to_string(), name: "parent_name".to_string(), surname: "parent_surname".to_string(), telephone: "parent_telephone".to_string() - } + }] }) ); @@ -373,10 +373,10 @@ pub mod tests { assert_eq!(details.candidate.sex, "sex"); assert_eq!(details.candidate.study, "study"); assert_eq!(details.candidate.personal_id_number, "personal_id_number"); - assert_eq!(details.parent.name, "parent_name"); - assert_eq!(details.parent.surname, "parent_surname"); - assert_eq!(details.parent.telephone, "parent_telephone"); - assert_eq!(details.parent.email, "parent_email"); + assert_eq!(details.parents[0].name, "parent_name"); + assert_eq!(details.parents[0].surname, "parent_surname"); + assert_eq!(details.parents[0].telephone, "parent_telephone"); + assert_eq!(details.parents[0].email, "parent_email"); } #[tokio::test] diff --git a/core/src/services/application_service.rs b/core/src/services/application_service.rs index cc81e59..29db72e 100644 --- a/core/src/services/application_service.rs +++ b/core/src/services/application_service.rs @@ -42,7 +42,7 @@ impl ApplicationService { Ok( tokio::try_join!( CandidateService::add_candidate_details(db, candidate, enc_details.candidate), - ParentService::add_parent_details(db, parent, enc_details.parent) + ParentService::add_parent_details(db, parent, enc_details.parents[0].clone()) )? ) } diff --git a/core/src/utils/csv.rs b/core/src/utils/csv.rs index e441009..c741628 100644 --- a/core/src/utils/csv.rs +++ b/core/src/utils/csv.rs @@ -7,7 +7,7 @@ type Row = CandidateWithParent; impl From<(i32, ApplicationDetails)> for Row { fn from((application, d): (i32, ApplicationDetails)) -> Self { let c = d.candidate; - let p = d.parent; + let p = d.parents[0].clone(); Self { application, name: Some(c.name),