diff --git a/server/src/adresar/docs/example.txt b/server/src/adresar/docs/example.txt deleted file mode 100644 index 8fff83f..0000000 --- a/server/src/adresar/docs/example.txt +++ /dev/null @@ -1,156 +0,0 @@ -❯ grpcurl -plaintext -d '{"id": 1}' localhost:50051 multieko2.adresar.Adresar/GetAdresar -{ - "id": "1", - "firma": "Updated Firma", - "kz": "Updated KZ", - "drc": "Updated DRC", - "ulica": "Updated Ulica", - "psc": "Updated PSC", - "mesto": "Updated Mesto", - "stat": "Updated Stat", - "banka": "Updated Banka", - "ucet": "Updated Ucet", - "skladm": "Updated Skladm", - "ico": "Updated ICO", - "kontakt": "Updated Kontakt", - "telefon": "Updated Telefon", - "skladu": "Updated Skladu", - "fax": "Updated Fax" -} -❯ grpcurl -plaintext -d '{"id": 2}' localhost:50051 multieko2.adresar.Adresar/GetAdresar -{ - "id": "2", - "firma": "asdfasf", - "kz": " ", - "drc": " ", - "ulica": " ", - "psc": "sdfasdf", - "mesto": "asf", - "stat": "as", - "banka": "df", - "ucet": "asf", - "skladm": "f", - "ico": "f", - "kontakt": "f", - "telefon": "f", - "skladu": "f", - "fax": " " -} -❯ grpcurl -plaintext -d '{"id": 1}' localhost:50051 multieko2.adresar.Adresar/DeleteAdresar -{ - "success": true -} -❯ grpcurl -plaintext -d '{"id": 1}' localhost:50051 multieko2.adresar.Adresar/GetAdresar -ERROR: - Code: NotFound - Message: no rows returned by a query that expected to return at least one row -❯ grpcurl -plaintext -d '{"id": 2}' localhost:50051 multieko2.adresar.Adresar/GetAdresar -{ - "id": "2", - "firma": "asdfasf", - "kz": " ", - "drc": " ", - "ulica": " ", - "psc": "sdfasdf", - "mesto": "asf", - "stat": "as", - "banka": "df", - "ucet": "asf", - "skladm": "f", - "ico": "f", - "kontakt": "f", - "telefon": "f", - "skladu": "f", - "fax": " " -} - -❯ grpcurl -plaintext -d '{ - "firma": "New Firma", - "kz": "New KZ", - "drc": "New DRC", - "ulica": "New Ulica", - "psc": "New PSC", - "mesto": "New Mesto", - "stat": "New Stat", - "banka": "New Banka", - "ucet": "New Ucet", - "skladm": "New Skladm", - "ico": "New ICO", - "kontakt": "New Kontakt", - "telefon": "New Telefon", - "skladu": "New Skladu", - "fax": "New Fax" -}' localhost:50051 multieko2.adresar.Adresar/PostAdresar -{ - "id": "43", - "firma": "New Firma", - "kz": "New KZ", - "drc": "New DRC", - "ulica": "New Ulica", - "psc": "New PSC", - "mesto": "New Mesto", - "stat": "New Stat", - "banka": "New Banka", - "ucet": "New Ucet", - "skladm": "New Skladm", - "ico": "New ICO", - "kontakt": "New Kontakt", - "telefon": "New Telefon", - "skladu": "New Skladu", - "fax": "New Fax" -} -❯ grpcurl -plaintext -d '{ - "id": 43, - "firma": "Updated Firma", - "kz": "Updated KZ", - "drc": "Updated DRC", - "ulica": "Updated Ulica", - "psc": "Updated PSC", - "mesto": "Updated Mesto", - "stat": "Updated Stat", - "banka": "Updated Banka", - "ucet": "Updated Ucet", - "skladm": "Updated Skladm", - "ico": "Updated ICO", - "kontakt": "Updated Kontakt", - "telefon": "Updated Telefon", - "skladu": "Updated Skladu", - "fax": "Updated Fax" -}' localhost:50051 multieko2.adresar.Adresar/PutAdresar -{ - "id": "43", - "firma": "Updated Firma", - "kz": "Updated KZ", - "drc": "Updated DRC", - "ulica": "Updated Ulica", - "psc": "Updated PSC", - "mesto": "Updated Mesto", - "stat": "Updated Stat", - "banka": "Updated Banka", - "ucet": "Updated Ucet", - "skladm": "Updated Skladm", - "ico": "Updated ICO", - "kontakt": "Updated Kontakt", - "telefon": "Updated Telefon", - "skladu": "Updated Skladu", - "fax": "Updated Fax" -} -❯ grpcurl -plaintext -d '{"id": 43}' localhost:50051 multieko2.adresar.Adresar/GetAdresar -{ - "id": "43", - "firma": "Updated Firma", - "kz": "Updated KZ", - "drc": "Updated DRC", - "ulica": "Updated Ulica", - "psc": "Updated PSC", - "mesto": "Updated Mesto", - "stat": "Updated Stat", - "banka": "Updated Banka", - "ucet": "Updated Ucet", - "skladm": "Updated Skladm", - "ico": "Updated ICO", - "kontakt": "Updated Kontakt", - "telefon": "Updated Telefon", - "skladu": "Updated Skladu", - "fax": "Updated Fax" -} diff --git a/server/src/adresar/docs/get_example.txt b/server/src/adresar/docs/get_example.txt deleted file mode 100644 index a100af3..0000000 --- a/server/src/adresar/docs/get_example.txt +++ /dev/null @@ -1,29 +0,0 @@ - -# TOTAL items in the adresar -❯ grpcurl -plaintext localhost:50051 multieko2.adresar.Adresar/GetAdresarCount -{ - "count": "5" -} -# Item at this count. If there are 43 items, number 1 is the first item -❯ grpcurl -plaintext -d '{"position": 1}' localhost:50051 multieko2.adresar.Adresar/GetAdresarByPosition -{ - "id": "1", - "firma": "ks555", - "kz": "f", - "drc": "asdf", - "ulica": "as", - "psc": "f", - "mesto": "asf", - "stat": "as", - "banka": "fa", - "telefon": "a", - "skladu": "fd", - "fax": "asf" -} -# Item fetched by id. The first item was created and marked as deleted, therefore number 1 in ids shouldnt be fetched. -❯ grpcurl -plaintext -d '{"id": 1}' localhost:50051 multieko2.adresar.Adresar/GetAdresar -ERROR: - Code: NotFound - Message: no rows returned by a query that expected to return at least one row -╭─    ~ ············································· 69 ✘ -╰─ diff --git a/server/src/adresar/handlers.rs b/server/src/adresar/handlers.rs deleted file mode 100644 index 72ae187..0000000 --- a/server/src/adresar/handlers.rs +++ /dev/null @@ -1,15 +0,0 @@ -// src/adresar/handlers.rs - -pub mod post_adresar; -pub mod get_adresar; -pub mod put_adresar; -pub mod delete_adresar; -pub mod get_adresar_count; -pub mod get_adresar_by_position; - -pub use post_adresar::post_adresar; -pub use get_adresar::get_adresar; -pub use put_adresar::put_adresar; -pub use delete_adresar::delete_adresar; -pub use get_adresar_count::get_adresar_count; -pub use get_adresar_by_position::get_adresar_by_position; diff --git a/server/src/adresar/handlers/delete_adresar.rs b/server/src/adresar/handlers/delete_adresar.rs deleted file mode 100644 index 5b4894b..0000000 --- a/server/src/adresar/handlers/delete_adresar.rs +++ /dev/null @@ -1,27 +0,0 @@ -// src/adresar/handlers/delete_adresar.rs -use tonic::Status; -use sqlx::PgPool; -use common::proto::multieko2::adresar::{DeleteAdresarRequest, DeleteAdresarResponse}; - -pub async fn delete_adresar( - db_pool: &PgPool, - request: DeleteAdresarRequest, -) -> Result { - let rows_affected = sqlx::query!( - r#" - UPDATE adresar - SET deleted = true - WHERE id = $1 AND deleted = false - "#, - request.id - ) - .execute(db_pool) - .await - .map_err(|e| Status::internal(e.to_string()))? - .rows_affected(); - - Ok(DeleteAdresarResponse { - success: rows_affected > 0, - }) -} - diff --git a/server/src/adresar/handlers/get_adresar.rs b/server/src/adresar/handlers/get_adresar.rs deleted file mode 100644 index 67195f7..0000000 --- a/server/src/adresar/handlers/get_adresar.rs +++ /dev/null @@ -1,63 +0,0 @@ -// src/adresar/handlers/get_adresar.rs -use tonic::Status; -use sqlx::PgPool; -use crate::adresar::models::Adresar; -use common::proto::multieko2::adresar::{GetAdresarRequest, AdresarResponse}; - -pub async fn get_adresar( - db_pool: &PgPool, - request: GetAdresarRequest, -) -> Result { - let adresar = sqlx::query_as!( - Adresar, - r#" - SELECT - id, - deleted, - firma, - kz, - drc, - ulica, - psc, - mesto, - stat, - banka, - ucet, - skladm, - ico, - kontakt, - telefon, - skladu, - fax - FROM adresar - WHERE id = $1 AND deleted = false - "#, - request.id - ) - .fetch_one(db_pool) - .await - .map_err(|e| match e { - sqlx::Error::RowNotFound => Status::not_found("Record not found"), - _ => Status::internal(format!("Database error: {}", e)), - })?; - - 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/server/src/adresar/handlers/get_adresar_by_position.rs b/server/src/adresar/handlers/get_adresar_by_position.rs deleted file mode 100644 index 1ee8b28..0000000 --- a/server/src/adresar/handlers/get_adresar_by_position.rs +++ /dev/null @@ -1,35 +0,0 @@ -// src/adresar/handlers/get_adresar_by_position.rs -use tonic::{Status}; -use sqlx::PgPool; -use common::proto::multieko2::adresar::{AdresarResponse, GetAdresarRequest}; -use common::proto::multieko2::common::PositionRequest; -use super::get_adresar; - -pub async fn get_adresar_by_position( - db_pool: &PgPool, - request: PositionRequest, -) -> Result { - if request.position < 1 { - return Err(Status::invalid_argument("Position must be at least 1")); - } - - // Find the ID of the Nth non-deleted record - let id: i64 = sqlx::query_scalar!( - r#" - SELECT id - FROM adresar - WHERE deleted = FALSE - ORDER BY id ASC - OFFSET $1 - LIMIT 1 - "#, - request.position - 1 - ) - .fetch_optional(db_pool) - .await - .map_err(|e| Status::internal(e.to_string()))? - .ok_or_else(|| Status::not_found("Position out of bounds"))?; - - // Now fetch the complete record using the existing get_adresar function - get_adresar(db_pool, GetAdresarRequest { id }).await -} diff --git a/server/src/adresar/handlers/get_adresar_count.rs b/server/src/adresar/handlers/get_adresar_count.rs deleted file mode 100644 index 3ce0819..0000000 --- a/server/src/adresar/handlers/get_adresar_count.rs +++ /dev/null @@ -1,23 +0,0 @@ -// src/adresar/handlers/get_adresar_count.rs -use tonic::Status; -use sqlx::PgPool; -use common::proto::multieko2::common::{CountResponse, Empty}; - -pub async fn get_adresar_count( - db_pool: &PgPool, - _request: Empty, -) -> Result { - let count: i64 = sqlx::query_scalar!( - r#" - SELECT COUNT(*) AS count - FROM adresar - WHERE deleted = FALSE - "# - ) - .fetch_one(db_pool) - .await - .map_err(|e| Status::internal(e.to_string()))? - .unwrap_or(0); - - Ok(CountResponse { count }) -} diff --git a/server/src/adresar/handlers/post_adresar.rs b/server/src/adresar/handlers/post_adresar.rs deleted file mode 100644 index 809547f..0000000 --- a/server/src/adresar/handlers/post_adresar.rs +++ /dev/null @@ -1,99 +0,0 @@ -// src/adresar/handlers/post_adresar.rs -use tonic::Status; -use sqlx::PgPool; -use crate::adresar::models::Adresar; -use common::proto::multieko2::adresar::{PostAdresarRequest, AdresarResponse}; - -// Helper function to sanitize inputs -fn sanitize_input(input: &str) -> Option { - let trimmed = input.trim().to_string(); - if trimmed.is_empty() { - None - } else { - Some(trimmed) - } -} - -pub async fn post_adresar( - db_pool: &PgPool, - mut request: PostAdresarRequest, -) -> Result { - request.firma = request.firma.trim().to_string(); - if request.firma.is_empty() { - return Err(Status::invalid_argument("Firma je povinne pole")); - } - - // Sanitize optional fields - 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#" - INSERT INTO adresar ( - firma, kz, drc, ulica, psc, mesto, stat, banka, ucet, - skladm, ico, kontakt, telefon, skladu, fax, deleted - ) - VALUES ( - $1, $2, $3, $4, $5, $6, $7, $8, $9, - $10, $11, $12, $13, $14, $15, $16 - ) - RETURNING - id, deleted, firma, kz, drc, ulica, psc, mesto, stat, - banka, ucet, skladm, ico, kontakt, telefon, skladu, fax - "#, - request.firma, - kz, - drc, - ulica, - psc, - mesto, - stat, - banka, - ucet, - skladm, - ico, - kontakt, - telefon, - skladu, - fax, - false - ) - .fetch_one(db_pool) - .await - .map_err(|e| Status::internal(e.to_string()))?; - - Ok(AdresarResponse { - id: adresar.id, - // Do not include `deleted` in the response since it's not - // defined in the proto message. - 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/server/src/adresar/handlers/put_adresar.rs b/server/src/adresar/handlers/put_adresar.rs deleted file mode 100644 index 7ccd1f7..0000000 --- a/server/src/adresar/handlers/put_adresar.rs +++ /dev/null @@ -1,122 +0,0 @@ -// 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(), - }) -} diff --git a/server/src/adresar/mod.rs b/server/src/adresar/mod.rs deleted file mode 100644 index 22ac60a..0000000 --- a/server/src/adresar/mod.rs +++ /dev/null @@ -1,7 +0,0 @@ -// src/adresar/mod.rs - -pub mod models; -pub mod handlers; - -// #[cfg(test)] -// pub mod tests; diff --git a/server/src/adresar/models.rs b/server/src/adresar/models.rs deleted file mode 100644 index cc303aa..0000000 --- a/server/src/adresar/models.rs +++ /dev/null @@ -1,23 +0,0 @@ -// src/adresar/models.rs -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Serialize, Deserialize)] -pub struct Adresar { - pub id: i64, - pub deleted: bool, - pub firma: String, - pub kz: Option, - pub drc: Option, - pub ulica: Option, - pub psc: Option, - pub mesto: Option, - pub stat: Option, - pub banka: Option, - pub ucet: Option, - pub skladm: Option, - pub ico: Option, - pub kontakt: Option, - pub telefon: Option, - pub skladu: Option, - pub fax: Option, -} diff --git a/server/src/lib.rs b/server/src/lib.rs index 7d18246..ae890e9 100644 --- a/server/src/lib.rs +++ b/server/src/lib.rs @@ -4,8 +4,6 @@ pub mod auth; pub mod indexer; pub mod search_schema; pub mod server; -pub mod adresar; -pub mod uctovnictvo; pub mod shared; pub mod table_structure; pub mod table_definition; diff --git a/server/src/server/services/adresar_service.rs b/server/src/server/services/adresar_service.rs deleted file mode 100644 index a0e4dcc..0000000 --- a/server/src/server/services/adresar_service.rs +++ /dev/null @@ -1,69 +0,0 @@ -// src/server/services/adresar_service.rs -use tonic::{Request, Response, Status}; -use common::proto::multieko2::adresar::{ - adresar_server::Adresar, - PostAdresarRequest, AdresarResponse, GetAdresarRequest, PutAdresarRequest, - DeleteAdresarRequest, DeleteAdresarResponse, -}; -use common::proto::multieko2::common::{Empty, CountResponse, PositionRequest}; -use crate::adresar::handlers::{ - post_adresar, get_adresar, put_adresar, delete_adresar, - get_adresar_count, get_adresar_by_position, -}; -use sqlx::PgPool; - -#[derive(Debug)] -pub struct AdresarService { - pub db_pool: PgPool, -} - -#[tonic::async_trait] -impl Adresar for AdresarService { - async fn post_adresar( - &self, - request: Request, - ) -> Result, Status> { - let response = post_adresar(&self.db_pool, request.into_inner()).await?; - Ok(Response::new(response)) - } - - async fn get_adresar( - &self, - request: Request, - ) -> Result, Status> { - let response = get_adresar(&self.db_pool, request.into_inner()).await?; - Ok(Response::new(response)) - } - - async fn put_adresar( - &self, - request: Request, - ) -> Result, Status> { - let response = put_adresar(&self.db_pool, request.into_inner()).await?; - Ok(Response::new(response)) - } - - async fn delete_adresar( - &self, - request: Request, - ) -> Result, Status> { - let response = delete_adresar(&self.db_pool, request.into_inner()).await?; - Ok(Response::new(response)) - } - - async fn get_adresar_count( - &self, - request: Request, - ) -> Result, Status> { - let response = get_adresar_count(&self.db_pool, request.into_inner()).await?; - Ok(Response::new(response)) - } - - async fn get_adresar_by_position( - &self, - request: Request, - ) -> Result, Status> { - let response = get_adresar_by_position(&self.db_pool, request.into_inner()).await?; - Ok(Response::new(response)) - } -} diff --git a/server/src/server/services/uctovnictvo_service.rs b/server/src/server/services/uctovnictvo_service.rs deleted file mode 100644 index fbf77f9..0000000 --- a/server/src/server/services/uctovnictvo_service.rs +++ /dev/null @@ -1,60 +0,0 @@ -// src/server/services/uctovnictvo_service.rs -use tonic::{Request, Response, Status}; -use common::proto::multieko2::uctovnictvo::{ - uctovnictvo_server::Uctovnictvo, - PostUctovnictvoRequest, UctovnictvoResponse, GetUctovnictvoRequest, PutUctovnictvoRequest, -}; -use crate::uctovnictvo::handlers::{ - post_uctovnictvo, get_uctovnictvo, get_uctovnictvo_count, - get_uctovnictvo_by_position, put_uctovnictvo, -}; -use common::proto::multieko2::common::{Empty, CountResponse, PositionRequest}; -use sqlx::PgPool; - -#[derive(Debug)] -pub struct UctovnictvoService { - pub db_pool: PgPool, -} - -#[tonic::async_trait] -impl Uctovnictvo for UctovnictvoService { - async fn post_uctovnictvo( - &self, - request: Request, - ) -> Result, Status> { - let response = post_uctovnictvo(&self.db_pool, request.into_inner()).await?; - Ok(Response::new(response)) - } - - async fn get_uctovnictvo( - &self, - request: Request, - ) -> Result, Status> { - let response = get_uctovnictvo(&self.db_pool, request.into_inner()).await?; - Ok(Response::new(response)) - } - - async fn get_uctovnictvo_count( - &self, - request: Request, - ) -> Result, Status> { - let response = get_uctovnictvo_count(&self.db_pool, request.into_inner()).await?; - Ok(Response::new(response)) - } - - async fn get_uctovnictvo_by_position( - &self, - request: Request, - ) -> Result, Status> { - let response = get_uctovnictvo_by_position(&self.db_pool, request.into_inner()).await?; - Ok(Response::new(response)) - } - - async fn put_uctovnictvo( - &self, - request: Request, - ) -> Result, Status> { - let response = put_uctovnictvo(&self.db_pool, request.into_inner()).await?; - Ok(Response::new(response)) - } -} diff --git a/server/src/uctovnictvo/docs/example.txt b/server/src/uctovnictvo/docs/example.txt deleted file mode 100644 index 43aeb23..0000000 --- a/server/src/uctovnictvo/docs/example.txt +++ /dev/null @@ -1,58 +0,0 @@ -POST -❯ grpcurl -plaintext -d '{ - "adresar_id": 1, - "c_dokladu": "DOC123", - "datum": "01:10:2023", - "c_faktury": "INV123", - "obsah": "Sample content", - "stredisko": "Center A", - "c_uctu": "ACC123", - "md": "MD123", - "identif": "ID123", - "poznanka": "Sample note", - "firma": "AAA" -}' localhost:50051 multieko2.uctovnictvo.Uctovnictvo/PostUctovnictvo -{ - "id": "3", - "adresarId": "1", - "cDokladu": "DOC123", - "datum": "2023-10-01", - "cFaktury": "INV123", - "obsah": "Sample content", - "stredisko": "Center A", - "cUctu": "ACC123", - "md": "MD123", - "identif": "ID123", - "poznanka": "Sample note", - "firma": "AAA" -} - -PUT -❯ grpcurl -plaintext -d '{ - "id": '1', - "adresar_id": 1, - "c_dokladu": "UPDATED-DOC", - "datum": "15.11.2023", - "c_faktury": "UPDATED-INV", - "obsah": "Updated content", - "stredisko": "Updated Center", - "c_uctu": "UPD-ACC", - "md": "UPD-MD", - "identif": "UPD-ID", - "poznanka": "Updated note", - "firma": "UPD" -}' localhost:50051 multieko2.uctovnictvo.Uctovnictvo/PutUctovnictvo -{ - "id": "1", - "adresarId": "1", - "cDokladu": "UPDATED-DOC", - "datum": "15.11.2023", - "cFaktury": "UPDATED-INV", - "obsah": "Updated content", - "stredisko": "Updated Center", - "cUctu": "UPD-ACC", - "md": "UPD-MD", - "identif": "UPD-ID", - "poznanka": "Updated note", - "firma": "UPD" -} diff --git a/server/src/uctovnictvo/docs/get_examples.txt b/server/src/uctovnictvo/docs/get_examples.txt deleted file mode 100644 index d079642..0000000 --- a/server/src/uctovnictvo/docs/get_examples.txt +++ /dev/null @@ -1,41 +0,0 @@ -❯ grpcurl -plaintext -d '{}' localhost:50051 multieko2.uctovnictvo.Uctovnictvo/GetUctovnictvoCount - -{ - "count": "4" -} -❯ grpcurl -plaintext -d '{ - "position": 2 -}' localhost:50051 multieko2.uctovnictvo.Uctovnictvo/GetUctovnictvoByPosition - -{ - "id": "2", - "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" -} -❯ 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/server/src/uctovnictvo/handlers.rs b/server/src/uctovnictvo/handlers.rs deleted file mode 100644 index ed289b7..0000000 --- a/server/src/uctovnictvo/handlers.rs +++ /dev/null @@ -1,12 +0,0 @@ -// src/uctovnictvo/handlers.rs -pub mod post_uctovnictvo; -pub mod get_uctovnictvo; -pub mod get_uctovnictvo_count; -pub mod get_uctovnictvo_by_position; -pub mod put_uctovnictvo; - -pub use post_uctovnictvo::post_uctovnictvo; -pub use get_uctovnictvo::get_uctovnictvo; -pub use get_uctovnictvo_count::get_uctovnictvo_count; -pub use get_uctovnictvo_by_position::get_uctovnictvo_by_position; -pub use put_uctovnictvo::put_uctovnictvo; diff --git a/server/src/uctovnictvo/handlers/get_uctovnictvo.rs b/server/src/uctovnictvo/handlers/get_uctovnictvo.rs deleted file mode 100644 index 8264c4c..0000000 --- a/server/src/uctovnictvo/handlers/get_uctovnictvo.rs +++ /dev/null @@ -1,51 +0,0 @@ -// src/uctovnictvo/handlers/get_uctovnictvo.rs -use tonic::Status; -use sqlx::PgPool; -use crate::uctovnictvo::models::Uctovnictvo; -use common::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, - }) -} diff --git a/server/src/uctovnictvo/handlers/get_uctovnictvo_by_position.rs b/server/src/uctovnictvo/handlers/get_uctovnictvo_by_position.rs deleted file mode 100644 index 31560c1..0000000 --- a/server/src/uctovnictvo/handlers/get_uctovnictvo_by_position.rs +++ /dev/null @@ -1,34 +0,0 @@ -// src/uctovnictvo/handlers/get_uctovnictvo_by_position.rs -use tonic::Status; -use sqlx::PgPool; -use common::proto::multieko2::common::PositionRequest; -use super::get_uctovnictvo; - -pub async fn get_uctovnictvo_by_position( - db_pool: &PgPool, - request: PositionRequest, -) -> Result { - if request.position < 1 { - return Err(Status::invalid_argument("Position must be at least 1")); - } - - // Find the ID of the Nth non-deleted record - let id: i64 = sqlx::query_scalar!( - r#" - SELECT id - FROM uctovnictvo - WHERE deleted = FALSE - ORDER BY id ASC - OFFSET $1 - LIMIT 1 - "#, - request.position - 1 - ) - .fetch_optional(db_pool) - .await - .map_err(|e| Status::internal(e.to_string()))? - .ok_or_else(|| Status::not_found("Position out of bounds"))?; - - // Now fetch the complete record using the existing get_uctovnictvo function - get_uctovnictvo(db_pool, common::proto::multieko2::uctovnictvo::GetUctovnictvoRequest { id }).await -} diff --git a/server/src/uctovnictvo/handlers/get_uctovnictvo_count.rs b/server/src/uctovnictvo/handlers/get_uctovnictvo_count.rs deleted file mode 100644 index b36461a..0000000 --- a/server/src/uctovnictvo/handlers/get_uctovnictvo_count.rs +++ /dev/null @@ -1,23 +0,0 @@ -// src/uctovnictvo/handlers/get_uctovnictvo_count.rs -use tonic::Status; -use sqlx::PgPool; -use common::proto::multieko2::common::{CountResponse, Empty}; - -pub async fn get_uctovnictvo_count( - db_pool: &PgPool, - _request: Empty, -) -> Result { - let count: i64 = sqlx::query_scalar!( - r#" - SELECT COUNT(*) AS count - FROM uctovnictvo - WHERE deleted = FALSE - "# - ) - .fetch_one(db_pool) - .await - .map_err(|e| Status::internal(e.to_string()))? - .unwrap_or(0); - - Ok(CountResponse { count }) -} diff --git a/server/src/uctovnictvo/handlers/post_uctovnictvo.rs b/server/src/uctovnictvo/handlers/post_uctovnictvo.rs deleted file mode 100644 index 3be9202..0000000 --- a/server/src/uctovnictvo/handlers/post_uctovnictvo.rs +++ /dev/null @@ -1,73 +0,0 @@ -// src/uctovnictvo/handlers/post_uctovnictvo.rs -use tonic::Status; -use sqlx::PgPool; -use crate::uctovnictvo::models::Uctovnictvo; -use common::proto::multieko2::uctovnictvo::{PostUctovnictvoRequest, UctovnictvoResponse}; -use crate::shared::date_utils::parse_date_with_multiple_formats; // Import from shared module - -pub async fn post_uctovnictvo( - db_pool: &PgPool, - request: PostUctovnictvoRequest, -) -> Result { - let datum = parse_date_with_multiple_formats(&request.datum) - .ok_or_else(|| Status::invalid_argument(format!("Invalid date format: {}", request.datum)))?; - - // Pass the NaiveDate value directly. - let uctovnictvo = sqlx::query_as!( - Uctovnictvo, - r#" - INSERT INTO uctovnictvo ( - adresar_id, c_dokladu, datum, c_faktury, obsah, stredisko, - c_uctu, md, identif, poznanka, firma, deleted - ) - VALUES ( - $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12 - ) - RETURNING - id, - deleted, - adresar_id, - c_dokladu, - datum as "datum: chrono::NaiveDate", - c_faktury, - obsah, - stredisko, - c_uctu, - md, - identif, - poznanka, - firma - "#, - request.adresar_id, - request.c_dokladu, - datum as chrono::NaiveDate, - request.c_faktury, - request.obsah, - request.stredisko, - request.c_uctu, - request.md, - request.identif, - request.poznanka, - request.firma, - false - ) - .fetch_one(db_pool) - .await - .map_err(|e| Status::internal(e.to_string()))?; - - // Return the response with formatted date - Ok(UctovnictvoResponse { - id: uctovnictvo.id, - adresar_id: uctovnictvo.adresar_id, - c_dokladu: uctovnictvo.c_dokladu, - datum: uctovnictvo.datum.format("%d.%m.%Y").to_string(), // Standard Slovak format - 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, - }) -} diff --git a/server/src/uctovnictvo/handlers/put_uctovnictvo.rs b/server/src/uctovnictvo/handlers/put_uctovnictvo.rs deleted file mode 100644 index 49df6f2..0000000 --- a/server/src/uctovnictvo/handlers/put_uctovnictvo.rs +++ /dev/null @@ -1,78 +0,0 @@ -// src/uctovnictvo/handlers/put_uctovnictvo.rs -use tonic::Status; -use sqlx::PgPool; -use crate::uctovnictvo::models::Uctovnictvo; -use common::proto::multieko2::uctovnictvo::{PutUctovnictvoRequest, UctovnictvoResponse}; -use crate::shared::date_utils::parse_date_with_multiple_formats; // Import from shared module - -pub async fn put_uctovnictvo( - db_pool: &PgPool, - request: PutUctovnictvoRequest, -) -> Result { - let datum = parse_date_with_multiple_formats(&request.datum) - .ok_or_else(|| Status::invalid_argument("Invalid date format"))?; - - let uctovnictvo = sqlx::query_as!( - Uctovnictvo, - r#" - UPDATE uctovnictvo - SET - adresar_id = $2, - c_dokladu = $3, - datum = $4, - c_faktury = $5, - obsah = $6, - stredisko = $7, - c_uctu = $8, - md = $9, - identif = $10, - poznanka = $11, - firma = $12 - WHERE id = $1 AND deleted = FALSE - RETURNING - id, - deleted, - adresar_id, - c_dokladu, - datum as "datum: chrono::NaiveDate", - c_faktury, - obsah, - stredisko, - c_uctu, - md, - identif, - poznanka, - firma - "#, - request.id, - request.adresar_id, - request.c_dokladu, - datum as chrono::NaiveDate, - request.c_faktury, - request.obsah, - request.stredisko, - request.c_uctu, - request.md, - request.identif, - request.poznanka, - request.firma - ) - .fetch_one(db_pool) - .await - .map_err(|e| Status::internal(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, - }) -} diff --git a/server/src/uctovnictvo/mod.rs b/server/src/uctovnictvo/mod.rs deleted file mode 100644 index 89182b1..0000000 --- a/server/src/uctovnictvo/mod.rs +++ /dev/null @@ -1,4 +0,0 @@ -// src/uctovnictvo/mod.rs - -pub mod models; -pub mod handlers; diff --git a/server/src/uctovnictvo/models.rs b/server/src/uctovnictvo/models.rs deleted file mode 100644 index 3c9e152..0000000 --- a/server/src/uctovnictvo/models.rs +++ /dev/null @@ -1,21 +0,0 @@ -// src/uctovnictvo/models.rs -use chrono::NaiveDate; -use serde::{Deserialize, Serialize}; - -#[derive(Debug, sqlx::FromRow, Serialize, Deserialize)] -pub struct Uctovnictvo { - pub id: i64, - pub deleted: bool, - pub adresar_id: i64, - pub c_dokladu: String, - pub datum: NaiveDate, - pub c_faktury: String, - pub obsah: Option, - pub stredisko: Option, - pub c_uctu: Option, - pub md: Option, - pub identif: Option, - pub poznanka: Option, - pub firma: String, -} -