From 1aa48a15ac7262421e37c8ff1ceed214681f1283 Mon Sep 17 00:00:00 2001 From: Yohan Boujon Date: Mon, 8 Jan 2024 13:27:49 +0100 Subject: [PATCH] Backend: Updated Axum, Tower-http, Added Axum-Server. Fixed Router which no longer accepts Result. Fixed Database files with info_id default value. --- backend/Cargo.toml | 5 ++- backend/db/{info.sql => 1_info.sql} | 0 backend/db/{education.sql => 2_education.sql} | 0 .../db/{experience.sql => 3_experience.sql} | 0 .../db/{_softwares.sql => 4_softwares.sql} | 2 +- backend/db/{_project.sql => 5_project.sql} | 2 +- ...guages.sql => 6_programming_languages.sql} | 2 +- .../db/{_languages.sql => 7_languages.sql} | 2 +- backend/db/install_db.sh | 10 +++++ backend/src/main.rs | 39 ++++++++++--------- 10 files changed, 37 insertions(+), 25 deletions(-) rename backend/db/{info.sql => 1_info.sql} (100%) rename backend/db/{education.sql => 2_education.sql} (100%) rename backend/db/{experience.sql => 3_experience.sql} (100%) rename backend/db/{_softwares.sql => 4_softwares.sql} (78%) rename backend/db/{_project.sql => 5_project.sql} (83%) rename backend/db/{_programming_languages.sql => 6_programming_languages.sql} (82%) rename backend/db/{_languages.sql => 7_languages.sql} (81%) create mode 100755 backend/db/install_db.sh diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 2c8b3c6..8b24117 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -6,11 +6,12 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -axum = { version = "0.6.20", features = ["form"] } +axum = "0.7.3" +axum-server = "0.6.0" axum-error = "0.2.0" dotenv = "0.15.0" serde = { version = "1.0.192", features = ["derive"] } sqlx = { version = "0.7.2", features = ["runtime-tokio", "tls-rustls", "postgres", "chrono"] } tokio = { version = "1.34.0", features = ["full"] } -tower-http = { version = "0.4.4", features = ["cors"] } +tower-http = { version = "0.5.0", features = ["cors"] } chrono = { version = "0.4", features = ["serde"] } \ No newline at end of file diff --git a/backend/db/info.sql b/backend/db/1_info.sql similarity index 100% rename from backend/db/info.sql rename to backend/db/1_info.sql diff --git a/backend/db/education.sql b/backend/db/2_education.sql similarity index 100% rename from backend/db/education.sql rename to backend/db/2_education.sql diff --git a/backend/db/experience.sql b/backend/db/3_experience.sql similarity index 100% rename from backend/db/experience.sql rename to backend/db/3_experience.sql diff --git a/backend/db/_softwares.sql b/backend/db/4_softwares.sql similarity index 78% rename from backend/db/_softwares.sql rename to backend/db/4_softwares.sql index 208522b..274ddba 100644 --- a/backend/db/_softwares.sql +++ b/backend/db/4_softwares.sql @@ -6,7 +6,7 @@ CREATE TABLE public.softwares ( id serial4 NOT NULL, - info_id int4 NOT NULL DEFAULT nextval('softwares_skills_id_seq'::regclass), + info_id int4 NOT NULL, software text NOT NULL, icon text NOT NULL, type_icon text NOT NULL, diff --git a/backend/db/_project.sql b/backend/db/5_project.sql similarity index 83% rename from backend/db/_project.sql rename to backend/db/5_project.sql index 907bc1a..58c9ecc 100644 --- a/backend/db/_project.sql +++ b/backend/db/5_project.sql @@ -10,7 +10,7 @@ CREATE TABLE public.project ( title text NULL, description text NULL, github_link text NULL, - info_id int4 NOT NULL DEFAULT nextval('project_id_skills_seq'::regclass), + info_id int4 NOT NULL, picture_name text NULL, type_project text NULL, CONSTRAINT project_pkey PRIMARY KEY (id), diff --git a/backend/db/_programming_languages.sql b/backend/db/6_programming_languages.sql similarity index 82% rename from backend/db/_programming_languages.sql rename to backend/db/6_programming_languages.sql index 06584b2..563f673 100644 --- a/backend/db/_programming_languages.sql +++ b/backend/db/6_programming_languages.sql @@ -6,7 +6,7 @@ CREATE TABLE public.programming_languages ( id serial4 NOT NULL, - info_id int4 NOT NULL DEFAULT nextval('programming_languages_skills_id_seq'::regclass), + info_id int4 NOT NULL, lang text NOT NULL, icon text NOT NULL, type_icon text NOT NULL, diff --git a/backend/db/_languages.sql b/backend/db/7_languages.sql similarity index 81% rename from backend/db/_languages.sql rename to backend/db/7_languages.sql index 9ae719e..afde928 100644 --- a/backend/db/_languages.sql +++ b/backend/db/7_languages.sql @@ -6,7 +6,7 @@ CREATE TABLE public.languages ( id serial4 NOT NULL, - info_id int4 NOT NULL DEFAULT nextval('languages_skills_id_seq'::regclass), + info_id int4 NOT NULL, lang text NOT NULL, icon_alpha varchar(3) NOT NULL, "level" text NOT NULL, diff --git a/backend/db/install_db.sh b/backend/db/install_db.sh new file mode 100755 index 0000000..cba9cd9 --- /dev/null +++ b/backend/db/install_db.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ $# -eq 0 ]; then + echo "Usage: $0 " + exit 1 +fi + +for file in *.sql; do + psql -U $1 -d cv -a -f "$file" +done \ No newline at end of file diff --git a/backend/src/main.rs b/backend/src/main.rs index 96229cb..bf1ab42 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -1,7 +1,7 @@ use axum::{ extract::{Path, State}, - routing::{get, post}, - Form, Json, Router, + routing::get, + Json, Router, }; use axum_error::Result; use dotenv::dotenv; @@ -33,49 +33,50 @@ async fn main() -> Result<()> { // Server let address = SocketAddr::from(([0, 0, 0, 0], 8000)); - Ok(axum::Server::bind(&address) + Ok(axum_server::bind(address) .serve(router.into_make_service()) .await?) } -macro_rules! gather_data { +macro_rules! _gather_data { ($data_type:ty, $sql_cmd:expr, $pool:expr) => { sqlx::query_as!($data_type, $sql_cmd).fetch_all($pool).await }; } -async fn info(State(pool): State) -> Result>> { +async fn info(State(pool): State) -> Json> +{ let datas = sqlx::query_as!( Info, "SELECT id, full_name, phone_number, email, softskills, interests, birth_year FROM public.info" ) .fetch_all(&pool) - .await?; - Ok(Json(datas)) + .await.unwrap_or(vec![]); + Json(datas) } -async fn education(State(pool): State) -> Result>> { +async fn education(State(pool): State) -> Json> { let datas = sqlx::query_as!(Education, "SELECT * FROM public.education") .fetch_all(&pool) - .await?; - Ok(Json(datas)) + .await.unwrap_or(vec![]); + Json(datas) } -async fn experience(State(pool): State) -> Result>> { +async fn experience(State(pool): State) -> Json> { let datas = sqlx::query_as!(Experience, "SELECT * FROM public.experience") .fetch_all(&pool) - .await?; - Ok(Json(datas)) + .await.unwrap_or(vec![]); + Json(datas) } -async fn skills(State(pool): State, Path(id): Path) -> Result,Vec,Vec,Vec)>> { +async fn skills(Path(id): Path, State(pool): State) -> Json<(Vec,Vec,Vec,Vec)> { let project = sqlx::query_as!( Project, "SELECT date_done, title, description, github_link, picture_name, type_project FROM public.project WHERE project.info_id = $1 ORDER BY date_done DESC", id ) .fetch_all(&pool) - .await?; + .await.unwrap_or(vec![]); let programming_languages = sqlx::query_as!( ProgrammingLanguages, @@ -83,7 +84,7 @@ async fn skills(State(pool): State, Path(id): Path) -> Result, Path(id): Path) -> Result, Path(id): Path) -> Result