123 lines
3.4 KiB
Rust
123 lines
3.4 KiB
Rust
// 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<String> {
|
|
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<AdresarResponse, Status> {
|
|
// 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(),
|
|
})
|
|
}
|