Segment pending revenue in API response (#3283)
This commit is contained in:
parent
f75d824c92
commit
067f471766
@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "\n SELECT SUM(amount)\n FROM payouts_values\n WHERE user_id = $1 AND date_available > NOW()\n ",
|
|
||||||
"describe": {
|
|
||||||
"columns": [
|
|
||||||
{
|
|
||||||
"ordinal": 0,
|
|
||||||
"name": "sum",
|
|
||||||
"type_info": "Numeric"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Int8"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": [
|
|
||||||
null
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"hash": "0379424a41b12db94c7734086fca5b96c8cdfe0a9f9c00e5c67e6b95a33c8c6b"
|
|
||||||
}
|
|
||||||
@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "\n SELECT SUM(amount)\n FROM payouts_values\n WHERE user_id = $1 AND date_available <= NOW()\n ",
|
|
||||||
"describe": {
|
|
||||||
"columns": [
|
|
||||||
{
|
|
||||||
"ordinal": 0,
|
|
||||||
"name": "sum",
|
|
||||||
"type_info": "Numeric"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Int8"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": [
|
|
||||||
null
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"hash": "0a31f7b04f4b68c556bdbfe373ef7945741f915d4ae657363fe67db46e8bd4cf"
|
|
||||||
}
|
|
||||||
28
apps/labrinth/.sqlx/query-58fbda9daed27c5c466849a944ab3df193679cef17e8588ac3be79978b60bdab.json
generated
Normal file
28
apps/labrinth/.sqlx/query-58fbda9daed27c5c466849a944ab3df193679cef17e8588ac3be79978b60bdab.json
generated
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"db_name": "PostgreSQL",
|
||||||
|
"query": "\n SELECT date_available, SUM(amount) sum\n FROM payouts_values\n WHERE user_id = $1\n GROUP BY date_available\n ORDER BY date_available DESC\n ",
|
||||||
|
"describe": {
|
||||||
|
"columns": [
|
||||||
|
{
|
||||||
|
"ordinal": 0,
|
||||||
|
"name": "date_available",
|
||||||
|
"type_info": "Timestamptz"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ordinal": 1,
|
||||||
|
"name": "sum",
|
||||||
|
"type_info": "Numeric"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parameters": {
|
||||||
|
"Left": [
|
||||||
|
"Int8"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"nullable": [
|
||||||
|
false,
|
||||||
|
null
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"hash": "58fbda9daed27c5c466849a944ab3df193679cef17e8588ac3be79978b60bdab"
|
||||||
|
}
|
||||||
@ -9,7 +9,7 @@ use crate::queue::payouts::{make_aditude_request, PayoutsQueue};
|
|||||||
use crate::queue::session::AuthQueue;
|
use crate::queue::session::AuthQueue;
|
||||||
use crate::routes::ApiError;
|
use crate::routes::ApiError;
|
||||||
use actix_web::{delete, get, post, web, HttpRequest, HttpResponse};
|
use actix_web::{delete, get, post, web, HttpRequest, HttpResponse};
|
||||||
use chrono::{Datelike, Duration, TimeZone, Utc, Weekday};
|
use chrono::{DateTime, Datelike, Duration, TimeZone, Utc, Weekday};
|
||||||
use hex::ToHex;
|
use hex::ToHex;
|
||||||
use hmac::{Hmac, Mac, NewMac};
|
use hmac::{Hmac, Mac, NewMac};
|
||||||
use reqwest::Method;
|
use reqwest::Method;
|
||||||
@ -763,6 +763,7 @@ pub async fn payment_methods(
|
|||||||
pub struct UserBalance {
|
pub struct UserBalance {
|
||||||
pub available: Decimal,
|
pub available: Decimal,
|
||||||
pub pending: Decimal,
|
pub pending: Decimal,
|
||||||
|
pub dates: HashMap<DateTime<Utc>, Decimal>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("balance")]
|
#[get("balance")]
|
||||||
@ -791,27 +792,27 @@ async fn get_user_balance(
|
|||||||
user_id: crate::database::models::ids::UserId,
|
user_id: crate::database::models::ids::UserId,
|
||||||
pool: &PgPool,
|
pool: &PgPool,
|
||||||
) -> Result<UserBalance, sqlx::Error> {
|
) -> Result<UserBalance, sqlx::Error> {
|
||||||
let available = sqlx::query!(
|
let payouts = sqlx::query!(
|
||||||
"
|
"
|
||||||
SELECT SUM(amount)
|
SELECT date_available, SUM(amount) sum
|
||||||
FROM payouts_values
|
FROM payouts_values
|
||||||
WHERE user_id = $1 AND date_available <= NOW()
|
WHERE user_id = $1
|
||||||
|
GROUP BY date_available
|
||||||
|
ORDER BY date_available DESC
|
||||||
",
|
",
|
||||||
user_id.0
|
user_id.0
|
||||||
)
|
)
|
||||||
.fetch_optional(pool)
|
.fetch_all(pool)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
let pending = sqlx::query!(
|
let available = payouts
|
||||||
"
|
.iter()
|
||||||
SELECT SUM(amount)
|
.filter(|x| x.date_available <= Utc::now())
|
||||||
FROM payouts_values
|
.fold(Decimal::ZERO, |acc, x| acc + x.sum.unwrap_or(Decimal::ZERO));
|
||||||
WHERE user_id = $1 AND date_available > NOW()
|
let pending = payouts
|
||||||
",
|
.iter()
|
||||||
user_id.0
|
.filter(|x| x.date_available > Utc::now())
|
||||||
)
|
.fold(Decimal::ZERO, |acc, x| acc + x.sum.unwrap_or(Decimal::ZERO));
|
||||||
.fetch_optional(pool)
|
|
||||||
.await?;
|
|
||||||
|
|
||||||
let withdrawn = sqlx::query!(
|
let withdrawn = sqlx::query!(
|
||||||
"
|
"
|
||||||
@ -824,12 +825,6 @@ async fn get_user_balance(
|
|||||||
.fetch_optional(pool)
|
.fetch_optional(pool)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
let available = available
|
|
||||||
.map(|x| x.sum.unwrap_or(Decimal::ZERO))
|
|
||||||
.unwrap_or(Decimal::ZERO);
|
|
||||||
let pending = pending
|
|
||||||
.map(|x| x.sum.unwrap_or(Decimal::ZERO))
|
|
||||||
.unwrap_or(Decimal::ZERO);
|
|
||||||
let (withdrawn, fees) = withdrawn
|
let (withdrawn, fees) = withdrawn
|
||||||
.map(|x| {
|
.map(|x| {
|
||||||
(
|
(
|
||||||
@ -844,6 +839,10 @@ async fn get_user_balance(
|
|||||||
- withdrawn.round_dp(16)
|
- withdrawn.round_dp(16)
|
||||||
- fees.round_dp(16),
|
- fees.round_dp(16),
|
||||||
pending,
|
pending,
|
||||||
|
dates: payouts
|
||||||
|
.iter()
|
||||||
|
.map(|x| (x.date_available, x.sum.unwrap_or(Decimal::ZERO)))
|
||||||
|
.collect(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user