Add base server
This commit is contained in:
parent
df64d51445
commit
9912428fd6
1185
geneit_backend/Cargo.lock
generated
1185
geneit_backend/Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@ -6,5 +6,10 @@ 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]
|
||||||
|
log = "0.4.17"
|
||||||
|
env_logger = "0.10.0"
|
||||||
clap = { version = "4.3.0", features = ["derive", "env"] }
|
clap = { version = "4.3.0", features = ["derive", "env"] }
|
||||||
|
lazy_static = "1.4.0"
|
||||||
|
actix-web = "4.3.1"
|
||||||
diesel = { version = "2.0.4", features = ["postgres"] }
|
diesel = { version = "2.0.4", features = ["postgres"] }
|
||||||
|
serde = { version = "1.0.163", features = ["derive"] }
|
@ -1,6 +1,7 @@
|
|||||||
-- Create table
|
-- Create table
|
||||||
CREATE TABLE users (
|
CREATE TABLE users (
|
||||||
id SERIAL PRIMARY KEY,
|
id SERIAL PRIMARY KEY,
|
||||||
|
name VARCHAR(30) NOT NULL,
|
||||||
email VARCHAR(255) NOT NULL,
|
email VARCHAR(255) NOT NULL,
|
||||||
password VARCHAR NULL,
|
password VARCHAR NULL,
|
||||||
reset_password_token VARCHAR(150) NULL,
|
reset_password_token VARCHAR(150) NULL,
|
||||||
|
43
geneit_backend/src/app_config.rs
Normal file
43
geneit_backend/src/app_config.rs
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
use clap::Parser;
|
||||||
|
|
||||||
|
/// GeneIT backend API
|
||||||
|
#[derive(Parser, Debug, Clone)]
|
||||||
|
#[clap(author, version, about, long_about = None)]
|
||||||
|
pub struct AppConfig {
|
||||||
|
/// Listen address
|
||||||
|
#[clap(short, long, env, default_value = "0.0.0.0:8000")]
|
||||||
|
pub listen_address: String,
|
||||||
|
|
||||||
|
/// Website origin
|
||||||
|
#[clap(short, long, env, default_value = "http://localhost:3000")]
|
||||||
|
pub website_origin: String,
|
||||||
|
|
||||||
|
/// Proxy IP, might end with a star "*"
|
||||||
|
#[clap(short, long, env)]
|
||||||
|
pub proxy_ip: Option<String>,
|
||||||
|
|
||||||
|
/// PostgreSQL connexion chain
|
||||||
|
#[clap(long, env, default_value = "postgres://localhost/geneit")]
|
||||||
|
db_chain: String,
|
||||||
|
|
||||||
|
/// PostgreSQL username
|
||||||
|
#[clap(long, env, default_value = "user")]
|
||||||
|
db_username: String,
|
||||||
|
|
||||||
|
/// PostgreSQL password
|
||||||
|
#[clap(long, env, default_value = "user")]
|
||||||
|
db_password: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
lazy_static::lazy_static! {
|
||||||
|
static ref ARGS: AppConfig = {
|
||||||
|
AppConfig::parse()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
impl AppConfig {
|
||||||
|
/// Get parsed command line arguments
|
||||||
|
pub fn get() -> &'static AppConfig {
|
||||||
|
&ARGS
|
||||||
|
}
|
||||||
|
}
|
28
geneit_backend/src/constants.rs
Normal file
28
geneit_backend/src/constants.rs
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
|
||||||
|
pub struct SizeConstraint {
|
||||||
|
min: usize,
|
||||||
|
max: usize,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl SizeConstraint {
|
||||||
|
pub fn new(min: usize, max: usize) -> Self {
|
||||||
|
Self { min, max }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, serde::Serialize)]
|
||||||
|
pub struct StaticConstraints {
|
||||||
|
pub mail_len: SizeConstraint,
|
||||||
|
pub user_name_len: SizeConstraint,
|
||||||
|
pub password_len: SizeConstraint,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for StaticConstraints {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self {
|
||||||
|
mail_len: SizeConstraint::new(5, 255),
|
||||||
|
user_name_len: SizeConstraint::new(3, 30),
|
||||||
|
password_len: SizeConstraint::new(8, 255),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
1
geneit_backend/src/controllers.rs
Normal file
1
geneit_backend/src/controllers.rs
Normal file
@ -0,0 +1 @@
|
|||||||
|
pub mod config_controller;
|
17
geneit_backend/src/controllers/config_controller.rs
Normal file
17
geneit_backend/src/controllers/config_controller.rs
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
use crate::constants::StaticConstraints;
|
||||||
|
use actix_web::{HttpResponse, Responder};
|
||||||
|
|
||||||
|
/// Default hello route
|
||||||
|
pub async fn home() -> impl Responder {
|
||||||
|
HttpResponse::Ok().json("GeneIT API service.")
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, serde::Serialize, Default)]
|
||||||
|
struct StaticConfig {
|
||||||
|
constraints: StaticConstraints,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Get static configuration
|
||||||
|
pub async fn static_config() -> impl Responder {
|
||||||
|
HttpResponse::Ok().json(StaticConfig::default())
|
||||||
|
}
|
4
geneit_backend/src/lib.rs
Normal file
4
geneit_backend/src/lib.rs
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
pub mod app_config;
|
||||||
|
pub mod constants;
|
||||||
|
pub mod controllers;
|
||||||
|
pub mod schema;
|
@ -1,3 +1,23 @@
|
|||||||
fn main() {
|
use actix_web::{web, App, HttpServer};
|
||||||
println!("Hello, world!");
|
use geneit_backend::app_config::AppConfig;
|
||||||
|
use geneit_backend::controllers::config_controller;
|
||||||
|
|
||||||
|
#[actix_web::main]
|
||||||
|
async fn main() -> std::io::Result<()> {
|
||||||
|
env_logger::init_from_env(env_logger::Env::new().default_filter_or("info"));
|
||||||
|
|
||||||
|
log::info!("Start to listen on {}", AppConfig::get().listen_address);
|
||||||
|
|
||||||
|
HttpServer::new(|| {
|
||||||
|
App::new()
|
||||||
|
// Config controller
|
||||||
|
.route("/", web::get().to(config_controller::home))
|
||||||
|
.route(
|
||||||
|
"/config/static",
|
||||||
|
web::get().to(config_controller::static_config),
|
||||||
|
)
|
||||||
|
})
|
||||||
|
.bind(AppConfig::get().listen_address.as_str())?
|
||||||
|
.run()
|
||||||
|
.await
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
diesel::table! {
|
diesel::table! {
|
||||||
users (id) {
|
users (id) {
|
||||||
id -> Int4,
|
id -> Int4,
|
||||||
|
name -> Varchar,
|
||||||
email -> Varchar,
|
email -> Varchar,
|
||||||
password -> Nullable<Varchar>,
|
password -> Nullable<Varchar>,
|
||||||
reset_password_token -> Nullable<Varchar>,
|
reset_password_token -> Nullable<Varchar>,
|
||||||
|
Loading…
Reference in New Issue
Block a user