From e28e759364ed632af8988d297cab90a7093fd95c Mon Sep 17 00:00:00 2001 From: rsgl Date: Sun, 24 Nov 2024 23:07:19 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=E7=94=A8=E6=88=B7=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=EF=BC=8C=E5=88=A0=E9=99=A4=E4=B8=8D=E5=86=8D=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E7=9A=84=E7=94=A8=E6=88=B7=E8=BE=93=E5=85=A5=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=EF=BC=8C=E6=B7=BB=E5=8A=A0=20dotenv=20=E4=BE=9D?= =?UTF-8?q?=E8=B5=96=E4=BB=A5=E6=94=AF=E6=8C=81=E7=8E=AF=E5=A2=83=E5=8F=98?= =?UTF-8?q?=E9=87=8F=E9=85=8D=E7=BD=AE=EF=BC=8C=E6=9B=B4=E6=96=B0=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E6=9C=8D=E5=8A=A1=E4=BB=A5=E4=BD=BF=E7=94=A8=E6=96=B0?= =?UTF-8?q?=E7=9A=84=E7=94=A8=E6=88=B7=E7=BB=93=E6=9E=84=EF=BC=8C=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=95=B0=E6=8D=AE=E5=BA=93=E8=BF=9E=E6=8E=A5=E5=AD=97?= =?UTF-8?q?=E7=AC=A6=E4=B8=B2=E6=9E=84=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env | 6 ++ Cargo.lock | 109 +++++++++++++++++++---------------- Cargo.toml | 1 + README.md | 8 +++ src/main.rs | 18 ++++-- src/models/mod.rs | 1 - src/models/user_input.rs | 6 -- src/routes/user_routes.rs | 25 +++++++- src/services/user_service.rs | 15 ++--- src/utils/mod.rs | 1 - src/utils/pool.rs | 0 11 files changed, 115 insertions(+), 75 deletions(-) create mode 100644 .env delete mode 100644 src/models/user_input.rs delete mode 100644 src/utils/mod.rs delete mode 100644 src/utils/pool.rs diff --git a/.env b/.env new file mode 100644 index 0000000..aeb7939 --- /dev/null +++ b/.env @@ -0,0 +1,6 @@ +RUST_LOG=info +DB_MYSQL_USER=rsgl +DB_MYSQL_PASSWORD=0andrx +DB_MYSQL_URL=122.152.201.90 +DB_MYSQL_PORT=9912 +DB_MYSQL_NAME=test_server \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 472b815..b6d983f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -65,7 +65,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" dependencies = [ "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -182,7 +182,7 @@ dependencies = [ "actix-router", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -345,7 +345,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -405,7 +405,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -480,9 +480,9 @@ checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" [[package]] name = "bytestring" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d80203ea6b29df88012294f62733de21cfeab47f17b41af3a38bc30a03ee72" +checksum = "e465647ae23b2823b0753f50decb2d5a86d2bb2cac04788fafd1f80e45378e5f" dependencies = [ "bytes", ] @@ -584,9 +584,9 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca741a962e1b0bff6d724a1a0958b686406e853bb14061f218562e1896f95e6" +checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" dependencies = [ "libc", ] @@ -687,7 +687,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -698,7 +698,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -707,6 +707,7 @@ version = "0.1.0" dependencies = [ "actix-web", "bcrypt", + "dotenv", "env_logger", "log", "mysql", @@ -737,7 +738,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -748,7 +749,7 @@ checksum = "65f152f4b8559c4da5d574bafc7af85454d706b4c5fe8b530d508cacbb6807ea" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -769,9 +770,15 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] +[[package]] +name = "dotenv" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" + [[package]] name = "either" version = "1.13.0" @@ -898,7 +905,7 @@ checksum = "e99b8b3c28ae0e84b604c75f721c21dc77afb3706076af5e8216d15fd1deaae3" dependencies = [ "frunk_proc_macro_helpers", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -910,7 +917,7 @@ dependencies = [ "frunk_core", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -922,7 +929,7 @@ dependencies = [ "frunk_core", "frunk_proc_macro_helpers", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -1198,7 +1205,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -1273,9 +1280,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "540654e97a3f4470a492cd30ff187bc95d89557a903a2bbf112e2fae98104ef2" [[package]] name = "jobserver" @@ -1339,9 +1346,9 @@ checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "litemap" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" [[package]] name = "local-channel" @@ -1463,7 +1470,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", "termcolor", "thiserror", ] @@ -1615,7 +1622,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -1742,14 +1749,14 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] name = "proc-macro2" -version = "1.0.89" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] @@ -1961,9 +1968,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.40" +version = "0.38.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99e4ea3e1cdc4b559b8e5650f9c8e5998e3e5c1343b4eaf034565f32318d63c0" +checksum = "d7f649912bc1495e167a6edee79151c84b1bad49748cb4f1f1167f459f6224f6" dependencies = [ "bitflags", "errno", @@ -1986,9 +1993,9 @@ checksum = "ece8e78b2f38ec51c51f5d475df0a7187ba5111b2a28bdc761ee05b075d40a71" [[package]] name = "schannel" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01227be5826fa0690321a2ba6c5cd57a19cf3f6a09e76973b58e61de6ab9d1c1" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ "windows-sys 0.59.0", ] @@ -2060,7 +2067,7 @@ checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -2202,9 +2209,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.87" +version = "2.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" +checksum = "44d46482f1c1c87acd84dea20c1bf5ebff4c757009ed6bf19cfd36fb10e92c4e" dependencies = [ "proc-macro2", "quote", @@ -2219,7 +2226,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -2267,7 +2274,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] @@ -2412,15 +2419,15 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unicode-ident" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" [[package]] name = "url" -version = "2.5.3" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d157f1b96d14500ffdc1f10ba712e780825526c03d9a49b4d0324b0d9113ada" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", @@ -2611,9 +2618,9 @@ dependencies = [ [[package]] name = "yoke" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" dependencies = [ "serde", "stable_deref_trait", @@ -2623,13 +2630,13 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", "synstructure", ] @@ -2651,27 +2658,27 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] name = "zerofrom" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", "synstructure", ] @@ -2700,7 +2707,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.89", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index ed6c979..ef571ff 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,3 +15,4 @@ bcrypt = "0.15.1" thiserror = "1.0" log = "0.4" env_logger = "0.9" +dotenv = "0.15" diff --git a/README.md b/README.md index 3bac069..e7354af 100644 --- a/README.md +++ b/README.md @@ -20,4 +20,12 @@ src/ |-- models/ # 模型层 |-- mod.rs |-- user.rs +``` + +``` +cargo build +cargo run + +# Windows +export RUST_LOG=info ``` \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 9a183ad..1b7b3b4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,24 +1,34 @@ use actix_web::{web, App, HttpServer}; +use dotenv::dotenv; use log::{error, info}; use r2d2_mysql::MySqlConnectionManager; +use std::env; use std::io; mod models; mod repositories; mod routes; mod services; -mod utils; use crate::routes::user_routes; #[actix_web::main] async fn main() -> io::Result<()> { env_logger::init(); + dotenv().ok(); - info!("Starting server!!!!!!!!"); + info!("rust demo -_- 正在启动中..."); + let db_url = env::var("DB_MYSQL_URL").unwrap(); + let db_port = env::var("DB_MYSQL_PORT").unwrap(); + let db_user = env::var("DB_MYSQL_USER").unwrap(); + let db_password = env::var("DB_MYSQL_PASSWORD").unwrap(); + let db_name = env::var("DB_MYSQL_NAME").unwrap(); - let url = "mysql://root:0andrx@122.152.201.90:9912/test_server"; - let opts = match r2d2_mysql::mysql::Opts::from_url(url) { + let url = format!( + "mysql://{}:{}@{}:{}/{}", + db_user, db_password, db_url, db_port, db_name + ); + let opts = match r2d2_mysql::mysql::Opts::from_url(&url) { Ok(opts) => opts, Err(e) => { eprintln!("Failed to parse MySQL connection URL: {}", e); diff --git a/src/models/mod.rs b/src/models/mod.rs index 4795a40..22d12a3 100644 --- a/src/models/mod.rs +++ b/src/models/mod.rs @@ -1,2 +1 @@ pub mod user; -pub mod user_input; diff --git a/src/models/user_input.rs b/src/models/user_input.rs deleted file mode 100644 index 33bd787..0000000 --- a/src/models/user_input.rs +++ /dev/null @@ -1,6 +0,0 @@ -#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] -pub struct UserInput { - pub account: Option, - pub name: Option, - pub password: Option, -} diff --git a/src/routes/user_routes.rs b/src/routes/user_routes.rs index fe2df8e..94fe10e 100644 --- a/src/routes/user_routes.rs +++ b/src/routes/user_routes.rs @@ -1,6 +1,6 @@ use crate::repositories::user_repository::UserRepository; use crate::services::user_service; -use crate::{models::user_input::UserInput, services::user_service::UserServiceError}; +use crate::{models::user::User, services::user_service::UserServiceError}; use actix_web::{post, web, HttpResponse, Responder}; use r2d2_mysql::MySqlConnectionManager; use serde::Serialize; @@ -16,14 +16,33 @@ pub(crate) fn register(config: &mut web::ServiceConfig) { config.service(register_user); } +#[derive(serde::Deserialize)] +struct UserFrom { + account: String, + name: String, + password: String, +} + #[post("/user/register")] async fn register_user( - user: web::Json, + user_from: web::Form, pool: web::Data>, ) -> impl Responder { let user_repository = UserRepository::new(pool.get_ref().clone()); let user_service = user_service::UserService::new(user_repository); - match user_service.create_user(&user) { + let user = User { + id: None, + account: Some(user_from.account.clone()), + name: Some(user_from.name.clone()), + birth: None, + email: None, + password: Some(user_from.password.clone()), + phone: None, + status: None, + created_time: None, + updated_time: None, + }; + match user_service.insert_user(&user) { Ok(_) => HttpResponse::Ok().json(ApiResponse { status: "success".to_string(), message: Some("User created successfully".to_string()), diff --git a/src/services/user_service.rs b/src/services/user_service.rs index 64943b7..97a5f4b 100644 --- a/src/services/user_service.rs +++ b/src/services/user_service.rs @@ -1,5 +1,5 @@ use crate::{ - models::user_input::UserInput, + models::user::User, repositories::user_repository::{UserRepository, UserRepositoryError}, }; use bcrypt::{hash, DEFAULT_COST}; @@ -8,17 +8,14 @@ use thiserror::Error; #[derive(Error, Debug)] pub enum UserServiceError { - #[error("mysql error: {0}")] + #[error("数据库异常: {0}")] MySqlError(#[from] UserRepositoryError), - #[error("Missing field: {0}")] + #[error("缺少字段: {0}")] MissingField(&'static str), - #[error("User already exists")] + #[error("用户已存在")] UserAlreadyExists, - - #[error("Password hashing failed: {0}")] - HashError(#[from] bcrypt::BcryptError), } pub struct UserService { @@ -31,9 +28,9 @@ impl UserService { } /** - * 新建用户 + * 插入用户 */ - pub fn create_user(&self, user: &UserInput) -> Result<(), UserServiceError> { + pub fn insert_user(&self, user: &User) -> Result<(), UserServiceError> { let account = user .account .as_ref() diff --git a/src/utils/mod.rs b/src/utils/mod.rs deleted file mode 100644 index 60f0c7a..0000000 --- a/src/utils/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod pool; \ No newline at end of file diff --git a/src/utils/pool.rs b/src/utils/pool.rs deleted file mode 100644 index e69de29..0000000