From f47976ba723113bcb55ae8c05422eb04c2beb584 Mon Sep 17 00:00:00 2001 From: David <3173957+0ex-d@users.noreply.github.com> Date: Sat, 11 Jan 2025 22:43:32 +0000 Subject: [PATCH] Chore: Use enum for handling bid sorting --- crates/common/src/api/data_api.rs | 12 +++++++++--- crates/database/src/postgres/postgres_db_filters.rs | 6 +++--- crates/database/src/postgres/postgres_db_service.rs | 7 +++++-- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/crates/common/src/api/data_api.rs b/crates/common/src/api/data_api.rs index dbbf0f60..40f6bd70 100644 --- a/crates/common/src/api/data_api.rs +++ b/crates/common/src/api/data_api.rs @@ -4,6 +4,12 @@ use ethereum_consensus::{ }; use serde::{Deserialize, Serialize}; +#[derive(Debug, PartialEq, Eq, Deserialize, Serialize, Clone)] +pub enum BidsOrderBy { + HighToLow, + LowToHigh, +} + #[derive(Debug, Deserialize, Serialize, Default, Clone)] pub struct BidFilters { pub slot: Option, @@ -13,7 +19,7 @@ pub struct BidFilters { pub block_number: Option, pub proposer_pubkey: Option, pub builder_pubkey: Option, - pub order_by: Option, + pub order_by: Option, } #[derive(Debug, Deserialize, Serialize)] @@ -40,8 +46,8 @@ impl From for BidFilters { builder_pubkey: value.builder_pubkey, order_by: match value.order_by.as_ref() { Some(s) => match s.as_str() { - "value" => Some(1), - "-value" => Some(-1), + "value" => Some(BidsOrderBy::LowToHigh), + "-value" => Some(BidsOrderBy::HighToLow), _ => None, }, None => None, diff --git a/crates/database/src/postgres/postgres_db_filters.rs b/crates/database/src/postgres/postgres_db_filters.rs index 74981d24..4322ab32 100644 --- a/crates/database/src/postgres/postgres_db_filters.rs +++ b/crates/database/src/postgres/postgres_db_filters.rs @@ -1,4 +1,4 @@ -use helix_common::api::data_api::BidFilters; +use helix_common::api::data_api::{BidFilters, BidsOrderBy}; #[derive(Clone, Debug)] pub struct PgBidFilters(BidFilters); @@ -40,8 +40,8 @@ impl PgBidFilters { self.0.block_hash.as_ref().map(|block_hash| block_hash.as_ref()) } - pub fn order(&self) -> Option { - self.0.order_by.map(|order_by| order_by as i32) + pub fn order(&self) -> Option<&BidsOrderBy> { + self.0.order_by.as_ref() } pub fn limit(&self) -> Option { diff --git a/crates/database/src/postgres/postgres_db_service.rs b/crates/database/src/postgres/postgres_db_service.rs index 211393b3..33cd1fbc 100644 --- a/crates/database/src/postgres/postgres_db_service.rs +++ b/crates/database/src/postgres/postgres_db_service.rs @@ -12,7 +12,8 @@ use ethereum_consensus::{altair::Hash32, primitives::BlsPublicKey, ssz::prelude: use helix_common::{ api::{ - builder_api::BuilderGetValidatorsResponseEntry, data_api::BidFilters, + builder_api::BuilderGetValidatorsResponseEntry, + data_api::{BidFilters, BidsOrderBy}, proposer_api::ValidatorRegistrationInfo, }, bid_submission::{ @@ -1585,7 +1586,9 @@ impl DatabaseService for PostgresDatabaseService { if let Some(order) = filters.order() { query.push_str(" ORDER BY block_submission.value "); - query.push_str(if order >= 0 { "ASC" } else { "DESC" }); + if order == &BidsOrderBy::HighToLow { + query.push_str("DESC"); + } } else { query.push_str(" ORDER BY block_submission.slot_number DESC"); }