From 29a58587ea734f4a28499c5bb42c08f698a38da2 Mon Sep 17 00:00:00 2001 From: filipriec Date: Sat, 22 Feb 2025 14:54:48 +0100 Subject: [PATCH] split server configuration --- src/server/handlers.rs | 8 + src/server/mod.rs | 181 +----------------- src/server/run.rs | 33 ++++ src/server/services/adresar_service.rs | 65 +++++++ .../services/table_structure_service.rs | 33 ++++ src/server/services/uctovnictvo_service.rs | 56 ++++++ 6 files changed, 200 insertions(+), 176 deletions(-) create mode 100644 src/server/handlers.rs create mode 100644 src/server/run.rs create mode 100644 src/server/services/adresar_service.rs create mode 100644 src/server/services/table_structure_service.rs create mode 100644 src/server/services/uctovnictvo_service.rs diff --git a/src/server/handlers.rs b/src/server/handlers.rs new file mode 100644 index 0000000..39f36a4 --- /dev/null +++ b/src/server/handlers.rs @@ -0,0 +1,8 @@ +// src/server/handlers.rs +pub mod adresar_service; +pub mod uctovnictvo_service; +pub mod table_structure_service; + +pub use adresar_service::AdresarService; +pub use uctovnictvo_service::UctovnictvoService; +pub use table_structure_service::TableStructureHandler; diff --git a/src/server/mod.rs b/src/server/mod.rs index 1290192..15e5471 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -1,178 +1,7 @@ // src/server/mod.rs -use crate::table_structure::handlers; -use tonic::{Request, Response, Status}; -use tonic_reflection::server::Builder as ReflectionBuilder; -use crate::adresar::handlers::{ - post_adresar, get_adresar, put_adresar, delete_adresar, get_adresar_count, get_adresar_by_position, -}; -use crate::uctovnictvo::handlers::{ - post_uctovnictvo, get_uctovnictvo, get_uctovnictvo_count, get_uctovnictvo_by_position, - put_uctovnictvo, -}; -use crate::proto::multieko2::{ - common::{Empty, CountResponse, PositionRequest}, - table_structure::{TableStructureResponse, TableColumn}, - FILE_DESCRIPTOR_SET, -}; -use crate::proto::multieko2::adresar::{ - adresar_server::{Adresar, AdresarServer}, - PostAdresarRequest, AdresarResponse, GetAdresarRequest, PutAdresarRequest, - DeleteAdresarRequest, DeleteAdresarResponse, -}; -use crate::proto::multieko2::uctovnictvo::{ - uctovnictvo_server::{Uctovnictvo, UctovnictvoServer}, - PostUctovnictvoRequest, UctovnictvoResponse, GetUctovnictvoRequest, PutUctovnictvoRequest, -}; -use crate::proto::multieko2::table_structure::table_structure_service_server::{ - TableStructureService, TableStructureServiceServer, -}; -pub struct AdresarService { - db_pool: sqlx::PgPool, -} +pub mod services; +pub mod handlers; +pub mod run; -pub struct UctovnictvoService { - db_pool: sqlx::PgPool, -} - -pub struct TableStructureHandler { - db_pool: sqlx::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)) - } -} - -#[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)) - } -} - -#[tonic::async_trait] -impl TableStructureService for TableStructureHandler { - async fn get_adresar_table_structure( - &self, - request: Request, - ) -> Result, Status> { - let response = 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, - ) -> Result, Status> { - let response = - handlers::get_uctovnictvo_table_structure(&self.db_pool, request.into_inner()).await?; - Ok(Response::new(response)) - } -} - -pub async fn run_server(db_pool: sqlx::PgPool) -> Result<(), Box> { - let addr = "[::1]:50051".parse()?; - let adresar_service = AdresarService { 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); - - let reflection_service = ReflectionBuilder::configure() - .register_encoded_file_descriptor_set(FILE_DESCRIPTOR_SET) - .build_v1() - .unwrap(); - - tonic::transport::Server::builder() - .add_service(AdresarServer::new(adresar_service)) - .add_service(UctovnictvoServer::new(uctovnictvo_service)) - .add_service(TableStructureServiceServer::new(table_structure_service)) - .add_service(reflection_service) - .serve(addr) - .await?; - - Ok(()) -} +pub use run::run_server; +pub use services::*; diff --git a/src/server/run.rs b/src/server/run.rs new file mode 100644 index 0000000..41679de --- /dev/null +++ b/src/server/run.rs @@ -0,0 +1,33 @@ +// src/server/run.rs +use tonic::transport::Server; +use tonic_reflection::server::Builder as ReflectionBuilder; + +use crate::proto::multieko2::FILE_DESCRIPTOR_SET; +use crate::server::services::{ + AdresarService, + UctovnictvoService, + TableStructureHandler +}; +use crate::server::{ + AdresarServer, + UctovnictvoServer, + TableStructureServiceServer +}; + +pub async fn run_server(db_pool: sqlx::PgPool) -> Result<(), Box> { + let addr = "[::1]:50051".parse()?; + + let reflection_service = ReflectionBuilder::configure() + .register_encoded_file_descriptor_set(FILE_DESCRIPTOR_SET) + .build_v1()?; + + Server::builder() + .add_service(AdresarServer::new(AdresarService { db_pool: db_pool.clone() })) + .add_service(UctovnictvoServer::new(UctovnictvoService { db_pool: db_pool.clone() })) + .add_service(TableStructureServiceServer::new(TableStructureHandler { db_pool })) + .add_service(reflection_service) + .serve(addr) + .await?; + + Ok(()) +} diff --git a/src/server/services/adresar_service.rs b/src/server/services/adresar_service.rs new file mode 100644 index 0000000..8e523d1 --- /dev/null +++ b/src/server/services/adresar_service.rs @@ -0,0 +1,65 @@ +// src/server/services/adresar_service.rs +use tonic::{Request, Response, Status}; +use crate::proto::multieko2::adresar::{ + adresar_server::{Adresar, AdresarServer}, + PostAdresarRequest, AdresarResponse, GetAdresarRequest, PutAdresarRequest, + DeleteAdresarRequest, DeleteAdresarResponse, +}; +use crate::adresar::handlers; +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/src/server/services/table_structure_service.rs b/src/server/services/table_structure_service.rs new file mode 100644 index 0000000..9ff2f35 --- /dev/null +++ b/src/server/services/table_structure_service.rs @@ -0,0 +1,33 @@ +// src/server/services/table_structure_service.rs +use tonic::{Request, Response, Status}; +use crate::proto::multieko2::table_structure::table_structure_service_server::{ + TableStructureService, TableStructureServiceServer, +}; +use crate::table_structure::handlers; +use sqlx::PgPool; + +#[derive(Debug)] +pub struct TableStructureHandler { + pub db_pool: PgPool, +} + +#[tonic::async_trait] +impl TableStructureService for TableStructureHandler { + async fn get_adresar_table_structure( + &self, + request: Request, + ) -> Result, Status> { + let response = 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, + ) -> Result, Status> { + let response = + handlers::get_uctovnictvo_table_structure(&self.db_pool, request.into_inner()).await?; + Ok(Response::new(response)) + } +} diff --git a/src/server/services/uctovnictvo_service.rs b/src/server/services/uctovnictvo_service.rs new file mode 100644 index 0000000..5d3b642 --- /dev/null +++ b/src/server/services/uctovnictvo_service.rs @@ -0,0 +1,56 @@ +// src/server/services/uctovnictvo_service.rs +use tonic::{Request, Response, Status}; +use crate::proto::multieko2::uctovnictvo::{ + uctovnictvo_server::{Uctovnictvo, UctovnictvoServer}, + PostUctovnictvoRequest, UctovnictvoResponse, GetUctovnictvoRequest, PutUctovnictvoRequest, +}; +use crate::uctovnictvo::handlers; +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)) + } +}