Backend: Updated Axum, Tower-http, Added Axum-Server. Fixed Router which no longer accepts Result<T>. Fixed Database files with info_id default value.
This commit is contained in:
parent
ee72389679
commit
1aa48a15ac
10 changed files with 37 additions and 25 deletions
|
@ -6,11 +6,12 @@ edition = "2021"
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
axum = { version = "0.6.20", features = ["form"] }
|
axum = "0.7.3"
|
||||||
|
axum-server = "0.6.0"
|
||||||
axum-error = "0.2.0"
|
axum-error = "0.2.0"
|
||||||
dotenv = "0.15.0"
|
dotenv = "0.15.0"
|
||||||
serde = { version = "1.0.192", features = ["derive"] }
|
serde = { version = "1.0.192", features = ["derive"] }
|
||||||
sqlx = { version = "0.7.2", features = ["runtime-tokio", "tls-rustls", "postgres", "chrono"] }
|
sqlx = { version = "0.7.2", features = ["runtime-tokio", "tls-rustls", "postgres", "chrono"] }
|
||||||
tokio = { version = "1.34.0", features = ["full"] }
|
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"] }
|
chrono = { version = "0.4", features = ["serde"] }
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
CREATE TABLE public.softwares (
|
CREATE TABLE public.softwares (
|
||||||
id serial4 NOT NULL,
|
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,
|
software text NOT NULL,
|
||||||
icon text NOT NULL,
|
icon text NOT NULL,
|
||||||
type_icon text NOT NULL,
|
type_icon text NOT NULL,
|
|
@ -10,7 +10,7 @@ CREATE TABLE public.project (
|
||||||
title text NULL,
|
title text NULL,
|
||||||
description text NULL,
|
description text NULL,
|
||||||
github_link 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,
|
picture_name text NULL,
|
||||||
type_project text NULL,
|
type_project text NULL,
|
||||||
CONSTRAINT project_pkey PRIMARY KEY (id),
|
CONSTRAINT project_pkey PRIMARY KEY (id),
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
CREATE TABLE public.programming_languages (
|
CREATE TABLE public.programming_languages (
|
||||||
id serial4 NOT NULL,
|
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,
|
lang text NOT NULL,
|
||||||
icon text NOT NULL,
|
icon text NOT NULL,
|
||||||
type_icon text NOT NULL,
|
type_icon text NOT NULL,
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
CREATE TABLE public.languages (
|
CREATE TABLE public.languages (
|
||||||
id serial4 NOT NULL,
|
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,
|
lang text NOT NULL,
|
||||||
icon_alpha varchar(3) NOT NULL,
|
icon_alpha varchar(3) NOT NULL,
|
||||||
"level" text NOT NULL,
|
"level" text NOT NULL,
|
10
backend/db/install_db.sh
Executable file
10
backend/db/install_db.sh
Executable file
|
@ -0,0 +1,10 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
if [ $# -eq 0 ]; then
|
||||||
|
echo "Usage: $0 <database_user>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
for file in *.sql; do
|
||||||
|
psql -U $1 -d cv -a -f "$file"
|
||||||
|
done
|
|
@ -1,7 +1,7 @@
|
||||||
use axum::{
|
use axum::{
|
||||||
extract::{Path, State},
|
extract::{Path, State},
|
||||||
routing::{get, post},
|
routing::get,
|
||||||
Form, Json, Router,
|
Json, Router,
|
||||||
};
|
};
|
||||||
use axum_error::Result;
|
use axum_error::Result;
|
||||||
use dotenv::dotenv;
|
use dotenv::dotenv;
|
||||||
|
@ -33,49 +33,50 @@ async fn main() -> Result<()> {
|
||||||
|
|
||||||
// Server
|
// Server
|
||||||
let address = SocketAddr::from(([0, 0, 0, 0], 8000));
|
let address = SocketAddr::from(([0, 0, 0, 0], 8000));
|
||||||
Ok(axum::Server::bind(&address)
|
Ok(axum_server::bind(address)
|
||||||
.serve(router.into_make_service())
|
.serve(router.into_make_service())
|
||||||
.await?)
|
.await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
macro_rules! gather_data {
|
macro_rules! _gather_data {
|
||||||
($data_type:ty, $sql_cmd:expr, $pool:expr) => {
|
($data_type:ty, $sql_cmd:expr, $pool:expr) => {
|
||||||
sqlx::query_as!($data_type, $sql_cmd).fetch_all($pool).await
|
sqlx::query_as!($data_type, $sql_cmd).fetch_all($pool).await
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn info(State(pool): State<PgPool>) -> Result<Json<Vec<Info>>> {
|
async fn info(State(pool): State<PgPool>) -> Json<Vec<Info>>
|
||||||
|
{
|
||||||
let datas = sqlx::query_as!(
|
let datas = sqlx::query_as!(
|
||||||
Info,
|
Info,
|
||||||
"SELECT id, full_name, phone_number, email, softskills, interests, birth_year FROM public.info"
|
"SELECT id, full_name, phone_number, email, softskills, interests, birth_year FROM public.info"
|
||||||
)
|
)
|
||||||
.fetch_all(&pool)
|
.fetch_all(&pool)
|
||||||
.await?;
|
.await.unwrap_or(vec![]);
|
||||||
Ok(Json(datas))
|
Json(datas)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn education(State(pool): State<PgPool>) -> Result<Json<Vec<Education>>> {
|
async fn education(State(pool): State<PgPool>) -> Json<Vec<Education>> {
|
||||||
let datas = sqlx::query_as!(Education, "SELECT * FROM public.education")
|
let datas = sqlx::query_as!(Education, "SELECT * FROM public.education")
|
||||||
.fetch_all(&pool)
|
.fetch_all(&pool)
|
||||||
.await?;
|
.await.unwrap_or(vec![]);
|
||||||
Ok(Json(datas))
|
Json(datas)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn experience(State(pool): State<PgPool>) -> Result<Json<Vec<Experience>>> {
|
async fn experience(State(pool): State<PgPool>) -> Json<Vec<Experience>> {
|
||||||
let datas = sqlx::query_as!(Experience, "SELECT * FROM public.experience")
|
let datas = sqlx::query_as!(Experience, "SELECT * FROM public.experience")
|
||||||
.fetch_all(&pool)
|
.fetch_all(&pool)
|
||||||
.await?;
|
.await.unwrap_or(vec![]);
|
||||||
Ok(Json(datas))
|
Json(datas)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn skills(State(pool): State<PgPool>, Path(id): Path<i32>) -> Result<Json<(Vec<Project>,Vec<ProgrammingLanguages>,Vec<Softwares>,Vec<Languages>)>> {
|
async fn skills(Path(id): Path<i32>, State(pool): State<PgPool>) -> Json<(Vec<Project>,Vec<ProgrammingLanguages>,Vec<Softwares>,Vec<Languages>)> {
|
||||||
let project = sqlx::query_as!(
|
let project = sqlx::query_as!(
|
||||||
Project,
|
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",
|
"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
|
id
|
||||||
)
|
)
|
||||||
.fetch_all(&pool)
|
.fetch_all(&pool)
|
||||||
.await?;
|
.await.unwrap_or(vec![]);
|
||||||
|
|
||||||
let programming_languages = sqlx::query_as!(
|
let programming_languages = sqlx::query_as!(
|
||||||
ProgrammingLanguages,
|
ProgrammingLanguages,
|
||||||
|
@ -83,7 +84,7 @@ async fn skills(State(pool): State<PgPool>, Path(id): Path<i32>) -> Result<Json<
|
||||||
id
|
id
|
||||||
)
|
)
|
||||||
.fetch_all(&pool)
|
.fetch_all(&pool)
|
||||||
.await?;
|
.await.unwrap_or(vec![]);
|
||||||
|
|
||||||
let softwares = sqlx::query_as!(
|
let softwares = sqlx::query_as!(
|
||||||
Softwares,
|
Softwares,
|
||||||
|
@ -91,7 +92,7 @@ async fn skills(State(pool): State<PgPool>, Path(id): Path<i32>) -> Result<Json<
|
||||||
id
|
id
|
||||||
)
|
)
|
||||||
.fetch_all(&pool)
|
.fetch_all(&pool)
|
||||||
.await?;
|
.await.unwrap_or(vec![]);
|
||||||
|
|
||||||
let languages = sqlx::query_as!(
|
let languages = sqlx::query_as!(
|
||||||
Languages,
|
Languages,
|
||||||
|
@ -99,7 +100,7 @@ async fn skills(State(pool): State<PgPool>, Path(id): Path<i32>) -> Result<Json<
|
||||||
id
|
id
|
||||||
)
|
)
|
||||||
.fetch_all(&pool)
|
.fetch_all(&pool)
|
||||||
.await?;
|
.await.unwrap_or(vec![]);
|
||||||
|
|
||||||
Ok(Json((project,programming_languages,softwares,languages)))
|
Json((project,programming_languages,softwares,languages))
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue