diff --git a/proto/api.proto b/proto/api.proto index d2ddc10..0ec6d99 100644 --- a/proto/api.proto +++ b/proto/api.proto @@ -11,12 +11,17 @@ service Adresar { rpc PostAdresar (PostAdresarRequest) returns (AdresarResponse); rpc GetAdresar (GetAdresarRequest) returns (AdresarResponse); rpc PutAdresar (PutAdresarRequest) returns (AdresarResponse); + rpc DeleteAdresar (DeleteAdresarRequest) returns (DeleteAdresarResponse); } message GetAdresarRequest { int64 id = 1; // The ID of the Adresar entry to retrieve } +message DeleteAdresarRequest { + int64 id = 1; // The ID of the Adresar entry to delete +} + message PostAdresarRequest { string firma = 1; string kz = 2; @@ -80,3 +85,7 @@ message DataRequest { message DataResponse { string processed_data = 1; } + +message DeleteAdresarResponse { + bool success = 1; // Indicates whether the deletion was successful +} diff --git a/src/adresar/docs/example.txt b/src/adresar/docs/example.txt new file mode 100644 index 0000000..60c4797 --- /dev/null +++ b/src/adresar/docs/example.txt @@ -0,0 +1,156 @@ +❯ grpcurl -plaintext -d '{"id": 1}' localhost:50051 multieko2.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/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/DeleteAdresar +{ + "success": true +} +❯ grpcurl -plaintext -d '{"id": 1}' localhost:50051 multieko2.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/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/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/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/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/src/adresar/handlers.rs b/src/adresar/handlers.rs index d987fcf..294b352 100644 --- a/src/adresar/handlers.rs +++ b/src/adresar/handlers.rs @@ -3,7 +3,9 @@ pub mod post_adresar; pub mod get_adresar; pub mod put_adresar; +pub mod delete_adresar; pub use post_adresar::post_adresar; pub use get_adresar::get_adresar; pub use put_adresar::put_adresar; +pub use delete_adresar::delete_adresar; diff --git a/src/adresar/handlers/delete_adresar.rs b/src/adresar/handlers/delete_adresar.rs new file mode 100644 index 0000000..9fb996f --- /dev/null +++ b/src/adresar/handlers/delete_adresar.rs @@ -0,0 +1,25 @@ +// src/adresar/handlers/delete_adresar.rs +use tonic::{Request, Response, Status}; +use sqlx::PgPool; +use crate::proto::multieko2::{DeleteAdresarRequest, DeleteAdresarResponse}; + +pub async fn delete_adresar( + db_pool: &PgPool, + request: DeleteAdresarRequest, +) -> Result { + let rows_affected = sqlx::query!( + r#" + DELETE FROM adresar + WHERE id = $1 + "#, + 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/src/proto/descriptor.bin b/src/proto/descriptor.bin index d79f660..de2945f 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 c2024c0..07b20f5 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -2,9 +2,10 @@ use tonic::{Request, Response, Status}; use tonic_reflection::server::Builder as ReflectionBuilder; use crate::db; -use crate::adresar::handlers::{post_adresar, get_adresar, put_adresar}; // Import the new handler +use crate::adresar::handlers::{post_adresar, get_adresar, put_adresar, delete_adresar}; // Import the new handler use crate::proto::multieko2::{ PostAdresarRequest, AdresarResponse, GetAdresarRequest, PutAdresarRequest, + DeleteAdresarRequest, DeleteAdresarResponse, // Add these imports adresar_server::{Adresar, AdresarServer}, FILE_DESCRIPTOR_SET, }; @@ -38,6 +39,14 @@ impl Adresar for AdresarService { 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)) + } } pub async fn run_server(db_pool: sqlx::PgPool) -> Result<(), Box> {