add select all users

This commit is contained in:
rsgltzyd 2024-11-08 00:53:04 +08:00
parent 8b7410d0c7
commit 58245e3b0d
8 changed files with 107 additions and 25 deletions

67
Cargo.lock generated
View File

@ -293,6 +293,19 @@ version = "0.22.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
[[package]]
name = "bcrypt"
version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e65938ed058ef47d92cf8b346cc76ef48984572ade631927e9937b5ffc7662c7"
dependencies = [
"base64 0.22.1",
"blowfish",
"getrandom",
"subtle",
"zeroize",
]
[[package]]
name = "bigdecimal"
version = "0.4.6"
@ -351,6 +364,16 @@ dependencies = [
"generic-array",
]
[[package]]
name = "blowfish"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e412e2cd0f2b2d93e02543ceae7917b3c70331573df19ee046bcbc35e45e87d7"
dependencies = [
"byteorder",
"cipher",
]
[[package]]
name = "borsh"
version = "1.5.1"
@ -456,9 +479,9 @@ dependencies = [
[[package]]
name = "cc"
version = "1.1.35"
version = "1.1.36"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0f57c4b4da2a9d619dd035f27316d7a426305b75be93d09e92f2b9229c34feaf"
checksum = "baee610e9452a8f6f0a1b6194ec09ff9e2d85dea54432acdae41aa0761c95d70"
dependencies = [
"jobserver",
"libc",
@ -486,6 +509,16 @@ version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
[[package]]
name = "cipher"
version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
dependencies = [
"crypto-common",
"inout",
]
[[package]]
name = "clang-sys"
version = "1.8.1"
@ -663,6 +696,7 @@ name = "demo"
version = "0.1.0"
dependencies = [
"actix-web",
"bcrypt",
"mysql",
"serde",
"serde_derive",
@ -1167,6 +1201,15 @@ dependencies = [
"hashbrown 0.15.1",
]
[[package]]
name = "inout"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
dependencies = [
"generic-array",
]
[[package]]
name = "io-enum"
version = "1.1.3"
@ -1214,9 +1257,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
[[package]]
name = "libc"
version = "0.2.161"
version = "0.2.162"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1"
checksum = "18d287de67fe55fd7e1581fe933d965a5a9477b38e949cfa9f8574ef01506398"
[[package]]
name = "libloading"
@ -2069,6 +2112,12 @@ dependencies = [
"winapi",
]
[[package]]
name = "subtle"
version = "2.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
[[package]]
name = "syn"
version = "1.0.109"
@ -2220,9 +2269,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
name = "tokio"
version = "1.41.0"
version = "1.41.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "145f3413504347a2be84393cc8a7d2fb4d863b375909ea59f2158261aa258bbb"
checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33"
dependencies = [
"backtrace",
"bytes",
@ -2567,6 +2616,12 @@ dependencies = [
"synstructure",
]
[[package]]
name = "zeroize"
version = "1.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"
[[package]]
name = "zerovec"
version = "0.10.4"

View File

@ -9,3 +9,4 @@ actix-web = "4"
serde = "1.0"
serde_derive = "1.0"
uuid = { version = "1.11.0", features = ["v4"] }
bcrypt = "0.15.1"

View File

@ -7,8 +7,11 @@ mod utils;
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| {
App::new().service(routes::register_user)
App::new()
.service(routes::register_user)
.service(routes::get_all_user)
})
.bind("127.0.0.1:8080")?
.run()

View File

@ -6,4 +6,5 @@ pub struct User {
pub name: String,
pub age: i32,
pub email: String,
pub password: String,
}

View File

@ -7,24 +7,25 @@ use crate::models::user::User;
*/
pub fn create_user(conn: &mut mysql::PooledConn, user: &User) -> Result<(), mysql::Error> {
conn.exec_drop(
r"INSERT INTO users (id, name, age, email) VALUES (:id, :name, :age, :email)",
r"INSERT INTO users (id, name, age, email, password) VALUES (:id, :name, :age, :email, :password)",
params! {
"id" => &user.id,
"name" => &user.name,
"age" => &user.age,
"email" => &user.email,
"password" => &user.password,
},
)
}
// /**
// * 查询所有用户
// */
// pub fn query_all_users(conn: &mut mysql::PooledConn) -> Result<Vec<User>, mysql::Error> {
// conn.query_map(
// "SELECT id, name, email FROM users",
// |(id, name, age, email)| {
// User { id, name, age, email }
// },
// )
// }
/**
*
*/
pub fn query_all_users(conn: &mut mysql::PooledConn) -> Result<Vec<User>, mysql::Error> {
conn.query_map(
"SELECT id, name, age, email, password FROM users",
|(id, name, age, email, password)| {
User { id, name, age, email, password }
},
)
}

View File

@ -1,2 +1,3 @@
mod user_routes;
pub use user_routes::register_user;
pub use user_routes::register_user;
pub use user_routes::get_all_user;

View File

@ -1,5 +1,5 @@
use serde::Deserialize;
use actix_web::{post, web, HttpResponse, Responder};
use actix_web::{get, post, web, HttpResponse, Responder};
use crate::models::user::User;
use crate::services::user_service;
use crate::utils::pool;
@ -9,18 +9,29 @@ struct RegisterUser {
name: String,
age: i32,
email: String,
password: String,
}
#[post("/users/register")]
#[post("/user/register")]
async fn register_user(user: web::Json<RegisterUser>) -> impl Responder {
let pool = pool::get_db_pool();
let mut conn = pool.get_conn().unwrap();
let new_user = User {
let mut new_user = User {
id: 0,
name: user.name.clone(),
age: user.age,
email: user.email.clone(),
password: user.password.clone(),
};
let users = user_service::create_user(&mut conn, &new_user).unwrap();
user_service::create_user(&mut conn, &mut new_user).unwrap();
HttpResponse::Ok().json("User registered successfully")
}
#[get("/user/all")]
async fn get_all_user() -> impl Responder {
let pool = pool::get_db_pool();
let mut conn = pool.get_conn().unwrap();
let users = user_service::select_all_users(&mut conn).unwrap();
HttpResponse::Ok().json(users)
}

View File

@ -2,10 +2,19 @@ use mysql::PooledConn;
use crate::models::user::User;
use crate::repositories::user_repository;
use mysql;
use bcrypt::{hash, DEFAULT_COST};
/**
*
*/
pub fn create_user(conn: &mut PooledConn, user: &User) -> Result<(), mysql::Error> {
pub fn create_user(conn: &mut PooledConn, user: &mut User) -> Result<(), mysql::Error> {
user.password = hash(&user.password, DEFAULT_COST).unwrap();
user_repository::create_user(conn, user)
}
/**
*
*/
pub fn select_all_users(conn: &mut PooledConn) -> Result<Vec<User>, mysql::Error> {
user_repository::query_all_users(conn)
}