diff --git a/proto/uctovnictvo.proto b/proto/uctovnictvo.proto index fb549ef..816a642 100644 --- a/proto/uctovnictvo.proto +++ b/proto/uctovnictvo.proto @@ -7,6 +7,7 @@ import "adresar.proto"; service Uctovnictvo { rpc PostUctovnictvo (PostUctovnictvoRequest) returns (UctovnictvoResponse); + rpc GetUctovnictvo (GetUctovnictvoRequest) returns (UctovnictvoResponse); } message PostUctovnictvoRequest { @@ -37,3 +38,7 @@ message UctovnictvoResponse { string poznanka = 11; string firma = 12; } + +message GetUctovnictvoRequest { + int64 id = 1; +} diff --git a/src/proto/descriptor.bin b/src/proto/descriptor.bin index 155655a..b5d6e25 100644 Binary files a/src/proto/descriptor.bin and b/src/proto/descriptor.bin differ diff --git a/src/server/mod.rs b/src/server/mod.rs index 1e4e40d..7dc92d2 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -4,7 +4,7 @@ use tonic_reflection::server::Builder as ReflectionBuilder; use crate::adresar::handlers::{ post_adresar, get_adresar, put_adresar, delete_adresar, get_adresar_count, get_adresar_by_position, get_table_structure }; -use crate::uctovnictvo::handlers::post_uctovnictvo; +use crate::uctovnictvo::handlers::{post_uctovnictvo, get_uctovnictvo}; // Update this line use crate::proto::multieko2::{ FILE_DESCRIPTOR_SET, }; @@ -16,7 +16,7 @@ use crate::proto::multieko2::adresar::{ }; use crate::proto::multieko2::uctovnictvo::{ uctovnictvo_server::{Uctovnictvo, UctovnictvoServer}, - PostUctovnictvoRequest, UctovnictvoResponse + PostUctovnictvoRequest, UctovnictvoResponse, GetUctovnictvoRequest // Add this import }; pub struct AdresarService { @@ -95,6 +95,15 @@ impl Uctovnictvo for UctovnictvoService { let response = post_uctovnictvo(&self.db_pool, request.into_inner()).await?; Ok(Response::new(response)) } + + // Add this method + async fn get_uctovnictvo( + &self, + request: Request, + ) -> Result, Status> { + let response = get_uctovnictvo(&self.db_pool, request.into_inner()).await?; + Ok(Response::new(response)) + } } pub async fn run_server(db_pool: sqlx::PgPool) -> Result<(), Box> { diff --git a/src/uctovnictvo/docs/get_examples.txt b/src/uctovnictvo/docs/get_examples.txt new file mode 100644 index 0000000..cac59cc --- /dev/null +++ b/src/uctovnictvo/docs/get_examples.txt @@ -0,0 +1,17 @@ +❯ grpcurl -plaintext -d '{ + "id": 1 +}' localhost:50051 multieko2.uctovnictvo.Uctovnictvo/GetUctovnictvo +{ + "id": "1", + "adresarId": "1", + "cDokladu": "DOC123", + "datum": "01.10.2023", + "cFaktury": "INV123", + "obsah": "Sample content", + "stredisko": "Center A", + "cUctu": "ACC123", + "md": "MD123", + "identif": "ID123", + "poznanka": "Sample note", + "firma": "AAA" +} diff --git a/src/uctovnictvo/handlers.rs b/src/uctovnictvo/handlers.rs index f3a32d1..807ed00 100644 --- a/src/uctovnictvo/handlers.rs +++ b/src/uctovnictvo/handlers.rs @@ -1,5 +1,7 @@ // src/uctovnictvo/handlers.rs pub mod post_uctovnictvo; +pub mod get_uctovnictvo; // Add this line pub use post_uctovnictvo::post_uctovnictvo; +pub use get_uctovnictvo::get_uctovnictvo; // Add this line diff --git a/src/uctovnictvo/handlers/get_uctovnictvo.rs b/src/uctovnictvo/handlers/get_uctovnictvo.rs new file mode 100644 index 0000000..474a3e1 --- /dev/null +++ b/src/uctovnictvo/handlers/get_uctovnictvo.rs @@ -0,0 +1,51 @@ +// src/uctovnictvo/handlers/get_uctovnictvo.rs +use tonic::Status; +use sqlx::PgPool; +use crate::uctovnictvo::models::Uctovnictvo; +use crate::proto::multieko2::uctovnictvo::{GetUctovnictvoRequest, UctovnictvoResponse}; + +pub async fn get_uctovnictvo( + db_pool: &PgPool, + request: GetUctovnictvoRequest, +) -> Result { + let uctovnictvo = sqlx::query_as!( + Uctovnictvo, + r#" + SELECT + id, + deleted, + adresar_id, + c_dokladu, + datum as "datum: chrono::NaiveDate", + c_faktury, + obsah, + stredisko, + c_uctu, + md, + identif, + poznanka, + firma + FROM uctovnictvo + WHERE id = $1 + "#, + request.id + ) + .fetch_one(db_pool) + .await + .map_err(|e| Status::not_found(e.to_string()))?; + + Ok(UctovnictvoResponse { + id: uctovnictvo.id, + adresar_id: uctovnictvo.adresar_id, + c_dokladu: uctovnictvo.c_dokladu, + datum: uctovnictvo.datum.format("%d.%m.%Y").to_string(), + c_faktury: uctovnictvo.c_faktury, + obsah: uctovnictvo.obsah.unwrap_or_default(), + stredisko: uctovnictvo.stredisko.unwrap_or_default(), + c_uctu: uctovnictvo.c_uctu.unwrap_or_default(), + md: uctovnictvo.md.unwrap_or_default(), + identif: uctovnictvo.identif.unwrap_or_default(), + poznanka: uctovnictvo.poznanka.unwrap_or_default(), + firma: uctovnictvo.firma, + }) +}