From 7ddba306e8b5732c22e2a65bc625e38d96398d87 Mon Sep 17 00:00:00 2001 From: fish Date: Mon, 13 Apr 2026 20:51:26 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=9F=E4=B8=80=E6=8E=A5=E5=8F=A3=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E6=A0=BC=E5=BC=8F=E4=B8=BA=20success/message/data=20?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user-service/user-register/src/main.rs | 82 +++++++++++-------- 1 file changed, 47 insertions(+), 35 deletions(-) diff --git a/services/user-service/user-register/src/main.rs b/services/user-service/user-register/src/main.rs index 7a79381..80e08d0 100644 --- a/services/user-service/user-register/src/main.rs +++ b/services/user-service/user-register/src/main.rs @@ -2,7 +2,7 @@ use axum::{ extract::State, http::StatusCode, response::Json, - routing::post, + routing::{get, post}, Router, }; use bcrypt::hash; @@ -28,60 +28,65 @@ struct RegisterRequest { } #[derive(Serialize)] -struct RegisterResponse { +struct ApiResponse { success: bool, - user_id: Option, message: String, + data: Option, +} + +#[derive(Serialize)] +struct RegisterData { + user_id: Uuid, } #[tokio::main] async fn main() { tracing_subscriber::fmt::init(); - + info!("Starting user-register service..."); - + let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set"); let pool = sqlx::postgres::PgPool::connect(&database_url) .await .expect("Failed to connect to database"); - + info!("Database connected"); - + let state = Arc::new(AppState { db: pool }); - + let app = Router::new() .route("/register", post(register_handler)) - .route("/health", axum::routing::get(health_handler)) + .route("/health", get(health_handler)) .with_state(state); - + let port = env::var("SERVICE_PORT").unwrap_or_else(|_| "8080".to_string()); let listener = tokio::net::TcpListener::bind(format!("0.0.0.0:{}", port)) .await .unwrap(); - + info!("User-register service listening on port {}", port); - + axum::serve(listener, app).await.unwrap(); } async fn register_handler( State(state): State>, Json(payload): Json, -) -> (StatusCode, Json) { +) -> (StatusCode, Json>) { info!("Registration attempt for user: {}", payload.username); - + // 参数校验 if let Err(e) = payload.validate() { return ( StatusCode::BAD_REQUEST, - Json(RegisterResponse { + Json(ApiResponse { success: false, - user_id: None, message: format!("Validation error: {}", e), + data: None, }), ); } - + // 检查账号是否已存在 let existing: Option<(Uuid,)> = sqlx::query_as( "SELECT id FROM user_login_account WHERE account = $1 AND deleted = FALSE" @@ -94,10 +99,10 @@ async fn register_handler( if existing.is_some() { return ( StatusCode::CONFLICT, - Json(RegisterResponse { + Json(ApiResponse { success: false, - user_id: None, message: "Username already exists".to_string(), + data: None, }), ); } @@ -109,10 +114,10 @@ async fn register_handler( warn!("Password hashing failed: {}", e); return ( StatusCode::INTERNAL_SERVER_ERROR, - Json(RegisterResponse { + Json(ApiResponse { success: false, - user_id: None, message: "Internal error".to_string(), + data: None, }), ); } @@ -125,10 +130,10 @@ async fn register_handler( warn!("Transaction start failed: {}", e); return ( StatusCode::INTERNAL_SERVER_ERROR, - Json(RegisterResponse { + Json(ApiResponse { success: false, - user_id: None, message: "Internal error".to_string(), + data: None, }), ); } @@ -147,10 +152,10 @@ async fn register_handler( let _ = tx.rollback().await; return ( StatusCode::INTERNAL_SERVER_ERROR, - Json(RegisterResponse { + Json(ApiResponse { success: false, - user_id: None, message: "Registration failed".to_string(), + data: None, }), ); } @@ -169,10 +174,10 @@ async fn register_handler( let _ = tx.rollback().await; return ( StatusCode::INTERNAL_SERVER_ERROR, - Json(RegisterResponse { + Json(ApiResponse { success: false, - user_id: None, message: "Registration failed".to_string(), + data: None, }), ); } @@ -191,10 +196,10 @@ async fn register_handler( let _ = tx.rollback().await; return ( StatusCode::INTERNAL_SERVER_ERROR, - Json(RegisterResponse { + Json(ApiResponse { success: false, - user_id: None, message: "Registration failed".to_string(), + data: None, }), ); } @@ -204,10 +209,10 @@ async fn register_handler( info!("User {} registered with id {}", payload.username, user_id); ( StatusCode::CREATED, - Json(RegisterResponse { + Json(ApiResponse { success: true, - user_id: Some(user_id), message: "User registered successfully".to_string(), + data: Some(RegisterData { user_id }), }), ) } @@ -215,16 +220,23 @@ async fn register_handler( warn!("Registration failed: {}", e); ( StatusCode::INTERNAL_SERVER_ERROR, - Json(RegisterResponse { + Json(ApiResponse { success: false, - user_id: None, message: "Registration failed".to_string(), + data: None, }), ) } } } -async fn health_handler() -> &'static str { - "OK" +async fn health_handler() -> (StatusCode, Json>) { + ( + StatusCode::OK, + Json(ApiResponse { + success: true, + message: "OK".to_string(), + data: None, + }), + ) }