From ab7b3f27b6994a9d0b63bb649908a037cc27f787 Mon Sep 17 00:00:00 2001 From: Araozu Date: Thu, 7 Sep 2023 17:18:21 -0500 Subject: [PATCH] Fixes #1 --- backend/src/controller/person/mod.rs | 15 +++++++-------- backend/src/model/custom_label.rs | 8 ++++---- backend/src/model/person.rs | 10 ++++++++++ .../src/certs/NewRegister/RegisterPreview.tsx | 15 +++++++++++++-- 4 files changed, 34 insertions(+), 14 deletions(-) diff --git a/backend/src/controller/person/mod.rs b/backend/src/controller/person/mod.rs index c4c9ee5..255ab14 100644 --- a/backend/src/controller/person/mod.rs +++ b/backend/src/controller/person/mod.rs @@ -81,15 +81,14 @@ pub async fn get_by_dni(dni: i32) -> (Status, Json) { return (Status::InternalServerError, Json(Person::default())); } - let person = Person { - person_id: 0, - person_dni: format!("{}", dni), - person_names: p.nombres, - person_paternal_surname: p.apellidoPaterno, - person_maternal_surname: p.apellidoMaterno, - }; + match Person::get_by_dni(dni).await { + Ok(p) => return (Status::Ok, Json(p)), + Err(error) => { + eprintln!("Error fetching person from DB: {:?}", error); - return (Status::Ok, Json(person)); + return (Status::InternalServerError, Json(Person::default())); + } + } } // Return error diff --git a/backend/src/model/custom_label.rs b/backend/src/model/custom_label.rs index 5cba492..5e2b76c 100644 --- a/backend/src/model/custom_label.rs +++ b/backend/src/model/custom_label.rs @@ -31,8 +31,8 @@ impl CustomLabel { "SELECT custom_label_id FROM custom_label WHERE custom_label_value = ?", value ) - .fetch_all(db) - .await?; + .fetch_all(db) + .await?; if result.is_empty() { Ok(-1) @@ -50,8 +50,8 @@ impl CustomLabel { "INSERT INTO custom_label (custom_label_value) VALUES (?)", value ) - .execute(db) - .await?; + .execute(db) + .await?; let result = Self::get_id_by_value(value).await?; Ok(result) diff --git a/backend/src/model/person.rs b/backend/src/model/person.rs index 1ff254e..061f527 100644 --- a/backend/src/model/person.rs +++ b/backend/src/model/person.rs @@ -34,6 +34,16 @@ impl Person { person_maternal_surname: "".to_string(), } } + + pub async fn get_by_dni(dni: i32) -> Result { + let db = db(); + + let result = sqlx::query_as!(Person, "SELECT * FROM person WHERE person_dni = ?", dni) + .fetch_one(db) + .await?; + + Ok(result) + } } #[derive(Deserialize)] diff --git a/frontend/src/certs/NewRegister/RegisterPreview.tsx b/frontend/src/certs/NewRegister/RegisterPreview.tsx index 6e0ab71..46f6b60 100644 --- a/frontend/src/certs/NewRegister/RegisterPreview.tsx +++ b/frontend/src/certs/NewRegister/RegisterPreview.tsx @@ -1,5 +1,5 @@ import { FilledCard } from "../../components/FilledCard"; -import { For } from "solid-js"; +import { For, createSignal } from "solid-js"; import { XIcon } from "../../icons/XIcon"; import { allCourses } from "../../utils/allCourses"; import { RegisterBatchCreate } from "../../types/Register"; @@ -12,8 +12,18 @@ function isoDateToLocalDate(date: string): string { return `${day}/${month}`; } +function wait(ms: number) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + export function RegisterPreview(props: {selections: Array, personId: number | null, onDelete: (v: number) => void, onRegister: () => void}) { + const [loading, setLoading] = createSignal(false); + const submit = async() => { + setLoading(true); + + await wait(2000); + const registers: RegisterBatchCreate = props.selections.map(({courseId, date, customLabel}) => ({ person_id: props.personId!, course_id: courseId, @@ -32,6 +42,7 @@ export function RegisterPreview(props: {selections: Array, } props.onRegister(); + setLoading(false); }; return ( @@ -53,7 +64,7 @@ export function RegisterPreview(props: {selections: Array, class="bg-c-primary text-c-on-primary px-4 py-2 rounded-full cursor-pointer mt-4 disabled:opacity-50 disabled:cursor-not-allowed" type="button" - disabled={props.selections.length === 0} + disabled={props.selections.length === 0 || loading()} onclick={submit} > Registrar los {props.selections.length} cursos