Skip to content

Commit

Permalink
初步完成控制台用户管理增删查改接口 issue #29
Browse files Browse the repository at this point in the history
  • Loading branch information
heqingpan committed Dec 6, 2023
1 parent e83d687 commit c65f27f
Show file tree
Hide file tree
Showing 5 changed files with 97 additions and 3 deletions.
4 changes: 2 additions & 2 deletions src/common/model/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ where

#[derive(Debug, Default, Deserialize, Serialize)]
pub struct PageResult<T> {
size: usize,
list: Vec<T>,
pub size: usize,
pub list: Vec<T>,
}

#[derive(Debug, Default, Clone, Deserialize, Serialize)]
Expand Down
4 changes: 4 additions & 0 deletions src/console/api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,10 @@ pub fn app_config(config: &mut web::ServiceConfig) {
.service(web::resource("/login/captcha").route(web::get().to(login_api::gen_captcha)))
.service(web::resource("/login/logout").route(web::post().to(login_api::logout)))
.service(web::resource("/user/info").route(web::get().to(user_api::get_user_info)))
.service(web::resource("/user/list").route(web::get().to(user_api::get_user_page_list)))
.service(web::resource("/user/add").route(web::post().to(user_api::add_user)))
.service(web::resource("/user/update").route(web::post().to(user_api::update_user)))
.service(web::resource("/user/remove").route(web::post().to(user_api::remove_user)))
.service(
web::resource("/user/reset_password")
.route(web::post().to(user_api::reset_password)),
Expand Down
9 changes: 9 additions & 0 deletions src/console/model/user_model.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,12 @@ pub struct UserInfo {
pub username: Option<Arc<String>>,
pub nickname: Option<String>,
}

#[derive(Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct PageParams {
pub like_username: Option<String>,
pub offset: Option<i64>,
pub limit: Option<i64>,
pub is_rev: Option<bool>,
}
68 changes: 67 additions & 1 deletion src/console/user_api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,13 @@ use serde::{Deserialize, Serialize};
use crate::{
common::{
appdata::AppShareData,
model::{ApiResult, UserSession},
model::{ApiResult, PageResult, UserSession},
},
user::{model::UserDto, UserManagerReq, UserManagerResult},
};

use super::model::user_model::PageParams;

#[derive(Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ResetPasswordParam {
Expand Down Expand Up @@ -76,3 +78,67 @@ pub async fn reset_password(
)))
}
}

pub async fn get_user_page_list(
app: Data<Arc<AppShareData>>,
web::Query(param): web::Query<PageParams>,
) -> actix_web::Result<impl Responder> {
let msg = UserManagerReq::QueryPageList {
like_username: param.like_username,
offset: param.offset,
limit: param.limit,
is_rev: param.is_rev.unwrap_or_default(),
};
match app.user_manager.send(msg).await.unwrap().unwrap() {
UserManagerResult::UserPageResult(size, list) => {
Ok(HttpResponse::Ok().json(ApiResult::success(Some(PageResult { size, list }))))
}
_ => Ok(HttpResponse::Ok().json(ApiResult::<()>::error(
"NOT_FOUND_USER_SESSION".to_owned(),
Some("result type is error".to_owned()),
))),
}
}

pub async fn add_user(
app: Data<Arc<AppShareData>>,
web::Form(user): web::Form<UserDto>,
) -> actix_web::Result<impl Responder> {
let msg = UserManagerReq::AddUser {
user: UserDto {
username: user.username,
password: Some(user.password.unwrap()),
gmt_create: None,
gmt_modified: None,
..user
},
};
app.user_manager.send(msg).await.ok();
Ok(HttpResponse::Ok().json(ApiResult::success(Some(true))))
}

pub async fn update_user(
app: Data<Arc<AppShareData>>,
web::Form(user): web::Form<UserDto>,
) -> actix_web::Result<impl Responder> {
let msg = UserManagerReq::UpdateUser {
user: UserDto {
username: user.username,
gmt_create: None,
..user
},
};
app.user_manager.send(msg).await.ok();
Ok(HttpResponse::Ok().json(ApiResult::success(Some(true))))
}

pub async fn remove_user(
app: Data<Arc<AppShareData>>,
web::Form(user): web::Form<UserDto>,
) -> actix_web::Result<impl Responder> {
let msg = UserManagerReq::Remove {
username: user.username,
};
app.user_manager.send(msg).await.ok();
Ok(HttpResponse::Ok().json(ApiResult::success(Some(true))))
}
15 changes: 15 additions & 0 deletions src/user/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,9 @@ pub enum UserManagerReq {
name: Arc<String>,
password: String,
},
Remove {
username: Arc<String>,
},
Query {
name: Arc<String>,
},
Expand All @@ -179,6 +182,7 @@ pub enum UserManagerReq {
}

pub enum UserManagerInnerCtx {
None,
UpdateUser { key: Arc<String>, value: UserDo },
CheckUserResult(Arc<String>, bool, UserDo),
QueryUser(Arc<String>, Option<UserDo>),
Expand Down Expand Up @@ -303,6 +307,16 @@ impl Handler<UserManagerReq> for UserManager {
last_user,
))
}
UserManagerReq::Remove { username } => {
let req = TableManagerReq::Remove {
table_name: USER_TABLE_NAME.clone(),
key: username.as_bytes().to_owned(),
};
if let Some(raft_table_route) = raft_table_route {
raft_table_route.request(req).await.ok();
}
Ok(UserManagerInnerCtx::None)
}
UserManagerReq::Query { name } => {
if query_info_at_cache {
Ok(UserManagerInnerCtx::QueryUser(name, None))
Expand Down Expand Up @@ -357,6 +371,7 @@ impl Handler<UserManagerReq> for UserManager {
.into_actor(self)
.map(
|res: anyhow::Result<UserManagerInnerCtx>, _act, _ctx| match res? {
UserManagerInnerCtx::None => Ok(UserManagerResult::None),
UserManagerInnerCtx::UpdateUser { key: _, value: _ } => {
//act.cache.set(key, Arc::new(value), act.cache_sec);
Ok(UserManagerResult::None)
Expand Down

0 comments on commit c65f27f

Please sign in to comment.