From 52746c0ec1cc5f2080541241db53e7a0614db43e Mon Sep 17 00:00:00 2001 From: filipriec Date: Mon, 17 Feb 2025 21:34:12 +0100 Subject: [PATCH] get adresar method is now working --- Cargo.lock | 14 ++++++++++ Cargo.toml | 1 + build.rs | 8 ++++-- proto/api.proto | 5 ++++ src/adresar/handlers.rs | 3 ++ src/adresar/handlers/get_adresar.rs | 42 ++++++++++++++++++++++++++++ src/proto/descriptor.bin | Bin 0 -> 3380 bytes src/proto/mod.rs | 4 +++ src/server/mod.rs | 21 ++++++++++++-- 9 files changed, 94 insertions(+), 4 deletions(-) create mode 100644 src/adresar/handlers/get_adresar.rs create mode 100644 src/proto/descriptor.bin diff --git a/Cargo.lock b/Cargo.lock index 079904a..5ba30b2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1377,6 +1377,7 @@ dependencies = [ "toml", "tonic", "tonic-build", + "tonic-reflection", "tracing", "tracing-subscriber", ] @@ -2665,6 +2666,19 @@ dependencies = [ "syn", ] +[[package]] +name = "tonic-reflection" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "878d81f52e7fcfd80026b7fdb6a9b578b3c3653ba987f87f0dce4b64043cba27" +dependencies = [ + "prost", + "prost-types", + "tokio", + "tokio-stream", + "tonic", +] + [[package]] name = "tower" version = "0.4.13" diff --git a/Cargo.toml b/Cargo.toml index 9b52bce..cb09ae3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,6 +19,7 @@ tokio = { version = "1.43.0", features = ["full", "macros"] } toml = "0.8.20" tonic = "0.12.3" tonic-build = "0.12.3" +tonic-reflection = "0.12.3" tracing = "0.1.41" tracing-subscriber = "0.3.19" diff --git a/build.rs b/build.rs index 1f5f767..96d5fa7 100644 --- a/build.rs +++ b/build.rs @@ -1,4 +1,8 @@ // build.rs -fn main() { - tonic_build::compile_protos("proto/api.proto").unwrap(); +fn main() -> Result<(), Box> { + tonic_build::configure() + .build_server(true) + .file_descriptor_set_path("src/proto/descriptor.bin") // Generate the file descriptor set + .compile_protos(&["proto/api.proto"], &["proto"])?; // Use compile_protos() instead of compile() + Ok(()) } diff --git a/proto/api.proto b/proto/api.proto index 9d8a00c..ebe0ec4 100644 --- a/proto/api.proto +++ b/proto/api.proto @@ -9,6 +9,11 @@ service DataProcessor { service Adresar { rpc CreateAdresar (AdresarRequest) returns (AdresarResponse); + rpc GetAdresar (GetAdresarRequest) returns (AdresarResponse); +} + +message GetAdresarRequest { + int64 id = 1; // The ID of the Adresar entry to retrieve } message AdresarRequest { diff --git a/src/adresar/handlers.rs b/src/adresar/handlers.rs index 18bb451..3c235c5 100644 --- a/src/adresar/handlers.rs +++ b/src/adresar/handlers.rs @@ -1,4 +1,7 @@ // src/adresar/handlers.rs pub mod create_adresar; +pub mod get_adresar; + pub use create_adresar::create_adresar; +pub use get_adresar::get_adresar; diff --git a/src/adresar/handlers/get_adresar.rs b/src/adresar/handlers/get_adresar.rs new file mode 100644 index 0000000..d4b8064 --- /dev/null +++ b/src/adresar/handlers/get_adresar.rs @@ -0,0 +1,42 @@ +// src/adresar/handlers/get_adresar.rs +use tonic::{Request, Response, Status}; +use sqlx::PgPool; +use crate::adresar::models::Adresar; +use crate::proto::multieko2::{GetAdresarRequest, AdresarResponse}; + +pub async fn get_adresar( + db_pool: &PgPool, + request: GetAdresarRequest, +) -> Result { + let adresar = sqlx::query_as!( + Adresar, + r#" + SELECT id, firma, kz, drc, ulica, psc, mesto, stat, banka, ucet, skladm, ico, kontakt, telefon, skladu, fax + FROM adresar + WHERE id = $1 + "#, + request.id + ) + .fetch_one(db_pool) + .await + .map_err(|e| Status::not_found(e.to_string()))?; + + Ok(AdresarResponse { + id: adresar.id, + firma: adresar.firma, + kz: adresar.kz.unwrap_or_default(), + drc: adresar.drc.unwrap_or_default(), + ulica: adresar.ulica.unwrap_or_default(), + psc: adresar.psc.unwrap_or_default(), + mesto: adresar.mesto.unwrap_or_default(), + stat: adresar.stat.unwrap_or_default(), + banka: adresar.banka.unwrap_or_default(), + ucet: adresar.ucet.unwrap_or_default(), + skladm: adresar.skladm.unwrap_or_default(), + ico: adresar.ico.unwrap_or_default(), + kontakt: adresar.kontakt.unwrap_or_default(), + telefon: adresar.telefon.unwrap_or_default(), + skladu: adresar.skladu.unwrap_or_default(), + fax: adresar.fax.unwrap_or_default(), + }) +} diff --git a/src/proto/descriptor.bin b/src/proto/descriptor.bin new file mode 100644 index 0000000000000000000000000000000000000000..dcd60860cbcd075bc1142fd66595b147b00201af GIT binary patch literal 3380 zcmaKu+j8SX5QeRpu`G>zh{sN>I437;HfJYsvTP^<)D~My!3|W3d&-+Ag)0XKTc&_F z;W2m*UV+Epp1)^Coot}Eih8EM?&)9iE7pH>bv%3+^&ckVd~D*o*=;_`ZpMR+k96~^ zEPrz~$)>}}MfTGyo93pj#po&xdcn55z|+Q`Lf4@v&K*k#hQSmukD}BkDf79H)t0q(_tL%FXybAKv6? z)vgvH?c~{Qc0ImNYi`GfTz!_-pH!bw_3Pm;X~R{=g%L*Vza(Z%4hmIDV^A?uT#=$%?jLkDWB=A@n!ZK5x9zRhQ!B-_&(j<1(90 zv#TGTWY>6=(g)w_8vXswrH&`&bDj8r*3Cknoz#;P*gR{8cdTbnVMY zHq5hPVetvY_r*H2+x@RCKg&C9asD>7Z(4P%_zM!Ct8IiQ8F?VuXR@ACX7+V zBr-mc#z@))7640tVJL;6>ZLh*3Pr8z(W3rXD`kgjsOH8_@B1IK-q&w?{3lPsT%vY#_ey@)Ft*-&v2p=JZmeh-}+jXB#H^PAF!>rAIL(E<&k?EEcd zC#C@9TFMo7YP6C$TMiM*wOVbDp+;NTiGc;c+Kf^Cc2e^g&EKADdJNLctCrsqz~&hf zz~+;Bu?K9vX*`Btfe$HxEifj5E$|^FW%41Fksa=)fOQyCz&hMb0qbx#B&OW0Y@1h$yat0_aS5ZIz=`PnK)cDY*xSeLO1ur7D20PAwM z$jBw`76DsgECRN~-6CL1+$}b8S#|tDVqnXR#lV&m>m?jA2DaQTZizN>g}Z5BD~xGi zE3Bjjw$dzSON?AqsqdBmTV*T(wwe?-C;_%Q-|>>*BeBL<71$bMRbXq3Re`NBRx`54 zv(+-q1-0?Nj?-*#>h~8#>h~8?nZ{{;|G&_-7wUlzpFx!p$-`% zLmm3NialV5{;moELmlyKWT+#?$WTYDBpK?+`%nlN>ew3!0kC7n$WX`LP}l=@>, + ) -> Result, Status> { + let response = get_adresar(&self.db_pool, request.into_inner()).await?; + Ok(Response::new(response)) + } } pub async fn run_server(db_pool: sqlx::PgPool) -> Result<(), Box> { @@ -28,8 +38,15 @@ pub async fn run_server(db_pool: sqlx::PgPool) -> Result<(), Box