tianyun 3 năm trước cách đây
mục cha
commit
f7516f78b5
7 tập tin đã thay đổi với 120 bổ sung12 xóa
  1. 1 1
      config.yaml
  2. 1 0
      src/module/mod.rs
  3. 22 10
      src/module/user/api.rs
  4. 40 0
      src/module/user/bs.rs
  5. 52 0
      src/module/user/dao.rs
  6. 2 0
      src/module/user/mod.rs
  7. 2 1
      src/module/user/model.rs

+ 1 - 1
config.yaml

@@ -3,6 +3,6 @@ server:
   log: data/logs/app/web.log
   env: dev
 postgres:
-  dsn: postgres://postgres:postgres@192.168.24.251:5432/postgres
+  dsn: postgres://postgres:postgres@127.0.0.1:5432/postgres
   min: 5
   max: 15

+ 1 - 0
src/module/mod.rs

@@ -8,6 +8,7 @@ pub mod handler {
 
     pub fn api_routes() -> impl HttpServiceFactory {
         web::scope("")
+            .service(user::api::list)
             .service(user::api::create)
             .service(user::api::show)
             .service(user::api::update)

+ 22 - 10
src/module/user/api.rs

@@ -2,37 +2,49 @@ use actix_web::{delete, get, HttpResponse, post, put, Responder, web};
 use actix_web::web::Json;
 
 use crate::module::user::model::User;
+use crate::module::user;
+
+/**
+ * 测试接口: 增
+ */
+#[get("/user/list")]
+pub async fn list() -> impl Responder {
+    let users = user::bs::list().await;
+    HttpResponse::Ok().json(users)
+}
 
 /**
  * 测试接口: 增
  */
 #[post("/user")]
 pub async fn create(user: Json<User>) -> impl Responder {
-    HttpResponse::Ok().json(user.0)
+    let rows = user::bs::create(user.0).await;
+    HttpResponse::Ok().json(rows)
 }
 
 /**
  * 测试接口: 查
  */
-#[get("/user/{id}}")]
-pub async fn show(web::Path(id): web::Path<i64>) -> impl Responder {
-    HttpResponse::Ok().json(id)
+#[get("/user/{id}")]
+pub async fn show(web::Path(id): web::Path<i32>) -> impl Responder {
+    let user = user::bs::show(id).await;
+    HttpResponse::Ok().json(user)
 }
 
 /**
  * 测试接口: 改
  */
 #[put("/user/{id}")]
-pub async fn update(web::Path(id): web::Path<i64>, user: Json<User>) -> impl Responder {
-    let mut user = user.into_inner();
-    user.id = Some(id);
-    HttpResponse::Ok().json(user)
+pub async fn update(web::Path(id): web::Path<i32>, user: Json<User>) -> impl Responder {
+    let rows = user::bs::update(id, user.into_inner()).await;
+    HttpResponse::Ok().json(rows)
 }
 
 /**
  * 测试接口: 删
  */
 #[delete("/user/{id}")]
-pub async fn delete(web::Path(id): web::Path<i64>) -> impl Responder {
-    HttpResponse::Ok().json(id)
+pub async fn delete(web::Path(id): web::Path<i32>) -> impl Responder {
+    let rows = user::bs::delete(id).await;
+    HttpResponse::Ok().json(rows)
 }

+ 40 - 0
src/module/user/bs.rs

@@ -0,0 +1,40 @@
+use crate::module::user;
+use crate::module::user::model::User;
+// use chrono::Local;
+
+/**
+ * 测试接口: 查 列表
+ */
+pub async fn list() -> Vec<User> {
+    let user = user::dao::list().await;
+    return user
+}
+
+/**
+ * 测试接口: 增
+ */
+pub async fn create(user: User) -> u64 {
+//    user.created_at = Some(Local::now().naive_utc());
+    user::dao::create(user).await
+}
+
+/**
+ * 测试接口: 查
+ */
+pub async fn show(id: i32) -> User {
+    user::dao::show(id).await
+}
+
+/**
+ * 测试接口: 改
+ */
+pub async fn update(id: i32, user: User) -> u64 {
+    user::dao::update(id, user).await
+}
+
+/**
+ * 测试接口: 删
+ */
+pub async fn delete(id: i32) -> u64 {
+    user::dao::delete(id).await
+}

+ 52 - 0
src/module/user/dao.rs

@@ -0,0 +1,52 @@
+use std::vec::Vec;
+
+use crate::boot::db;
+use crate::module::user::model::User;
+
+/**
+ * 测试接口: 查 列表
+ */
+pub async fn list() -> Vec<User> {
+    let pool = db::get_pool().unwrap();
+    sqlx::query_as::<_, User>("select id, email, username, password, avatar, created_at from users")
+        .fetch_all(pool).await.unwrap()
+}
+
+/**
+ * 测试接口: 增
+ */
+pub async fn create(user: User) -> u64 {
+    let pool = db::get_pool().unwrap();
+    sqlx::query("insert into users(email, username, password, avatar) values($1, $2, $3, $4)")
+        .bind(&user.email).bind(&user.username).bind(&user.password)
+        .bind(&user.avatar).execute(pool).await.unwrap().rows_affected()
+    // TODO: 1.最后插入的 主键 值; 2.最终使用 雪花 多数据中心算法
+}
+
+/**
+ * 测试接口: 查
+ */
+pub async fn show(id: i32) -> User {
+    let pool = db::get_pool().unwrap();
+    sqlx::query_as::<_, User>("select * from users where id = $1")
+        .bind(id).fetch_one(pool).await.unwrap()
+}
+
+/**
+ * 测试接口: 改
+ */
+pub async fn update(id: i32, user: User) -> u64 {
+    let pool = db::get_pool().unwrap();
+    let pg_done = sqlx::query("update users set password = $1 where id = $2")
+        .bind(&user.password).bind(id.clone()).execute(pool).await.unwrap();
+    println!("Hello {}! id: {}. result: {:?}", user.username, id, pg_done.rows_affected());
+    return pg_done.rows_affected();
+}
+
+/**
+ * 测试接口: 删
+ */
+pub async fn delete(id: i32) -> u64 {
+    let pool = db::get_pool().unwrap();
+    sqlx::query("delete from users where id = $1").bind(id).execute(pool).await.unwrap().rows_affected()
+}

+ 2 - 0
src/module/user/mod.rs

@@ -1,2 +1,4 @@
 pub mod api;
 pub mod model;
+pub mod bs;
+pub mod dao;

+ 2 - 1
src/module/user/model.rs

@@ -1,7 +1,8 @@
 use serde::{Deserialize, Serialize};
+use sqlx::FromRow;
 use validator::Validate;
 
-#[derive(Debug, Validate, Serialize, Deserialize)]
+#[derive(Debug, Validate, Serialize, Deserialize, FromRow)]
 pub struct User {
     pub id: Option<i64>,
     #[validate(length(max = 50, message = "username must be less than 50 chars."))]