From 377d2633c70a8bfa0eb686aec87f27545c713563 Mon Sep 17 00:00:00 2001 From: Sebastian Pravda Date: Sat, 14 Jan 2023 10:48:17 +0100 Subject: [PATCH 1/8] feat!: school izo / name & health insurance number --- core/src/models/candidate.rs | 4 ++++ core/src/models/candidate_details.rs | 16 ++++++++++++++++ core/src/services/parent_service.rs | 2 ++ core/src/utils/csv.rs | 2 ++ entity/src/candidate.rs | 4 ++-- .../src/m20221024_121621_create_candidate.rs | 6 ++++-- 6 files changed, 30 insertions(+), 4 deletions(-) diff --git a/core/src/models/candidate.rs b/core/src/models/candidate.rs index ba1c049..b121094 100644 --- a/core/src/models/candidate.rs +++ b/core/src/models/candidate.rs @@ -52,6 +52,8 @@ pub struct CandidateDetails { pub sex: String, pub study: String, pub personal_id_number: String, + pub school_name: String, + pub health_insurance: String, } #[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)] #[serde(rename_all = "camelCase")] @@ -87,6 +89,8 @@ pub struct Row { pub sex: Option, pub study: Option, pub personal_identification_number: Option, + pub school_name: Option, + pub health_insurance: Option, pub parent_name: Option, pub parent_surname: Option, diff --git a/core/src/models/candidate_details.rs b/core/src/models/candidate_details.rs index eb89e45..c11ab68 100644 --- a/core/src/models/candidate_details.rs +++ b/core/src/models/candidate_details.rs @@ -24,6 +24,8 @@ pub struct EncryptedCandidateDetails { pub email: Option, pub sex: Option, pub personal_id_number: Option, + pub school_name: Option, + pub health_insurance: Option, pub study: Option, } @@ -128,6 +130,8 @@ impl EncryptedCandidateDetails { EncryptedString::new_option(&form.email, recipients), EncryptedString::new_option(&form.sex, recipients), EncryptedString::new_option(&form.personal_id_number, recipients), + EncryptedString::new_option(&form.school_name, recipients), + EncryptedString::new_option(&form.health_insurance, recipients), )?; Ok( @@ -142,6 +146,8 @@ impl EncryptedCandidateDetails { email: d.7, sex: d.8, personal_id_number: d.9, + school_name: d.10, + health_insurance: d.11, study: Some(form.study.clone()), } ) @@ -159,6 +165,8 @@ impl EncryptedCandidateDetails { EncryptedString::decrypt_option(&self.email, priv_key), // 7 EncryptedString::decrypt_option(&self.sex, priv_key), // 8 EncryptedString::decrypt_option(&self.personal_id_number, priv_key),// 9 + EncryptedString::decrypt_option(&self.school_name, priv_key), // 10 + EncryptedString::decrypt_option(&self.health_insurance, priv_key), // 11 )?; Ok(CandidateDetails { @@ -172,6 +180,8 @@ impl EncryptedCandidateDetails { email: d.7.unwrap_or_default(), sex: d.8.unwrap_or_default(), personal_id_number: d.9.unwrap_or_default(), + school_name: d.10.unwrap_or_default(), + health_insurance: d.11.unwrap_or_default(), study: self.study.clone().unwrap_or_default(), } ) @@ -206,6 +216,8 @@ impl From<&candidate::Model> for EncryptedCandidateDetails { email: EncryptedString::try_from(&candidate.email).ok(), sex: EncryptedString::try_from(&candidate.sex).ok(), personal_id_number: Some(EncryptedString::from(candidate.personal_identification_number.to_owned())), + school_name: EncryptedString::try_from(&candidate.school_name).ok(), + health_insurance: EncryptedString::try_from(&candidate.health_insurance).ok(), study: candidate.study.clone(), } } @@ -342,6 +354,8 @@ impl TryFrom for EncryptedApplicationDetails { email: EncryptedString::try_from(&cp.email).ok(), sex: EncryptedString::try_from(&cp.sex).ok(), personal_id_number: EncryptedString::try_from(&cp.personal_identification_number).ok(), + school_name: EncryptedString::try_from(&cp.school_name).ok(), + health_insurance: EncryptedString::try_from(&cp.health_insurance).ok(), study: cp.study.ok_or(ServiceError::CandidateDetailsNotSet).ok(), }, parents: vec![EncryptedParentDetails { @@ -394,6 +408,8 @@ pub mod tests { email: "email".to_string(), sex: "sex".to_string(), personal_id_number: "personal_id_number".to_string(), + school_name: "school_name".to_string(), + health_insurance: "health_insurance".to_string(), study: "study".to_string(), }, parents: vec![ParentDetails { diff --git a/core/src/services/parent_service.rs b/core/src/services/parent_service.rs index be2b2f5..2ee3e9b 100644 --- a/core/src/services/parent_service.rs +++ b/core/src/services/parent_service.rs @@ -71,6 +71,8 @@ mod tests { email: "email".to_string(), sex: "sex".to_string(), personal_id_number: "personal_id_number".to_string(), + school_name: "school_name".to_string(), + health_insurance: "health_insurance".to_string(), study: "study".to_string(), }, parents: vec![ParentDetails { diff --git a/core/src/utils/csv.rs b/core/src/utils/csv.rs index 216ade4..6d6cef9 100644 --- a/core/src/utils/csv.rs +++ b/core/src/utils/csv.rs @@ -16,6 +16,8 @@ impl From<(i32, ApplicationDetails)> for Row { email: Some(c.email), sex: Some(c.sex), study: Some(c.study), + health_insurance: Some(c.health_insurance), + school_name: Some(c.school_name), personal_identification_number: Some(c.personal_id_number), parent_name: d.parents.get(0).map(|p| p.name.clone()), diff --git a/entity/src/candidate.rs b/entity/src/candidate.rs index fdfbc46..5960976 100644 --- a/entity/src/candidate.rs +++ b/entity/src/candidate.rs @@ -20,8 +20,8 @@ pub struct Model { pub sex: Option, pub study: Option, pub personal_identification_number: String, - #[sea_orm(column_type = "Text", nullable)] - pub personal_identification_number_hash: Option, + pub school_name: Option, + pub health_insurance: Option, pub public_key: String, pub private_key: String, pub created_at: DateTime, diff --git a/migration/src/m20221024_121621_create_candidate.rs b/migration/src/m20221024_121621_create_candidate.rs index 89e0522..5ee04bf 100644 --- a/migration/src/m20221024_121621_create_candidate.rs +++ b/migration/src/m20221024_121621_create_candidate.rs @@ -31,7 +31,8 @@ impl MigrationTrait for Migration { .col(ColumnDef::new(Candidate::Sex).string()) .col(ColumnDef::new(Candidate::Study).string()) .col(ColumnDef::new(Candidate::PersonalIdentificationNumber).string().not_null()) - .col(ColumnDef::new(Candidate::PersonalIdentificationNumberHash).text()) + .col(ColumnDef::new(Candidate::SchoolName).string()) + .col(ColumnDef::new(Candidate::HealthInsurance).string()) .col(ColumnDef::new(Candidate::PublicKey).string().not_null()) .col(ColumnDef::new(Candidate::PrivateKey).string().not_null()) .col(ColumnDef::new(Candidate::CreatedAt).date_time().not_null()) @@ -65,7 +66,8 @@ pub enum Candidate { Sex, Study, PersonalIdentificationNumber, - PersonalIdentificationNumberHash, + SchoolName, + HealthInsurance, PublicKey, PrivateKey, CreatedAt, From 4de5dbdc3c7416e0097b2892709e5a2c19447ad3 Mon Sep 17 00:00:00 2001 From: Sebastian Pravda Date: Sat, 14 Jan 2023 11:09:51 +0100 Subject: [PATCH 2/8] fix: update school_name, health_insurence in update_candidate_details method --- core/src/database/mutation/candidate.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/src/database/mutation/candidate.rs b/core/src/database/mutation/candidate.rs index d5d853e..cd4793a 100644 --- a/core/src/database/mutation/candidate.rs +++ b/core/src/database/mutation/candidate.rs @@ -67,6 +67,7 @@ impl Mutation { ) -> Result { let application = user.application; let mut user: candidate::ActiveModel = user.into(); + user.name = Set(enc_candidate.name.map(|e| e.into())); user.surname = Set(enc_candidate.surname.map(|e| e.into())); user.birthplace = Set(enc_candidate.birthplace.map(|e| e.into())); @@ -77,6 +78,8 @@ impl Mutation { user.email = Set(enc_candidate.email.map(|e| e.into())); user.sex = Set(enc_candidate.sex.map(|e| e.into())); user.personal_identification_number = Set(enc_candidate.personal_id_number.map(|e| e.into()).unwrap_or_default()); // TODO: do not set this here, it is already set in the create_candidate mutation??? + user.school_name = Set(enc_candidate.school_name.map(|e| e.into())); + user.health_insurance = Set(enc_candidate.health_insurance.map(|e| e.into())); user.study = Set(enc_candidate.study.map(|e| e.into())); user.updated_at = Set(chrono::offset::Local::now().naive_local()); From 36d8c3ff71998183159346cbcc508b3d6c58e6ca Mon Sep 17 00:00:00 2001 From: Sebastian Pravda Date: Sat, 14 Jan 2023 11:14:18 +0100 Subject: [PATCH 3/8] refactor: candidate ActiveModel variable name --- core/src/database/mutation/candidate.rs | 34 ++++++++++++------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/core/src/database/mutation/candidate.rs b/core/src/database/mutation/candidate.rs index cd4793a..5e1edff 100644 --- a/core/src/database/mutation/candidate.rs +++ b/core/src/database/mutation/candidate.rs @@ -66,25 +66,25 @@ impl Mutation { enc_candidate: EncryptedCandidateDetails, ) -> Result { let application = user.application; - let mut user: candidate::ActiveModel = user.into(); - - user.name = Set(enc_candidate.name.map(|e| e.into())); - user.surname = Set(enc_candidate.surname.map(|e| e.into())); - user.birthplace = Set(enc_candidate.birthplace.map(|e| e.into())); - user.birthdate = Set(enc_candidate.birthdate.map(|e| e.into())); - user.address = Set(enc_candidate.address.map(|e| e.into())); - user.telephone = Set(enc_candidate.telephone.map(|e| e.into())); - user.citizenship = Set(enc_candidate.citizenship.map(|e| e.into())); - user.email = Set(enc_candidate.email.map(|e| e.into())); - user.sex = Set(enc_candidate.sex.map(|e| e.into())); - user.personal_identification_number = Set(enc_candidate.personal_id_number.map(|e| e.into()).unwrap_or_default()); // TODO: do not set this here, it is already set in the create_candidate mutation??? - user.school_name = Set(enc_candidate.school_name.map(|e| e.into())); - user.health_insurance = Set(enc_candidate.health_insurance.map(|e| e.into())); - user.study = Set(enc_candidate.study.map(|e| e.into())); + let mut candidate: candidate::ActiveModel = user.into(); - user.updated_at = Set(chrono::offset::Local::now().naive_local()); + candidate.name = Set(enc_candidate.name.map(|e| e.into())); + candidate.surname = Set(enc_candidate.surname.map(|e| e.into())); + candidate.birthplace = Set(enc_candidate.birthplace.map(|e| e.into())); + candidate.birthdate = Set(enc_candidate.birthdate.map(|e| e.into())); + candidate.address = Set(enc_candidate.address.map(|e| e.into())); + candidate.telephone = Set(enc_candidate.telephone.map(|e| e.into())); + candidate.citizenship = Set(enc_candidate.citizenship.map(|e| e.into())); + candidate.email = Set(enc_candidate.email.map(|e| e.into())); + candidate.sex = Set(enc_candidate.sex.map(|e| e.into())); + candidate.personal_identification_number = Set(enc_candidate.personal_id_number.map(|e| e.into()).unwrap_or_default()); // TODO: do not set this here, it is already set in the create_candidate mutation??? + candidate.school_name = Set(enc_candidate.school_name.map(|e| e.into())); + candidate.health_insurance = Set(enc_candidate.health_insurance.map(|e| e.into())); + candidate.study = Set(enc_candidate.study.map(|e| e.into())); - let update = user.update(db).await?; + candidate.updated_at = Set(chrono::offset::Local::now().naive_local()); + + let update = candidate.update(db).await?; info!("CANDIDATE {} DETAILS UPDATED", application); From ac90c0183d408105796de1dba3d9c5ea9be62c16 Mon Sep 17 00:00:00 2001 From: Sebastian Pravda Date: Sat, 14 Jan 2023 11:25:44 +0100 Subject: [PATCH 4/8] fix: candidate_details API test --- api/src/routes/candidate.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/api/src/routes/candidate.rs b/api/src/routes/candidate.rs index 1ebe881..c565bed 100644 --- a/api/src/routes/candidate.rs +++ b/api/src/routes/candidate.rs @@ -298,6 +298,8 @@ mod tests { \"email\": \"magor@magor.cz\", \"sex\": \"MALE\", \"personalIdNumber\": \"0101010000\", + \"schoolName\": \"29988383\", + \"healthInsurance\": \"000\", \"study\": \"KB\" }, \"parents\": [ From b326081b738470e032dc54bb8b93da90398d0479 Mon Sep 17 00:00:00 2001 From: Sebastian Pravda Date: Sat, 14 Jan 2023 11:28:24 +0100 Subject: [PATCH 5/8] chore: Rocket.toml in .gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index e231621..3bddb3f 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,5 @@ target/ .env + +Rocket.toml \ No newline at end of file From 818fa306ce99113c47876b3e464a64429f9398ca Mon Sep 17 00:00:00 2001 From: Sebastian Pravda Date: Sat, 14 Jan 2023 11:31:29 +0100 Subject: [PATCH 6/8] chore: ignore Rocket.toml config file --- Rocket.toml | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 Rocket.toml diff --git a/Rocket.toml b/Rocket.toml deleted file mode 100644 index a0d4956..0000000 --- a/Rocket.toml +++ /dev/null @@ -1,5 +0,0 @@ -#[default] -#template_dir = "api/templates/" - -[default.databases.sea_orm] -#url = "postgres://root:root@localhost/rocket_example" From 3a498caeef238171e04110b449945fe5448bbfe8 Mon Sep 17 00:00:00 2001 From: Sebastian Pravda Date: Sat, 14 Jan 2023 11:11:16 +0100 Subject: [PATCH 7/8] feat: school name, health insurance fill in register, show on candidate dashboard --- .../dashboard/DashboardInfoCard.svelte | 5 +- frontend/src/lib/stores/candidate.ts | 6 ++- .../(authenticated)/register/+page.svelte | 50 +++++++++++++++---- 3 files changed, 49 insertions(+), 12 deletions(-) diff --git a/frontend/src/lib/components/dashboard/DashboardInfoCard.svelte b/frontend/src/lib/components/dashboard/DashboardInfoCard.svelte index be69728..eab48b8 100644 --- a/frontend/src/lib/components/dashboard/DashboardInfoCard.svelte +++ b/frontend/src/lib/components/dashboard/DashboardInfoCard.svelte @@ -158,8 +158,9 @@ >{$candidateData.candidate.personalIdNumber} - Telefon: {$candidateData.candidate.telephone} + IČO/Název školy: {$candidateData.candidate.schoolName} + Číslo zdravotní pojišťovny: {$candidateData.candidate.healthInsurance} + Telefon: {$candidateData.candidate.telephone}
({ email: '', sex: '', study: '', - personalIdNumber: '' + personalIdNumber: '', + schoolName: '', + healthInsurance: '' }, parents: [] }); diff --git a/frontend/src/routes/(candidate)/(authenticated)/register/+page.svelte b/frontend/src/routes/(candidate)/(authenticated)/register/+page.svelte index 6b7b045..2004550 100644 --- a/frontend/src/routes/(candidate)/(authenticated)/register/+page.svelte +++ b/frontend/src/routes/(candidate)/(authenticated)/register/+page.svelte @@ -53,6 +53,8 @@ zip: '', citizenship: '', personalIdNumber: '', + schoolName: '', + healthInsurance: '', study: '' }, parents: [ @@ -97,6 +99,8 @@ zip: yup.string().required(), citizenship: yup.string().required(), personalIdNumber: yup.string().required(), + schoolName: yup.string().required(), + healthInsurance: yup.number().required(), study: yup.string().required() }), parents: yup.array().of( @@ -313,7 +317,9 @@ if ( $typedErrors['candidate']['citizenship'] || $typedErrors['candidate']['personalIdNumber'] || - $typedErrors['candidate']['study'] + $typedErrors['candidate']['schoolName'] || + $typedErrors['candidate']['healthInsurance'] || + $typedErrors['candidate']['study'] ) { return true; } @@ -569,7 +575,7 @@ Zadejte prosím své občanství, rodné číslo, či jeho alternativu Vaší země a obor na který se hlásíte.

-
+
- - - +
+ + + {#if $form.candidate.citizenship === 'Česká republika' || !$form.candidate.citizenship} + + {:else} + + {/if} + + + + + + +
{#if $form.candidate.citizenship === 'Česká republika' || !$form.candidate.citizenship} From 40562cbd6720b213984c18fba934bbf967812e53 Mon Sep 17 00:00:00 2001 From: Sebastian Pravda Date: Sat, 14 Jan 2023 11:16:53 +0100 Subject: [PATCH 8/8] fix: missing schoolName & healthInsurance variables --- .../candidate/[code=application]/+page.server.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/frontend/src/routes/(admin)/admin/(authenticated)/candidate/[code=application]/+page.server.ts b/frontend/src/routes/(admin)/admin/(authenticated)/candidate/[code=application]/+page.server.ts index 020474b..a311a3f 100644 --- a/frontend/src/routes/(admin)/admin/(authenticated)/candidate/[code=application]/+page.server.ts +++ b/frontend/src/routes/(admin)/admin/(authenticated)/candidate/[code=application]/+page.server.ts @@ -18,7 +18,9 @@ export const load: PageServerLoad = async ({ fetch, params }) => { email: '', sex: '', study: '', - personalIdNumber: '' + personalIdNumber: '', + schoolName: '', + healthInsurance: '' }, parents: [] };