splitting proto conf, still some errors, fixing

This commit is contained in:
filipriec
2025-02-22 13:09:13 +01:00
parent 740d1d83c4
commit 449f1bd14e
15 changed files with 132 additions and 51 deletions

View File

@@ -4,7 +4,12 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
.build_server(true) .build_server(true)
.file_descriptor_set_path("src/proto/descriptor.bin") .file_descriptor_set_path("src/proto/descriptor.bin")
.compile_protos( .compile_protos(
&["proto/adresar.proto", "proto/uctovnictvo.proto"], &[
"proto/common.proto",
"proto/adresar.proto",
"proto/uctovnictvo.proto",
"proto/table_structure.proto"
],
&["proto"], &["proto"],
)?; )?;
Ok(()) Ok(())

View File

@@ -1,16 +1,17 @@
// proto/adresar.proto // proto/adresar.proto
syntax = "proto3"; syntax = "proto3";
package multieko2.adresar; package multieko2.adresar;
import "common.proto";
import "table_structure.proto";
service Adresar { service Adresar {
rpc PostAdresar (PostAdresarRequest) returns (AdresarResponse); rpc PostAdresar (PostAdresarRequest) returns (AdresarResponse);
rpc GetAdresar (GetAdresarRequest) returns (AdresarResponse); rpc GetAdresar (GetAdresarRequest) returns (AdresarResponse);
rpc PutAdresar (PutAdresarRequest) returns (AdresarResponse); rpc PutAdresar (PutAdresarRequest) returns (AdresarResponse);
rpc DeleteAdresar (DeleteAdresarRequest) returns (DeleteAdresarResponse); rpc DeleteAdresar (DeleteAdresarRequest) returns (DeleteAdresarResponse);
rpc GetAdresarCount (Empty) returns (CountResponse); rpc GetAdresarCount (common.Empty) returns (common.CountResponse);
rpc GetAdresarByPosition (PositionRequest) returns (AdresarResponse); rpc GetAdresarByPosition (common.PositionRequest) returns (AdresarResponse);
rpc GetTableStructure (Empty) returns (TableStructureResponse);
} }
message GetAdresarRequest { message GetAdresarRequest {
@@ -80,24 +81,3 @@ message PutAdresarRequest {
message DeleteAdresarResponse { message DeleteAdresarResponse {
bool success = 1; bool success = 1;
} }
message Empty {}
message CountResponse {
int64 count = 1;
}
message PositionRequest {
int64 position = 1;
}
message TableStructureResponse {
repeated TableColumn columns = 1;
}
message TableColumn {
string name = 1;
string data_type = 2;
bool is_nullable = 3;
bool is_primary_key = 4;
}

6
proto/common.proto Normal file
View File

@@ -0,0 +1,6 @@
syntax = "proto3";
package multieko2.common;
message Empty {}
message CountResponse { int64 count = 1; }
message PositionRequest { int64 position = 1; }

View File

@@ -0,0 +1,20 @@
syntax = "proto3";
package multieko2.table_structure;
import "common.proto";
message TableStructureResponse {
repeated TableColumn columns = 1;
}
message TableColumn {
string name = 1;
string data_type = 2;
bool is_nullable = 3;
bool is_primary_key = 4;
}
service TableStructureService {
rpc GetAdresarTableStructure (common.Empty) returns (TableStructureResponse);
rpc GetUctovnictvoTableStructure (common.Empty) returns (TableStructureResponse);
}

View File

@@ -1,17 +1,15 @@
// proto/uctovnictvo.proto // proto/uctovnictvo.proto
syntax = "proto3"; syntax = "proto3";
package multieko2.uctovnictvo; package multieko2.uctovnictvo;
import "adresar.proto"; import "common.proto";
service Uctovnictvo { service Uctovnictvo {
rpc PostUctovnictvo (PostUctovnictvoRequest) returns (UctovnictvoResponse); rpc PostUctovnictvo (PostUctovnictvoRequest) returns (UctovnictvoResponse);
rpc GetUctovnictvo (GetUctovnictvoRequest) returns (UctovnictvoResponse); rpc GetUctovnictvo (GetUctovnictvoRequest) returns (UctovnictvoResponse);
rpc GetUctovnictvoCount (multieko2.adresar.Empty) returns (multieko2.adresar.CountResponse); rpc GetUctovnictvoCount (common.Empty) returns (common.CountResponse);
rpc GetUctovnictvoByPosition (multieko2.adresar.PositionRequest) returns (UctovnictvoResponse); rpc GetUctovnictvoByPosition (common.PositionRequest) returns (UctovnictvoResponse);
rpc PutUctovnictvo (PutUctovnictvoRequest) returns (UctovnictvoResponse); rpc PutUctovnictvo (PutUctovnictvoRequest) returns (UctovnictvoResponse);
rpc GetTableStructure (multieko2.adresar.Empty) returns (multieko2.adresar.TableStructureResponse);
} }
message PostUctovnictvoRequest { message PostUctovnictvoRequest {

View File

@@ -1,7 +1,8 @@
// src/adresar/handlers/get_adresar_by_position.rs // src/adresar/handlers/get_adresar_by_position.rs
use tonic::{Status}; use tonic::{Status};
use sqlx::PgPool; use sqlx::PgPool;
use crate::proto::multieko2::adresar::{PositionRequest, AdresarResponse, GetAdresarRequest}; use crate::proto::multieko2::adresar::{AdresarResponse, GetAdresarRequest};
use crate::proto::multieko2::common::PositionRequest;
use super::get_adresar; use super::get_adresar;
pub async fn get_adresar_by_position( pub async fn get_adresar_by_position(

View File

@@ -1,7 +1,7 @@
// src/adresar/handlers/get_adresar_count.rs // src/adresar/handlers/get_adresar_count.rs
use tonic::Status; use tonic::Status;
use sqlx::PgPool; use sqlx::PgPool;
use crate::proto::multieko2::adresar::{CountResponse, Empty}; use crate::proto::multieko2::common::{CountResponse, Empty};
pub async fn get_adresar_count( pub async fn get_adresar_count(
db_pool: &PgPool, db_pool: &PgPool,

View File

@@ -6,3 +6,4 @@ pub mod proto;
pub mod adresar; pub mod adresar;
pub mod uctovnictvo; pub mod uctovnictvo;
pub mod shared; pub mod shared;
pub mod table_structure;

Binary file not shown.

View File

@@ -10,5 +10,13 @@ pub mod multieko2 {
tonic::include_proto!("multieko2.uctovnictvo"); tonic::include_proto!("multieko2.uctovnictvo");
} }
pub mod common {
tonic::include_proto!("multieko2.common");
}
pub mod table_structure {
tonic::include_proto!("multieko2.table_structure");
}
pub const FILE_DESCRIPTOR_SET: &[u8] = include_bytes!("descriptor.bin"); pub const FILE_DESCRIPTOR_SET: &[u8] = include_bytes!("descriptor.bin");
} }

View File

@@ -1,26 +1,36 @@
// src/server/mod.rs // src/server/mod.rs
use crate::table_structure::handlers;
use tonic::{Request, Response, Status}; use tonic::{Request, Response, Status};
use tonic_reflection::server::Builder as ReflectionBuilder; use tonic_reflection::server::Builder as ReflectionBuilder;
use crate::adresar::handlers::{ use crate::adresar::handlers::{
post_adresar, get_adresar, put_adresar, delete_adresar, get_adresar_count, get_adresar_by_position, get_table_structure post_adresar, get_adresar, put_adresar, delete_adresar, get_adresar_count, get_adresar_by_position,
}; };
use crate::uctovnictvo::handlers::{ use crate::uctovnictvo::handlers::{
post_uctovnictvo, get_uctovnictvo, get_uctovnictvo_count, get_uctovnictvo_by_position, post_uctovnictvo, get_uctovnictvo, get_uctovnictvo_count, get_uctovnictvo_by_position,
put_uctovnictvo, get_table_structure as get_uctovnictvo_table_structure, put_uctovnictvo,
}; };
use crate::proto::multieko2::{ use crate::proto::multieko2::{
common::{Empty, CountResponse, PositionRequest},
table_structure::{TableStructureResponse, TableColumn},
FILE_DESCRIPTOR_SET, FILE_DESCRIPTOR_SET,
}; };
use crate::proto::multieko2::adresar::{ use crate::proto::multieko2::adresar::{
adresar_server::{Adresar, AdresarServer}, adresar_server::{Adresar, AdresarServer},
PostAdresarRequest, AdresarResponse, GetAdresarRequest, PutAdresarRequest, PostAdresarRequest, AdresarResponse, GetAdresarRequest, PutAdresarRequest,
DeleteAdresarRequest, DeleteAdresarResponse, PositionRequest, CountResponse, Empty, DeleteAdresarRequest, DeleteAdresarResponse,
TableStructureResponse,
}; };
use crate::proto::multieko2::uctovnictvo::{ use crate::proto::multieko2::uctovnictvo::{
uctovnictvo_server::{Uctovnictvo, UctovnictvoServer}, uctovnictvo_server::{Uctovnictvo, UctovnictvoServer},
PostUctovnictvoRequest, UctovnictvoResponse, GetUctovnictvoRequest, PutUctovnictvoRequest, PostUctovnictvoRequest, UctovnictvoResponse, GetUctovnictvoRequest, PutUctovnictvoRequest,
}; };
use crate::proto::multieko2::table_structure::{
table_structure_service_server::{TableStructureService, TableStructureServiceServer},
TableStructureResponse
};
use crate::proto::multieko2::{
common::{Empty, CountResponse, PositionRequest},
table_structure::{TableStructureResponse, TableColumn}
};
pub struct AdresarService { pub struct AdresarService {
db_pool: sqlx::PgPool, db_pool: sqlx::PgPool,
@@ -30,6 +40,10 @@ pub struct UctovnictvoService {
db_pool: sqlx::PgPool, db_pool: sqlx::PgPool,
} }
pub struct TableStructureHandler {
db_pool: sqlx::PgPool
}
#[tonic::async_trait] #[tonic::async_trait]
impl Adresar for AdresarService { impl Adresar for AdresarService {
async fn post_adresar( async fn post_adresar(
@@ -79,14 +93,6 @@ impl Adresar for AdresarService {
let response = get_adresar_by_position(&self.db_pool, request.into_inner()).await?; let response = get_adresar_by_position(&self.db_pool, request.into_inner()).await?;
Ok(Response::new(response)) Ok(Response::new(response))
} }
async fn get_table_structure(
&self,
request: Request<Empty>,
) -> Result<Response<TableStructureResponse>, Status> {
let response = get_table_structure(&self.db_pool, request.into_inner()).await?;
Ok(Response::new(response))
}
} }
#[tonic::async_trait] #[tonic::async_trait]
@@ -99,7 +105,6 @@ impl Uctovnictvo for UctovnictvoService {
Ok(Response::new(response)) Ok(Response::new(response))
} }
// Add this method
async fn get_uctovnictvo( async fn get_uctovnictvo(
&self, &self,
request: Request<GetUctovnictvoRequest>, request: Request<GetUctovnictvoRequest>,
@@ -131,13 +136,22 @@ impl Uctovnictvo for UctovnictvoService {
let response = put_uctovnictvo(&self.db_pool, request.into_inner()).await?; let response = put_uctovnictvo(&self.db_pool, request.into_inner()).await?;
Ok(Response::new(response)) Ok(Response::new(response))
} }
}
async fn get_table_structure( #[tonic::async_trait]
impl TableStructureService for TableStructureHandler {
async fn get_adresar_table_structure(
&self, &self,
request: Request<Empty>, request: Request<crate::proto::multieko2::common::Empty>,
) -> Result<Response<TableStructureResponse>, Status> { ) -> Result<Response<TableStructureResponse>, Status> {
let response = get_uctovnictvo_table_structure(&self.db_pool, request.into_inner()).await?; handlers::get_adresar_table_structure(&self.db_pool, request.into_inner()).await
Ok(Response::new(response)) }
async fn get_uctovnictvo_table_structure(
&self,
request: Request<crate::proto::multieko2::common::Empty>,
) -> Result<Response<TableStructureResponse>, Status> {
handlers::get_uctovnictvo_table_structure(&self.db_pool, request.into_inner()).await
} }
} }
@@ -145,6 +159,7 @@ pub async fn run_server(db_pool: sqlx::PgPool) -> Result<(), Box<dyn std::error:
let addr = "[::1]:50051".parse()?; let addr = "[::1]:50051".parse()?;
let adresar_service = AdresarService { db_pool: db_pool.clone() }; let adresar_service = AdresarService { db_pool: db_pool.clone() };
let uctovnictvo_service = UctovnictvoService { db_pool: db_pool.clone() }; let uctovnictvo_service = UctovnictvoService { db_pool: db_pool.clone() };
let table_structure_service = TableStructureHandler { db_pool: db_pool.clone() };
println!("Server listening on {}", addr); println!("Server listening on {}", addr);
@@ -156,6 +171,7 @@ pub async fn run_server(db_pool: sqlx::PgPool) -> Result<(), Box<dyn std::error:
tonic::transport::Server::builder() tonic::transport::Server::builder()
.add_service(AdresarServer::new(adresar_service)) .add_service(AdresarServer::new(adresar_service))
.add_service(UctovnictvoServer::new(uctovnictvo_service)) .add_service(UctovnictvoServer::new(uctovnictvo_service))
.add_service(TableStructureServiceServer::new(table_structure_service))
.add_service(reflection_service) .add_service(reflection_service)
.serve(addr) .serve(addr)
.await?; .await?;

View File

@@ -0,0 +1,4 @@
// src/table_structure/handlers.rs
pub mod table_structure;
pub use table_structure::{get_adresar_table_structure, get_uctovnictvo_table_structure};

View File

@@ -0,0 +1,39 @@
// src/table_structure/handlers.rs
use tonic::Status;
use sqlx::PgPool;
use crate::proto::multieko2::{
table_structure::{TableStructureResponse, TableColumn},
common::Empty
};
pub async fn get_adresar_table_structure(
_db_pool: &PgPool,
_request: Empty,
) -> Result<TableStructureResponse, Status> {
let columns = vec![
TableColumn {
name: "firma".to_string(),
data_type: "TEXT".to_string(),
is_nullable: false,
is_primary_key: false,
},
// ... other columns from original adresar handler
];
Ok(TableStructureResponse { columns })
}
pub async fn get_uctovnictvo_table_structure(
_db_pool: &PgPool,
_request: Empty,
) -> Result<TableStructureResponse, Status> {
let columns = vec![
TableColumn {
name: "adresar_id".to_string(),
data_type: "BIGINT".to_string(),
is_nullable: false,
is_primary_key: false,
},
// ... other columns from original uctovnictvo handler
];
Ok(TableStructureResponse { columns })
}

View File

@@ -0,0 +1,3 @@
// src/table_structure/mod.rs
pub mod handlers;

View File

@@ -1,7 +1,7 @@
// src/uctovnictvo/handlers/get_uctovnictvo_count.rs // src/uctovnictvo/handlers/get_uctovnictvo_count.rs
use tonic::Status; use tonic::Status;
use sqlx::PgPool; use sqlx::PgPool;
use crate::proto::multieko2::adresar::{CountResponse, Empty}; use crate::proto::multieko2::common::{CountResponse, Empty};
pub async fn get_uctovnictvo_count( pub async fn get_uctovnictvo_count(
db_pool: &PgPool, db_pool: &PgPool,