// src/adresar/handlers/put_adresar.rs use tonic::Status; use sqlx::PgPool; use crate::adresar::models::Adresar; use common::proto::multieko2::adresar::{PutAdresarRequest, AdresarResponse}; // Add the same sanitize_input helper as in POST handler fn sanitize_input(input: &str) -> Option { let trimmed = input.trim().to_string(); if trimmed.is_empty() { None } else { Some(trimmed) } } pub async fn put_adresar( db_pool: &PgPool, mut request: PutAdresarRequest, ) -> Result { // Add validation for required fields like in POST request.firma = request.firma.trim().to_string(); if request.firma.is_empty() { return Err(Status::invalid_argument("Firma je povinne pole")); } // Sanitize optional fields like in POST let kz = sanitize_input(&request.kz); let drc = sanitize_input(&request.drc); let ulica = sanitize_input(&request.ulica); let psc = sanitize_input(&request.psc); let mesto = sanitize_input(&request.mesto); let stat = sanitize_input(&request.stat); let banka = sanitize_input(&request.banka); let ucet = sanitize_input(&request.ucet); let skladm = sanitize_input(&request.skladm); let ico = sanitize_input(&request.ico); let kontakt = sanitize_input(&request.kontakt); let telefon = sanitize_input(&request.telefon); let skladu = sanitize_input(&request.skladu); let fax = sanitize_input(&request.fax); 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 AND deleted = FALSE RETURNING id, deleted, firma, kz, drc, ulica, psc, mesto, stat, banka, ucet, skladm, ico, kontakt, telefon, skladu, fax "#, request.id, request.firma, kz, drc, ulica, psc, mesto, stat, banka, ucet, skladm, ico, kontakt, telefon, skladu, 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(), }) }