Skip to content

Commit

Permalink
fix: add in 68d63cf
Browse files Browse the repository at this point in the history
  • Loading branch information
neocybereth committed Feb 4, 2025
1 parent bae0188 commit 7320744
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 9 deletions.
6 changes: 6 additions & 0 deletions webserver/src/dto/pos.rs
Original file line number Diff line number Diff line change
Expand Up @@ -82,3 +82,9 @@ pub struct WithdrawsDto {
#[validate(range(min = 1, max = 10000))]
pub epoch: Option<u64>,
}

#[derive(Clone, Serialize, Deserialize, Validate)]
pub struct RewardsDto {
#[validate(range(min = 1, max = 10000))]
pub epoch: Option<u64>,
}
10 changes: 7 additions & 3 deletions webserver/src/handler/pos.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ use axum_extra::extract::Query;
use axum_macros::debug_handler;

use crate::dto::pos::{
AllValidatorsQueryParams, BondsDto, UnbondsDto, ValidatorQueryParams,
ValidatorStateDto, WithdrawsDto,
AllValidatorsQueryParams, BondsDto, RewardsDto, UnbondsDto,
ValidatorQueryParams, ValidatorStateDto, WithdrawsDto,
};
use crate::error::api::ApiError;
use crate::response::pos::{
Expand Down Expand Up @@ -149,10 +149,14 @@ pub async fn get_withdraws(
#[debug_handler]
pub async fn get_rewards(
_headers: HeaderMap,
query: Query<RewardsDto>,
Path(address): Path<String>,
State(state): State<CommonState>,
) -> Result<Json<Vec<Reward>>, ApiError> {
let rewards = state.pos_service.get_rewards_by_address(address).await?;
let rewards = state
.pos_service
.get_rewards_by_address(address, query.epoch)
.await?;
Ok(Json(rewards))
}

Expand Down
14 changes: 9 additions & 5 deletions webserver/src/repository/pos.rs
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ pub trait PosRepositoryTrait {
async fn find_rewards_by_address(
&self,
address: String,
epoch: Option<u64>,
) -> Result<Vec<PoSRewardDb>, String>;

async fn find_rewards_by_delegator_and_validator_and_epoch(
Expand Down Expand Up @@ -338,15 +339,18 @@ impl PosRepositoryTrait for PosRepository {
async fn find_rewards_by_address(
&self,
address: String,
epoch: Option<u64>,
) -> Result<Vec<PoSRewardDb>, String> {
let conn = self.app_state.get_db_connection().await;

conn.interact(move |conn| {
let epoch = pos_rewards::table
.select(diesel::dsl::max(pos_rewards::epoch))
.first::<Option<_>>(conn)
.unwrap_or(Some(0))
.unwrap_or(0);
let epoch = epoch.map(|e| e as i32).unwrap_or_else(|| {
pos_rewards::table
.select(diesel::dsl::max(pos_rewards::epoch))
.first::<Option<_>>(conn)
.unwrap_or(Some(0))
.unwrap_or(0)
});

pos_rewards::table
.filter(pos_rewards::epoch.eq(&epoch))
Expand Down
3 changes: 2 additions & 1 deletion webserver/src/service/pos.rs
Original file line number Diff line number Diff line change
Expand Up @@ -273,12 +273,13 @@ impl PosService {
pub async fn get_rewards_by_address(
&self,
address: String,
epoch: Option<u64>,
) -> Result<Vec<Reward>, PoSError> {
// TODO: could optimize and make a single query

let db_rewards = self
.pos_repo
.find_rewards_by_address(address)
.find_rewards_by_address(address, epoch)
.await
.map_err(PoSError::Database)?;

Expand Down

0 comments on commit 7320744

Please sign in to comment.