summaryrefslogtreecommitdiffstats
path: root/crates/users-service/src
diff options
context:
space:
mode:
Diffstat (limited to 'crates/users-service/src')
-rw-r--r--crates/users-service/src/server/manager.rs30
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))
+ }
}