Skip to content

Commit 067f471

Browse files
Segment pending revenue in API response (#3283)
1 parent f75d824 commit 067f471

4 files changed

+48
-65
lines changed

apps/labrinth/.sqlx/query-0379424a41b12db94c7734086fca5b96c8cdfe0a9f9c00e5c67e6b95a33c8c6b.json

Lines changed: 0 additions & 22 deletions
This file was deleted.

apps/labrinth/.sqlx/query-0a31f7b04f4b68c556bdbfe373ef7945741f915d4ae657363fe67db46e8bd4cf.json

Lines changed: 0 additions & 22 deletions
This file was deleted.

apps/labrinth/.sqlx/query-58fbda9daed27c5c466849a944ab3df193679cef17e8588ac3be79978b60bdab.json

Lines changed: 28 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apps/labrinth/src/routes/v3/payouts.rs

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use crate::queue::payouts::{make_aditude_request, PayoutsQueue};
99
use crate::queue::session::AuthQueue;
1010
use crate::routes::ApiError;
1111
use actix_web::{delete, get, post, web, HttpRequest, HttpResponse};
12-
use chrono::{Datelike, Duration, TimeZone, Utc, Weekday};
12+
use chrono::{DateTime, Datelike, Duration, TimeZone, Utc, Weekday};
1313
use hex::ToHex;
1414
use hmac::{Hmac, Mac, NewMac};
1515
use reqwest::Method;
@@ -763,6 +763,7 @@ pub async fn payment_methods(
763763
pub struct UserBalance {
764764
pub available: Decimal,
765765
pub pending: Decimal,
766+
pub dates: HashMap<DateTime<Utc>, Decimal>,
766767
}
767768

768769
#[get("balance")]
@@ -791,27 +792,27 @@ async fn get_user_balance(
791792
user_id: crate::database::models::ids::UserId,
792793
pool: &PgPool,
793794
) -> Result<UserBalance, sqlx::Error> {
794-
let available = sqlx::query!(
795+
let payouts = sqlx::query!(
795796
"
796-
SELECT SUM(amount)
797+
SELECT date_available, SUM(amount) sum
797798
FROM payouts_values
798-
WHERE user_id = $1 AND date_available <= NOW()
799+
WHERE user_id = $1
800+
GROUP BY date_available
801+
ORDER BY date_available DESC
799802
",
800803
user_id.0
801804
)
802-
.fetch_optional(pool)
805+
.fetch_all(pool)
803806
.await?;
804807

805-
let pending = sqlx::query!(
806-
"
807-
SELECT SUM(amount)
808-
FROM payouts_values
809-
WHERE user_id = $1 AND date_available > NOW()
810-
",
811-
user_id.0
812-
)
813-
.fetch_optional(pool)
814-
.await?;
808+
let available = payouts
809+
.iter()
810+
.filter(|x| x.date_available <= Utc::now())
811+
.fold(Decimal::ZERO, |acc, x| acc + x.sum.unwrap_or(Decimal::ZERO));
812+
let pending = payouts
813+
.iter()
814+
.filter(|x| x.date_available > Utc::now())
815+
.fold(Decimal::ZERO, |acc, x| acc + x.sum.unwrap_or(Decimal::ZERO));
815816

816817
let withdrawn = sqlx::query!(
817818
"
@@ -824,12 +825,6 @@ async fn get_user_balance(
824825
.fetch_optional(pool)
825826
.await?;
826827

827-
let available = available
828-
.map(|x| x.sum.unwrap_or(Decimal::ZERO))
829-
.unwrap_or(Decimal::ZERO);
830-
let pending = pending
831-
.map(|x| x.sum.unwrap_or(Decimal::ZERO))
832-
.unwrap_or(Decimal::ZERO);
833828
let (withdrawn, fees) = withdrawn
834829
.map(|x| {
835830
(
@@ -844,6 +839,10 @@ async fn get_user_balance(
844839
- withdrawn.round_dp(16)
845840
- fees.round_dp(16),
846841
pending,
842+
dates: payouts
843+
.iter()
844+
.map(|x| (x.date_available, x.sum.unwrap_or(Decimal::ZERO)))
845+
.collect(),
847846
})
848847
}
849848

0 commit comments

Comments
 (0)