From 49b4eb833905e6f4abced9551b4cf20d0e7558b4 Mon Sep 17 00:00:00 2001 From: paulobressan Date: Wed, 2 Oct 2024 15:02:59 -0300 Subject: [PATCH] feat: implemented find by namespace grpc --- Cargo.lock | 2 +- src/domain/project/command.rs | 8 ++++++++ src/drivers/grpc/project.rs | 21 +++++++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 2cf6f5c..6e756e0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -965,7 +965,7 @@ dependencies = [ [[package]] name = "dmtri" version = "0.1.0" -source = "git+https://github.com/demeter-run/specs.git#5c513a5faf70119bf2f437a28c0a9bbf3c20f8a9" +source = "git+https://github.com/demeter-run/specs.git#9e8fce748e00388d1509d6aad88040ce85c4d98b" dependencies = [ "bytes", "pbjson", diff --git a/src/domain/project/command.rs b/src/domain/project/command.rs index 5e52ee2..e8eb42d 100644 --- a/src/domain/project/command.rs +++ b/src/domain/project/command.rs @@ -504,6 +504,14 @@ pub struct FetchByNamespaceCmd { pub credential: Credential, pub namespace: String, } +impl FetchByNamespaceCmd { + pub fn new(credential: Credential, namespace: String) -> Self { + Self { + credential, + namespace, + } + } +} #[derive(Debug, Clone)] pub struct CreateCmd { diff --git a/src/drivers/grpc/project.rs b/src/drivers/grpc/project.rs index 630e7fb..c72a2b0 100644 --- a/src/drivers/grpc/project.rs +++ b/src/drivers/grpc/project.rs @@ -66,6 +66,27 @@ impl proto::project_service_server::ProjectService for ProjectServiceImpl { Ok(tonic::Response::new(message)) } + async fn fetch_project_by_namespace( + &self, + request: tonic::Request, + ) -> Result, tonic::Status> { + let credential = match request.extensions().get::() { + Some(credential) => credential.clone(), + None => return Err(Status::unauthenticated("invalid credential")), + }; + + let req = request.into_inner(); + + let cmd = project::command::FetchByNamespaceCmd::new(credential, req.namespace); + + let project = project::command::fetch_by_namespace(self.cache.clone(), cmd.clone()).await?; + + let message = proto::FetchProjectByNamespaceResponse { + records: vec![project.into()], + }; + + Ok(tonic::Response::new(message)) + } async fn create_project( &self,