select only

This commit is contained in:
Bryan Stitt 2022-08-06 01:55:18 +00:00
parent ba981d7948
commit 60d31aa1b5

View File

@ -13,10 +13,12 @@ use axum::{
}; };
use entities::user_keys; use entities::user_keys;
use reqwest::StatusCode; use reqwest::StatusCode;
use sea_orm::{ColumnTrait, EntityTrait, QueryFilter, QuerySelect}; use sea_orm::{
ColumnTrait, DeriveColumn, EntityTrait, EnumIter, IdenStatic, QueryFilter, QuerySelect,
};
use std::net::{IpAddr, SocketAddr}; use std::net::{IpAddr, SocketAddr};
use std::sync::Arc; use std::sync::Arc;
use tracing::debug; use tracing::info;
use uuid::Uuid; use uuid::Uuid;
use crate::app::Web3ProxyApp; use crate::app::Web3ProxyApp;
@ -55,17 +57,23 @@ pub async fn rate_limit_by_key(
) -> Result<(), impl IntoResponse> { ) -> Result<(), impl IntoResponse> {
let db = app.db_conn(); let db = app.db_conn();
#[derive(Copy, Clone, Debug, EnumIter, DeriveColumn)]
enum QueryAs {
UserId,
}
// query the db to make sure this key is active // query the db to make sure this key is active
// TODO: probably want a cache on this // TODO: probably want a cache on this
match user_keys::Entity::find() match user_keys::Entity::find()
// .select_only() .select_only()
// .column(user_keys::Column::UserId) .column_as(user_keys::Column::UserId, QueryAs::UserId)
.filter(user_keys::Column::ApiKey.eq(user_key)) .filter(user_keys::Column::ApiKey.eq(user_key))
.filter(user_keys::Column::Active.eq(true)) .filter(user_keys::Column::Active.eq(true))
.into_values::<_, QueryAs>()
.one(db) .one(db)
.await .await
{ {
Ok(Some(_)) => { Ok::<Option<i64>, _>(Some(_)) => {
// user key is valid // user key is valid
if let Some(rate_limiter) = app.rate_limiter() { if let Some(rate_limiter) = app.rate_limiter() {
if rate_limiter if rate_limiter