diff --git a/src/user/api.rs b/src/user/api.rs index 83e9da8..d76cd38 100644 --- a/src/user/api.rs +++ b/src/user/api.rs @@ -2,7 +2,7 @@ use poem::web::Data; use poem_openapi::{param::Path, payload::Json, OpenApi}; use slab::Slab; -use tokio::sync::Mutex; +use tokio::sync::RwLock; use tracing::info; use crate::CACHE; @@ -11,7 +11,7 @@ use super::*; #[derive(Default)] pub(crate) struct Api { - users: Mutex>, + users: RwLock>, } #[OpenApi] @@ -26,7 +26,7 @@ impl Api { let rt = m_guard.get(&"token".to_string()).unwrap(); info!("refresh_token is {}", rt); - let mut users = self.users.lock().await; + let mut users = self.users.write().await; let id = users.insert(user.0) as i64; CreateUserResponse::Ok(Json(id)) } @@ -34,7 +34,7 @@ impl Api { /// Find user by id #[oai(path = "/users/:user_id", method = "get", tag = "ApiTags::User")] async fn find_user(&self, user_id: Path) -> FindUserResponse { - let users = self.users.lock().await; + let users = self.users.read().await; match users.get(user_id.0 as usize) { Some(user) => FindUserResponse::Ok(Json(user.clone())), None => FindUserResponse::NotFound, @@ -44,7 +44,7 @@ impl Api { /// Delete user by id #[oai(path = "/users/:user_id", method = "delete", tag = "ApiTags::User")] async fn delete_user(&self, user_id: Path) -> DeleteUserResponse { - let mut users = self.users.lock().await; + let mut users = self.users.write().await; let user_id = user_id.0 as usize; if users.contains(user_id) { users.remove(user_id); @@ -57,7 +57,7 @@ impl Api { /// Update user by id #[oai(path = "/users/:user_id", method = "put", tag = "ApiTags::User")] async fn put_user(&self, user_id: Path, update: Json) -> UpdateUserResponse { - let mut users = self.users.lock().await; + let mut users = self.users.write().await; match users.get_mut(user_id.0 as usize) { Some(user) => { if let Some(name) = update.0.name {