diff options
Diffstat (limited to 'crates/users-service/src/server/manager.rs')
-rw-r--r-- | crates/users-service/src/server/manager.rs | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/crates/users-service/src/server/manager.rs b/crates/users-service/src/server/manager.rs index 05ee4fe..add385f 100644 --- a/crates/users-service/src/server/manager.rs +++ b/crates/users-service/src/server/manager.rs @@ -1,7 +1,7 @@ use prost::Message; use sellershut_core::users::{ - CompleteUserRequest, CreateUserRequest, CreateUserResponse, User, UserType, - users_service_server::UsersService, + CompleteUserRequest, CreateUserRequest, CreateUserResponse, GetUserRequest, GetUserResponse, + User, UserType, users_service_server::UsersService, }; use stack_up::redis::AsyncCommands; use time::OffsetDateTime; @@ -132,4 +132,30 @@ impl UsersService for AppHandle { Ok(Response::new(user)) } + + async fn get_user( + &self, + request: Request<GetUserRequest>, + ) -> Result<Response<GetUserResponse>, Status> { + let inner = request.into_inner().id; + + let mut cache = self.cache().await?; + let resp = cache.get::<_, Vec<u8>>(inner).await.unwrap(); + // TODO: read from cache + + let user = sqlx::query_as!(DbUser, "select * from profile where id = $1", inner) + .fetch_optional(&self.services.postgres) + .await + .map_err(|_e| Status::internal("storage error"))?; + // TODO: save to cache + + let resp = GetUserResponse { + user: match user { + Some(user) => Some(User::try_from(user)?), + None => None, + }, + }; + + Ok(Response::new(resp)) + } } |