Refactor
This commit is contained in:
5
.vscode/settings.json
vendored
Normal file
5
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"rust-analyzer.diagnostics.disabled": [
|
||||||
|
"macro-error"
|
||||||
|
]
|
||||||
|
}
|
||||||
30
Cargo.lock
generated
30
Cargo.lock
generated
@@ -2,21 +2,6 @@
|
|||||||
# It is not intended for manual editing.
|
# It is not intended for manual editing.
|
||||||
version = 3
|
version = 3
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "ChaotenRestApi"
|
|
||||||
version = "0.1.0"
|
|
||||||
dependencies = [
|
|
||||||
"actix-web",
|
|
||||||
"anyhow",
|
|
||||||
"dotenv",
|
|
||||||
"env_logger",
|
|
||||||
"futures",
|
|
||||||
"log",
|
|
||||||
"serde",
|
|
||||||
"serde_json",
|
|
||||||
"sqlx",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "actix-codec"
|
name = "actix-codec"
|
||||||
version = "0.4.1"
|
version = "0.4.1"
|
||||||
@@ -347,6 +332,21 @@ version = "1.0.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "chaoten_rest_api"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"actix-web",
|
||||||
|
"anyhow",
|
||||||
|
"dotenv",
|
||||||
|
"env_logger",
|
||||||
|
"futures",
|
||||||
|
"log",
|
||||||
|
"serde",
|
||||||
|
"serde_json",
|
||||||
|
"sqlx",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "const_fn"
|
name = "const_fn"
|
||||||
version = "0.4.8"
|
version = "0.4.8"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "ChaotenRestApi"
|
name = "chaoten_rest_api"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
|
|
||||||
|
|||||||
22
src/main.rs
22
src/main.rs
@@ -1,29 +1,15 @@
|
|||||||
use actix_web::{get, post, web, App, HttpResponse, HttpServer, Responder};
|
use actix_web::{get, post, web, App, HttpResponse, HttpServer, Responder};
|
||||||
use sqlx::{MssqlPool, Row, Pool, Mssql};
|
use sqlx::{MssqlPool};
|
||||||
use std::sync::Mutex;
|
use std::sync::Mutex;
|
||||||
use serde::Serialize;
|
|
||||||
|
|
||||||
#[derive(Serialize, sqlx::FromRow)]
|
mod models;
|
||||||
struct Gerbil
|
mod routes;
|
||||||
{
|
|
||||||
name: String
|
|
||||||
}
|
|
||||||
|
|
||||||
#[get("/")]
|
#[get("/")]
|
||||||
async fn hello() -> impl Responder {
|
async fn hello() -> impl Responder {
|
||||||
HttpResponse::Ok().body("Hello world!")
|
HttpResponse::Ok().body("Hello world!")
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/renner")]
|
|
||||||
async fn renner(data: web::Data<Mutex<Pool<Mssql>>>) -> impl Responder {
|
|
||||||
let data = data.lock().unwrap();
|
|
||||||
let rows = sqlx::query_as::<_,Gerbil>("SELECT name FROM renner")
|
|
||||||
.fetch_all(&(*data))
|
|
||||||
.await
|
|
||||||
.expect("no connection to database");
|
|
||||||
HttpResponse::Ok().json(rows)
|
|
||||||
}
|
|
||||||
|
|
||||||
#[post("/echo")]
|
#[post("/echo")]
|
||||||
async fn echo(req_body: String) -> impl Responder {
|
async fn echo(req_body: String) -> impl Responder {
|
||||||
HttpResponse::Ok().body(req_body)
|
HttpResponse::Ok().body(req_body)
|
||||||
@@ -42,7 +28,7 @@ async fn main() -> std::io::Result<()> {
|
|||||||
.app_data(data.clone())
|
.app_data(data.clone())
|
||||||
.service(hello)
|
.service(hello)
|
||||||
.service(echo)
|
.service(echo)
|
||||||
.service(renner)
|
.service(routes::renner::renner)
|
||||||
.route("/hey", web::get().to(manual_hello))
|
.route("/hey", web::get().to(manual_hello))
|
||||||
})
|
})
|
||||||
.bind("127.0.0.1:8080")?
|
.bind("127.0.0.1:8080")?
|
||||||
|
|||||||
5
src/models/gerbil.rs
Normal file
5
src/models/gerbil.rs
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
#[derive(serde::Serialize, sqlx::FromRow)]
|
||||||
|
pub struct Gerbil
|
||||||
|
{
|
||||||
|
name: String
|
||||||
|
}
|
||||||
1
src/models/mod.rs
Normal file
1
src/models/mod.rs
Normal file
@@ -0,0 +1 @@
|
|||||||
|
pub mod gerbil;
|
||||||
1
src/routes/mod.rs
Normal file
1
src/routes/mod.rs
Normal file
@@ -0,0 +1 @@
|
|||||||
|
pub mod renner;
|
||||||
36
src/routes/renner.rs
Normal file
36
src/routes/renner.rs
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
use actix_web::{get, web, web::Query, HttpResponse, Responder};
|
||||||
|
use sqlx::{Pool, Mssql};
|
||||||
|
use std::sync::Mutex;
|
||||||
|
use serde::{Deserialize};
|
||||||
|
|
||||||
|
use crate::models::gerbil::Gerbil;
|
||||||
|
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
struct RennerQueryParam {
|
||||||
|
name: Option<String>,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#[get("/renner")]
|
||||||
|
async fn renner(data: web::Data<Mutex<Pool<Mssql>>>, params: Query<RennerQueryParam>) -> impl Responder {
|
||||||
|
let mut sql = String::from("SELECT name FROM renner");
|
||||||
|
|
||||||
|
let mut pairs = Vec::new();
|
||||||
|
match ¶ms.name
|
||||||
|
{
|
||||||
|
Some(val) => pairs.push(format!("name='{0}'", val)),
|
||||||
|
None => ()
|
||||||
|
}
|
||||||
|
if pairs.len() != 0
|
||||||
|
{
|
||||||
|
let ret = pairs.iter().skip(1).fold(String::from(&pairs[0]), |sum, x| {format!("{0} AND {1}", sum, x)});
|
||||||
|
sql.push_str(&format!(" WHERE {}",ret));
|
||||||
|
}
|
||||||
|
println!("{}",sql);
|
||||||
|
let data = data.lock().unwrap();
|
||||||
|
let rows = sqlx::query_as::<_,Gerbil>(&sql)
|
||||||
|
.fetch_all(&(*data))
|
||||||
|
.await
|
||||||
|
.expect("no connection to database");
|
||||||
|
HttpResponse::Ok().json(rows)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user