From ca2d725876d2fed0ebad09981ab51ccd6a8ffc49 Mon Sep 17 00:00:00 2001 From: Araozu Date: Wed, 30 Aug 2023 07:31:42 -0500 Subject: [PATCH] [BE][Certs] Get courses from DB --- backend/sql/schema.sql | 2 ++ backend/src/controller/course/mod.rs | 28 +++++++++------------------- backend/src/controller/person/mod.rs | 5 ++--- backend/src/model/course.rs | 23 +++++++++++++++++++++++ 4 files changed, 36 insertions(+), 22 deletions(-) diff --git a/backend/sql/schema.sql b/backend/sql/schema.sql index 354c003..4f87e96 100644 --- a/backend/sql/schema.sql +++ b/backend/sql/schema.sql @@ -1,5 +1,7 @@ -- Mysql schema +-- docker run --name eegsac -e MYSQL_ROOT_PASSWORD=123456789 -p 3306:3306 -d mysql:8.0-debian + CREATE TABLE person ( person_id INTEGER PRIMARY KEY AUTO_INCREMENT, person_dni VARCHAR(8) NOT NULL, diff --git a/backend/src/controller/course/mod.rs b/backend/src/controller/course/mod.rs index b98846a..b7b079a 100644 --- a/backend/src/controller/course/mod.rs +++ b/backend/src/controller/course/mod.rs @@ -1,25 +1,15 @@ -use rocket::serde::json::Json; +use rocket::{http::Status, serde::json::Json}; use crate::model::course::Course; #[get("/course")] -pub async fn get_all() -> Json> { - // TODO: get from database - let c = Course { - course_id: 1, - course_name: "4x4".to_string(), - course_display_name: "Manejo en 4x4 road danger".to_string(), - course_days_amount: 2, - course_has_custom_label: false, - }; +pub async fn get_all() -> (Status, Json>) { + match Course::get_all().await { + Ok(data) => (Status::Ok, Json(data)), + Err(err) => { + eprintln!("Error getting courses: {}", err); - let c2 = Course { - course_id: 2, - course_name: "Mec. Basica".to_string(), - course_display_name: "Mecánica Básica".to_string(), - course_days_amount: 2, - course_has_custom_label: false, - }; - - Json(vec![c, c2]) + (Status::InternalServerError, Json(vec![])) + } + } } diff --git a/backend/src/controller/person/mod.rs b/backend/src/controller/person/mod.rs index d71dfc7..f65bcf1 100644 --- a/backend/src/controller/person/mod.rs +++ b/backend/src/controller/person/mod.rs @@ -1,9 +1,9 @@ +use reqwest::Client; use rocket::http::Status; use rocket::serde::json::Json; -use reqwest::Client; -use crate::{db, model::person::Person}; use crate::model::reniec_person::ReniecPerson; +use crate::{db, model::person::Person}; #[get("/person/")] pub async fn get_by_dni(dni: i32) -> (Status, Json) { @@ -91,7 +91,6 @@ pub async fn get_by_dni(dni: i32) -> (Status, Json) { return (Status::Ok, Json(person)); } - // Return error (Status::NotFound, Json(Person::default())) } diff --git a/backend/src/model/course.rs b/backend/src/model/course.rs index 1dbea76..e7f2154 100644 --- a/backend/src/model/course.rs +++ b/backend/src/model/course.rs @@ -1,5 +1,7 @@ use rocket::serde::Serialize; +use crate::db; + #[derive(Serialize, Clone)] #[serde(crate = "rocket::serde")] pub struct Course { @@ -22,3 +24,24 @@ pub struct Course { /// and the custom label the manufacturer and series (i.e. `320D CAT`). pub course_has_custom_label: bool, } + +impl Course { + pub async fn get_all() -> Result, sqlx::Error> { + let db = db(); + + let results = sqlx::query!("SELECT * FROM course") + .fetch_all(db) + .await? + .iter() + .map(|d| Course { + course_id: d.course_id, + course_name: d.course_name.clone(), + course_display_name: d.course_display_name.clone(), + course_days_amount: d.course_days_amount, + course_has_custom_label: d.course_has_custom_label != 0, + }) + .collect(); + + Ok(results) + } +}