POST instead of GET and use more txs
This commit is contained in:
parent
8f76d9320d
commit
39a505c0ff
@ -38,7 +38,7 @@ use time::{Duration, OffsetDateTime};
|
|||||||
use tracing::{debug, info, warn};
|
use tracing::{debug, info, warn};
|
||||||
use ulid::Ulid;
|
use ulid::Ulid;
|
||||||
|
|
||||||
/// `GET /admin/increase_balance` -- As an admin, modify a user's user-tier
|
/// `POST /admin/increase_balance` -- As an admin, modify a user's user-tier
|
||||||
///
|
///
|
||||||
/// - user_address that is to credited balance
|
/// - user_address that is to credited balance
|
||||||
/// - user_role_tier that is supposed to be adapted
|
/// - user_role_tier that is supposed to be adapted
|
||||||
@ -49,17 +49,16 @@ pub async fn admin_increase_balance(
|
|||||||
Query(params): Query<HashMap<String, String>>,
|
Query(params): Query<HashMap<String, String>>,
|
||||||
) -> Web3ProxyResponse {
|
) -> Web3ProxyResponse {
|
||||||
let (caller, _) = app.bearer_is_authorized(bearer).await?;
|
let (caller, _) = app.bearer_is_authorized(bearer).await?;
|
||||||
|
|
||||||
let caller_id = caller.id;
|
let caller_id = caller.id;
|
||||||
|
|
||||||
// Establish connections
|
// Establish connections
|
||||||
let db_conn = app
|
let txn = app.db_transaction().await?;
|
||||||
.db_conn()
|
|
||||||
.context("query_admin_modify_user needs a db")?;
|
|
||||||
|
|
||||||
// Check if the caller is an admin (if not, return early)
|
// Check if the caller is an admin (if not, return early)
|
||||||
let admin_entry: admin::Model = admin::Entity::find()
|
let admin_entry: admin::Model = admin::Entity::find()
|
||||||
.filter(admin::Column::UserId.eq(caller_id))
|
.filter(admin::Column::UserId.eq(caller_id))
|
||||||
.one(&db_conn)
|
.one(&txn)
|
||||||
.await?
|
.await?
|
||||||
.ok_or(Web3ProxyError::AccessDenied)?;
|
.ok_or(Web3ProxyError::AccessDenied)?;
|
||||||
|
|
||||||
@ -73,14 +72,16 @@ pub async fn admin_increase_balance(
|
|||||||
.map_err(|_| {
|
.map_err(|_| {
|
||||||
Web3ProxyError::BadRequest("Unable to parse user_address as an Address".into())
|
Web3ProxyError::BadRequest("Unable to parse user_address as an Address".into())
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
let user_address_bytes: Vec<u8> = user_address.to_fixed_bytes().into();
|
let user_address_bytes: Vec<u8> = user_address.to_fixed_bytes().into();
|
||||||
|
|
||||||
let note: String = params
|
let note: String = params
|
||||||
.get("note")
|
.get("note")
|
||||||
.ok_or_else(|| Web3ProxyError::BadRequest("Unable to find 'note' key in request".into()))?
|
.ok_or_else(|| Web3ProxyError::BadRequest("Unable to find 'note' key in request".into()))?
|
||||||
.parse::<String>()
|
.parse::<String>()
|
||||||
.map_err(|_| Web3ProxyError::BadRequest("Unable to parse 'note' as a String".into()))?;
|
.map_err(|_| Web3ProxyError::BadRequest("Unable to parse 'note' as a String".into()))?;
|
||||||
|
|
||||||
// Get the amount from params
|
// Get the amount from params
|
||||||
// Decimal::from_str
|
|
||||||
let amount: Decimal = params
|
let amount: Decimal = params
|
||||||
.get("amount")
|
.get("amount")
|
||||||
.ok_or_else(|| {
|
.ok_or_else(|| {
|
||||||
@ -95,7 +96,7 @@ pub async fn admin_increase_balance(
|
|||||||
|
|
||||||
let user_entry: user::Model = user::Entity::find()
|
let user_entry: user::Model = user::Entity::find()
|
||||||
.filter(user::Column::Address.eq(user_address_bytes.clone()))
|
.filter(user::Column::Address.eq(user_address_bytes.clone()))
|
||||||
.one(&db_conn)
|
.one(&txn)
|
||||||
.await?
|
.await?
|
||||||
.ok_or(Web3ProxyError::BadRequest(
|
.ok_or(Web3ProxyError::BadRequest(
|
||||||
"No user with this id found".into(),
|
"No user with this id found".into(),
|
||||||
@ -108,14 +109,7 @@ pub async fn admin_increase_balance(
|
|||||||
note: sea_orm::Set(note),
|
note: sea_orm::Set(note),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
};
|
||||||
increase_balance_receipt.save(&db_conn).await?;
|
increase_balance_receipt.save(&txn).await?;
|
||||||
|
|
||||||
let mut out = HashMap::new();
|
|
||||||
out.insert(
|
|
||||||
"user",
|
|
||||||
serde_json::Value::String(format!("{:?}", user_address)),
|
|
||||||
);
|
|
||||||
out.insert("amount", serde_json::Value::String(amount.to_string()));
|
|
||||||
|
|
||||||
// update balance
|
// update balance
|
||||||
let balance_entry = balance::ActiveModel {
|
let balance_entry = balance::ActiveModel {
|
||||||
@ -133,16 +127,21 @@ pub async fn admin_increase_balance(
|
|||||||
)])
|
)])
|
||||||
.to_owned(),
|
.to_owned(),
|
||||||
)
|
)
|
||||||
.exec(&db_conn)
|
.exec(&txn)
|
||||||
.await
|
.await
|
||||||
.web3_context("admin is increasing balance")?;
|
.web3_context("admin is increasing balance")?;
|
||||||
|
|
||||||
let response = (StatusCode::OK, Json(out)).into_response();
|
txn.commit().await?;
|
||||||
|
|
||||||
Ok(response)
|
let out = json!({
|
||||||
|
"user": user_address,
|
||||||
|
"amount": amount.to_string(),
|
||||||
|
});
|
||||||
|
|
||||||
|
Ok(Json(out).into_response())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// `GET /admin/modify_role` -- As an admin, modify a user's user-tier
|
/// `POST /admin/modify_role` -- As an admin, modify a user's user-tier
|
||||||
///
|
///
|
||||||
/// - user_address that is to be modified
|
/// - user_address that is to be modified
|
||||||
/// - user_role_tier that is supposed to be adapted
|
/// - user_role_tier that is supposed to be adapted
|
||||||
|
@ -212,9 +212,9 @@ pub async fn serve(
|
|||||||
)
|
)
|
||||||
.route(
|
.route(
|
||||||
"/admin/increase_balance",
|
"/admin/increase_balance",
|
||||||
get(admin::admin_increase_balance),
|
post(admin::admin_increase_balance),
|
||||||
)
|
)
|
||||||
.route("/admin/modify_role", get(admin::admin_change_user_roles))
|
.route("/admin/modify_role", post(admin::admin_change_user_roles))
|
||||||
.route(
|
.route(
|
||||||
"/admin/imitate-login/:admin_address/:user_address",
|
"/admin/imitate-login/:admin_address/:user_address",
|
||||||
get(admin::admin_login_get),
|
get(admin::admin_login_get),
|
||||||
|
Loading…
Reference in New Issue
Block a user