42 lines
1.3 KiB
Rust
42 lines
1.3 KiB
Rust
|
use super::StatType;
|
||
|
use crate::{
|
||
|
app::Web3ProxyApp, frontend::errors::FrontendErrorResponse,
|
||
|
http_params::get_user_id_from_params,
|
||
|
};
|
||
|
use anyhow::Context;
|
||
|
use axum::{
|
||
|
headers::{authorization::Bearer, Authorization},
|
||
|
response::Response,
|
||
|
TypedHeader,
|
||
|
};
|
||
|
use hashbrown::HashMap;
|
||
|
|
||
|
pub async fn query_user_stats<'a>(
|
||
|
app: &'a Web3ProxyApp,
|
||
|
bearer: Option<TypedHeader<Authorization<Bearer>>>,
|
||
|
params: &'a HashMap<String, String>,
|
||
|
stat_response_type: StatType,
|
||
|
) -> Result<Response, FrontendErrorResponse> {
|
||
|
let db_conn = app.db_conn().context("query_user_stats needs a db")?;
|
||
|
let db_replica = app
|
||
|
.db_replica()
|
||
|
.context("query_user_stats needs a db replica")?;
|
||
|
let mut redis_conn = app
|
||
|
.redis_conn()
|
||
|
.await
|
||
|
.context("query_user_stats had a redis connection error")?
|
||
|
.context("query_user_stats needs a redis")?;
|
||
|
|
||
|
// TODO: have a getter for this. do we need a connection pool on it?
|
||
|
let influxdb_client = app
|
||
|
.influxdb_client
|
||
|
.as_ref()
|
||
|
.context("query_user_stats needs an influxdb client")?;
|
||
|
|
||
|
// get the user id first. if it is 0, we should use a cache on the app
|
||
|
let user_id =
|
||
|
get_user_id_from_params(&mut redis_conn, &db_conn, &db_replica, bearer, params).await?;
|
||
|
|
||
|
todo!();
|
||
|
}
|