get by count
This commit is contained in:
@@ -9,6 +9,7 @@ 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 (multieko2.adresar.Empty) returns (multieko2.adresar.CountResponse);
|
||||||
|
rpc GetUctovnictvoByPosition (multieko2.adresar.PositionRequest) returns (UctovnictvoResponse);
|
||||||
}
|
}
|
||||||
|
|
||||||
message PostUctovnictvoRequest {
|
message PostUctovnictvoRequest {
|
||||||
|
|||||||
Binary file not shown.
@@ -4,7 +4,7 @@ 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, get_table_structure
|
||||||
};
|
};
|
||||||
use crate::uctovnictvo::handlers::{post_uctovnictvo, get_uctovnictvo, get_uctovnictvo_count};
|
use crate::uctovnictvo::handlers::{post_uctovnictvo, get_uctovnictvo, get_uctovnictvo_count, get_uctovnictvo_by_position};
|
||||||
use crate::proto::multieko2::{
|
use crate::proto::multieko2::{
|
||||||
FILE_DESCRIPTOR_SET,
|
FILE_DESCRIPTOR_SET,
|
||||||
};
|
};
|
||||||
@@ -16,7 +16,7 @@ use crate::proto::multieko2::adresar::{
|
|||||||
};
|
};
|
||||||
use crate::proto::multieko2::uctovnictvo::{
|
use crate::proto::multieko2::uctovnictvo::{
|
||||||
uctovnictvo_server::{Uctovnictvo, UctovnictvoServer},
|
uctovnictvo_server::{Uctovnictvo, UctovnictvoServer},
|
||||||
PostUctovnictvoRequest, UctovnictvoResponse, GetUctovnictvoRequest // Add this import
|
PostUctovnictvoRequest, UctovnictvoResponse, GetUctovnictvoRequest,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub struct AdresarService {
|
pub struct AdresarService {
|
||||||
@@ -112,6 +112,14 @@ impl Uctovnictvo for UctovnictvoService {
|
|||||||
let response = get_uctovnictvo_count(&self.db_pool, request.into_inner()).await?;
|
let response = get_uctovnictvo_count(&self.db_pool, request.into_inner()).await?;
|
||||||
Ok(Response::new(response))
|
Ok(Response::new(response))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn get_uctovnictvo_by_position(
|
||||||
|
&self,
|
||||||
|
request: Request<crate::proto::multieko2::adresar::PositionRequest>,
|
||||||
|
) -> Result<Response<UctovnictvoResponse>, Status> {
|
||||||
|
let response = get_uctovnictvo_by_position(&self.db_pool, request.into_inner()).await?;
|
||||||
|
Ok(Response::new(response))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn run_server(db_pool: sqlx::PgPool) -> Result<(), Box<dyn std::error::Error>> {
|
pub async fn run_server(db_pool: sqlx::PgPool) -> Result<(), Box<dyn std::error::Error>> {
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
// src/uctovnictvo/handlers.rs
|
// src/uctovnictvo/handlers.rs
|
||||||
pub mod post_uctovnictvo;
|
pub mod post_uctovnictvo;
|
||||||
pub mod get_uctovnictvo;
|
pub mod get_uctovnictvo;
|
||||||
pub mod get_uctovnictvo_count; // Add this line
|
pub mod get_uctovnictvo_count;
|
||||||
|
pub mod get_uctovnictvo_by_position;
|
||||||
|
|
||||||
pub use post_uctovnictvo::post_uctovnictvo;
|
pub use post_uctovnictvo::post_uctovnictvo;
|
||||||
pub use get_uctovnictvo::get_uctovnictvo;
|
pub use get_uctovnictvo::get_uctovnictvo;
|
||||||
pub use get_uctovnictvo_count::get_uctovnictvo_count; // Add this line
|
pub use get_uctovnictvo_count::get_uctovnictvo_count;
|
||||||
|
pub use get_uctovnictvo_by_position::get_uctovnictvo_by_position;
|
||||||
|
|||||||
35
src/uctovnictvo/handlers/get_uctovnictvo_by_position.rs
Normal file
35
src/uctovnictvo/handlers/get_uctovnictvo_by_position.rs
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
// src/uctovnictvo/handlers/get_uctovnictvo_by_position.rs
|
||||||
|
use tonic::Status;
|
||||||
|
use sqlx::PgPool;
|
||||||
|
use crate::proto::multieko2::adresar::PositionRequest;
|
||||||
|
use crate::uctovnictvo::models::Uctovnictvo;
|
||||||
|
use super::get_uctovnictvo;
|
||||||
|
|
||||||
|
pub async fn get_uctovnictvo_by_position(
|
||||||
|
db_pool: &PgPool,
|
||||||
|
request: PositionRequest,
|
||||||
|
) -> Result<crate::proto::multieko2::uctovnictvo::UctovnictvoResponse, Status> {
|
||||||
|
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, crate::proto::multieko2::uctovnictvo::GetUctovnictvoRequest { id }).await
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user