From c230154d995b8e0f5bd14b58d5b58442ccf7a6e5 Mon Sep 17 00:00:00 2001 From: Sebastian Pravda Date: Sun, 5 Feb 2023 18:05:30 +0100 Subject: [PATCH 1/2] feat: personalIdNumber & relatedApplications in list_applications --- core/src/database/query/application.rs | 2 +- core/src/models/application.rs | 11 ++++++++--- core/src/services/application_service.rs | 6 ++++-- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/core/src/database/query/application.rs b/core/src/database/query/application.rs index dde822f..95705de 100644 --- a/core/src/database/query/application.rs +++ b/core/src/database/query/application.rs @@ -6,7 +6,7 @@ const PAGE_SIZE: u64 = 20; #[derive(FromQueryResult, Clone)] pub struct ApplicationCandidateJoin { pub application_id: i32, - // pub personal_id_number: String, + pub personal_id_number: String, pub candidate_id: i32, pub name: Option, pub surname: Option, diff --git a/core/src/models/application.rs b/core/src/models/application.rs index a495437..a4b436b 100644 --- a/core/src/models/application.rs +++ b/core/src/models/application.rs @@ -8,8 +8,9 @@ use super::candidate_details::EncryptedString; #[serde(rename_all = "camelCase")] pub struct ApplicationResponse { pub application_id: i32, - // pub personal_id_number: String, pub candidate_id: i32, + pub related_applications: Vec, + pub personal_id_number: String, pub name: String, pub surname: String, pub email: String, @@ -20,8 +21,10 @@ pub struct ApplicationResponse { impl ApplicationResponse { pub async fn from_encrypted( private_key: &String, - c: ApplicationCandidateJoin + c: ApplicationCandidateJoin, + related_applications: Vec, ) -> Result { + let personal_id_number = EncryptedString::from(c.personal_id_number.to_owned()).decrypt(private_key).await?; let name = EncryptedString::decrypt_option(&EncryptedString::try_from(&c.name).ok(), private_key).await?; let surname = EncryptedString::decrypt_option(&EncryptedString::try_from(&c.surname).ok(), private_key).await?; let email = EncryptedString::decrypt_option(&EncryptedString::try_from(&c.email).ok(), private_key).await?; @@ -29,11 +32,13 @@ impl ApplicationResponse { Ok( Self { application_id: c.application_id, + candidate_id: c.candidate_id, + related_applications, + personal_id_number, name: name.unwrap_or_default(), surname: surname.unwrap_or_default(), email: email.unwrap_or_default(), telephone: telephone.unwrap_or_default(), - candidate_id: c.candidate_id, field_of_study: c.field_of_study, } ) diff --git a/core/src/services/application_service.rs b/core/src/services/application_service.rs index 912a0f4..0176dae 100644 --- a/core/src/services/application_service.rs +++ b/core/src/services/application_service.rs @@ -267,7 +267,6 @@ impl ApplicationService { db: &DbConn, field_of_study: Option, page: Option, - ) -> Result, ServiceError> { let applications = Query::list_applications(db, field_of_study, page).await?; @@ -275,9 +274,12 @@ impl ApplicationService { applications .iter() .map(|c| async move { + let related_applications = Query::find_applications_by_candidate_id(db, c.candidate_id).await?.iter() + .map(|a| a.id).collect(); ApplicationResponse::from_encrypted( private_key, - c.to_owned() + c.to_owned(), + related_applications, ).await }) ).await From 1c29369ce585583e0bb5d9b65e2e8955373baad4 Mon Sep 17 00:00:00 2001 From: Sebastian Pravda Date: Sun, 5 Feb 2023 18:15:30 +0100 Subject: [PATCH 2/2] feat(frontend): personalId, link on admin dashboard --- .../src/lib/components/admin/table/Table.svelte | 16 ++++++++-------- frontend/src/lib/stores/candidate.ts | 4 ++++ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/frontend/src/lib/components/admin/table/Table.svelte b/frontend/src/lib/components/admin/table/Table.svelte index bdb4106..a54199f 100644 --- a/frontend/src/lib/components/admin/table/Table.svelte +++ b/frontend/src/lib/components/admin/table/Table.svelte @@ -13,9 +13,9 @@ Ev. č. přihlásky - Jméno - Příjmení Obor + Rodné číslo + Link @@ -29,15 +29,15 @@ href="/admin/candidate/{candidate.applicationId}">{candidate.applicationId} - - {candidate.name} - - - {candidate.surname} - {candidate.fieldOfStudy} + + {candidate.personalIdNumber} + + + {candidate.relatedApplications?.filter((a) => a !== candidate.applicationId)} + diff --git a/frontend/src/lib/stores/candidate.ts b/frontend/src/lib/stores/candidate.ts index df6b470..e90b133 100644 --- a/frontend/src/lib/stores/candidate.ts +++ b/frontend/src/lib/stores/candidate.ts @@ -40,8 +40,12 @@ export interface CandidateData { export interface CandidatePreview { applicationId?: number; + candidateId?: number; + relatedApplications?: Array; + personalIdNumber?: string; name?: string; surname?: string; + email?: string; fieldOfStudy?: string; }