diff --git a/proto/api.proto b/proto/api.proto index ebe0ec4..4e685fb 100644 --- a/proto/api.proto +++ b/proto/api.proto @@ -10,6 +10,7 @@ service DataProcessor { service Adresar { rpc CreateAdresar (AdresarRequest) returns (AdresarResponse); rpc GetAdresar (GetAdresarRequest) returns (AdresarResponse); + rpc UpdateAdresar (UpdateAdresarRequest) returns (AdresarResponse); } message GetAdresarRequest { @@ -53,6 +54,25 @@ message AdresarResponse { string fax = 16; } +message UpdateAdresarRequest { + int64 id = 1; // The ID of the Adresar entry to update + string firma = 2; + string kz = 3; + string drc = 4; + string ulica = 5; + string psc = 6; + string mesto = 7; + string stat = 8; + string banka = 9; + string ucet = 10; + string skladm = 11; + string ico = 12; + string kontakt = 13; + string telefon = 14; + string skladu = 15; + string fax = 16; +} + message DataRequest { string data = 1; } diff --git a/src/adresar/handlers.rs b/src/adresar/handlers.rs index 3c235c5..aa44aa2 100644 --- a/src/adresar/handlers.rs +++ b/src/adresar/handlers.rs @@ -2,6 +2,8 @@ pub mod create_adresar; pub mod get_adresar; +pub mod update_adresar; pub use create_adresar::create_adresar; pub use get_adresar::get_adresar; +pub use update_adresar::update_adresar; diff --git a/src/adresar/handlers/update_adresar.rs b/src/adresar/handlers/update_adresar.rs new file mode 100644 index 0000000..8e8e728 --- /dev/null +++ b/src/adresar/handlers/update_adresar.rs @@ -0,0 +1,73 @@ +// src/adresar/handlers/update_adresar.rs +use tonic::{Request, Response, Status}; +use sqlx::PgPool; +use crate::adresar::models::Adresar; +use crate::proto::multieko2::{UpdateAdresarRequest, AdresarResponse}; + +pub async fn update_adresar( + db_pool: &PgPool, + request: UpdateAdresarRequest, +) -> Result { + let adresar = sqlx::query_as!( + Adresar, + r#" + UPDATE adresar + SET + firma = $2, + kz = $3, + drc = $4, + ulica = $5, + psc = $6, + mesto = $7, + stat = $8, + banka = $9, + ucet = $10, + skladm = $11, + ico = $12, + kontakt = $13, + telefon = $14, + skladu = $15, + fax = $16 + WHERE id = $1 + RETURNING id, firma, kz, drc, ulica, psc, mesto, stat, banka, ucet, skladm, ico, kontakt, telefon, skladu, fax + "#, + request.id, + request.firma, + request.kz, + request.drc, + request.ulica, + request.psc, + request.mesto, + request.stat, + request.banka, + request.ucet, + request.skladm, + request.ico, + request.kontakt, + request.telefon, + request.skladu, + request.fax + ) + .fetch_one(db_pool) + .await + .map_err(|e| Status::internal(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 index dcd6086..caba16b 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 7a1d79c..f20eb54 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -1,12 +1,12 @@ // src/server/mod.rs use tonic::{Request, Response, Status}; -use tonic_reflection::server::Builder as ReflectionBuilder; // Import tonic-reflection +use tonic_reflection::server::Builder as ReflectionBuilder; use crate::db; -use crate::adresar::handlers::{create_adresar, get_adresar}; +use crate::adresar::handlers::{create_adresar, get_adresar, update_adresar}; // Import the new handler use crate::proto::multieko2::{ - AdresarRequest, AdresarResponse, GetAdresarRequest, + AdresarRequest, AdresarResponse, GetAdresarRequest, UpdateAdresarRequest, adresar_server::{Adresar, AdresarServer}, - FILE_DESCRIPTOR_SET, // Import the generated file descriptor set + FILE_DESCRIPTOR_SET, }; pub struct AdresarService { @@ -30,6 +30,14 @@ impl Adresar for AdresarService { let response = get_adresar(&self.db_pool, request.into_inner()).await?; Ok(Response::new(response)) } + + async fn update_adresar( + &self, + request: Request, + ) -> Result, Status> { + let response = update_adresar(&self.db_pool, request.into_inner()).await?; + Ok(Response::new(response)) + } } pub async fn run_server(db_pool: sqlx::PgPool) -> Result<(), Box> { @@ -38,15 +46,14 @@ pub async fn run_server(db_pool: sqlx::PgPool) -> Result<(), Box