Add SQLx operation tracing (#5223)

* wip: vendor sqlx-tracing

* (compiles) standardize pg types used

* more standardization

* general log message improvements

* wip: improve sqlx-tracing architecture

* unify sqlx::Executor type

* wip: try fix sqlx tracing

* wip: sqlx-tracing compiles

* so close

* it compiles

* fix ci
This commit is contained in:
aecsocket
2026-01-28 13:38:57 +00:00
committed by GitHub
parent 7cb7e881fa
commit e57c15b3ce
146 changed files with 7320 additions and 801 deletions

View File

@@ -1,4 +1,5 @@
use crate::auth::validate::get_user_record_from_bearer_token;
use crate::database::PgPool;
use crate::database::redis::RedisPool;
use crate::models::analytics::Download;
use crate::models::ids::ProjectId;
@@ -11,7 +12,6 @@ use crate::util::date::get_current_tenths_of_ms;
use crate::util::guards::admin_key_guard;
use actix_web::{HttpRequest, HttpResponse, patch, post, web};
use serde::Deserialize;
use sqlx::PgPool;
use std::collections::HashMap;
use std::net::Ipv4Addr;
use std::sync::Arc;

View File

@@ -1,5 +1,6 @@
use std::{collections::HashMap, net::Ipv4Addr, sync::Arc};
use crate::database::PgPool;
use crate::{
auth::get_user_from_headers,
database::{
@@ -21,7 +22,6 @@ use actix_web::{HttpRequest, delete, get, patch, post, put, web};
use ariadne::ids::UserId;
use chrono::Utc;
use serde::{Deserialize, Serialize};
use sqlx::PgPool;
use tracing::trace;
use url::Url;
@@ -254,7 +254,7 @@ async fn create(
affiliate: affiliate_id,
source_name: body.source_name.clone(),
};
code.insert(&mut *transaction)
code.insert(&mut transaction)
.await
.wrap_internal_err("failed to insert affiliate code")?;

View File

@@ -11,6 +11,7 @@ use crate::database::models::{
user_subscription_item,
};
use crate::database::redis::RedisPool;
use crate::database::{PgPool, PgTransaction};
use crate::models::billing::{
Charge, ChargeStatus, ChargeType, PaymentPlatform, Price, PriceDuration,
Product, ProductMetadata, ProductPrice, SubscriptionMetadata,
@@ -29,7 +30,6 @@ use chrono::{Duration, Utc};
use rust_decimal::Decimal;
use rust_decimal::prelude::ToPrimitive;
use serde::{Deserialize, Serialize};
use sqlx::{PgPool, Postgres, Transaction};
use std::collections::HashMap;
use std::str::FromStr;
use stripe::{
@@ -449,7 +449,7 @@ pub async fn reprocess_charge_tax(
let mut txn = pool.begin().await?;
let charge_refund = charge_item::DBCharge::get(id.into(), &mut *txn)
let charge_refund = charge_item::DBCharge::get(id.into(), &mut txn)
.await?
.ok_or_else(|| ApiError::NotFound)?;
@@ -466,10 +466,9 @@ pub async fn reprocess_charge_tax(
));
}
None => {
let charge =
charge_item::DBCharge::get(parent_charge_id, &mut *txn)
.await?
.ok_or_else(|| ApiError::NotFound)?;
let charge = charge_item::DBCharge::get(parent_charge_id, &mut txn)
.await?
.ok_or_else(|| ApiError::NotFound)?;
let payment_platform_id = charge
.payment_platform_id
@@ -503,7 +502,7 @@ pub async fn reprocess_charge_tax(
};
let tax_id =
product_info_by_product_price_id(charge.price_id, &mut *txn)
product_info_by_product_price_id(charge.price_id, &mut txn)
.await?
.ok_or_else(|| {
ApiError::InvalidInput(
@@ -634,13 +633,13 @@ pub async fn edit_subscription(
/// if this operation will require immediate payment or if the user can be
/// charged only after the promotion interval ends.
async fn promotion_payment_requirement(
txn: &mut sqlx::PgTransaction<'_>,
txn: &mut PgTransaction<'_>,
current_product_price: &product_item::DBProductPrice,
new_product_price: &product_item::DBProductPrice,
) -> Result<PaymentRequirement, ApiError> {
let new_product = product_item::DBProduct::get(
new_product_price.product_id,
&mut **txn,
&mut *txn,
)
.await?
.ok_or_else(|| {
@@ -650,7 +649,7 @@ pub async fn edit_subscription(
})?;
let current_product = product_item::DBProduct::get(
current_product_price.product_id,
&mut **txn,
&mut *txn,
)
.await?
.ok_or_else(|| {
@@ -769,7 +768,7 @@ pub async fn edit_subscription(
let mut open_charge = charge_item::DBCharge::get_open_subscription(
subscription.id,
&mut *transaction,
&mut transaction,
)
.await?
.ok_or_else(|| {
@@ -780,7 +779,7 @@ pub async fn edit_subscription(
let current_price = product_item::DBProductPrice::get(
subscription.price_id,
&mut *transaction,
&mut transaction,
)
.await?
.ok_or_else(|| {
@@ -798,7 +797,7 @@ pub async fn edit_subscription(
if cancelled {
DBUsersSubscriptionsAffiliations::deactivate(
subscription.id,
&mut *transaction,
&mut transaction,
)
.await?;
open_charge.status = ChargeStatus::Cancelled;
@@ -822,7 +821,7 @@ pub async fn edit_subscription(
open_charge.status = if cancelled {
DBUsersSubscriptionsAffiliations::deactivate(
subscription.id,
&mut *transaction,
&mut transaction,
)
.await?;
ChargeStatus::Cancelled
@@ -845,7 +844,7 @@ pub async fn edit_subscription(
let new_product_price =
product_item::DBProductPrice::get_all_product_prices(
product_id.into(),
&mut *transaction,
&mut transaction,
)
.await?
.into_iter()
@@ -1650,7 +1649,7 @@ pub async fn stripe_webhook(
pool: &PgPool,
redis: &RedisPool,
charge_status: ChargeStatus,
transaction: &mut Transaction<'_, Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<PaymentIntentMetadata, ApiError> {
'metadata: {
let Some(user_id) = metadata
@@ -1977,7 +1976,7 @@ pub async fn stripe_webhook(
metadata.user_item.id
as crate::database::models::ids::DBUserId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
ProductMetadata::Pyro {
@@ -2161,7 +2160,7 @@ pub async fn stripe_webhook(
{
let open_charge = DBCharge::get_open_subscription(
subscription.id,
&mut *transaction,
&mut transaction,
)
.await?;
@@ -2269,7 +2268,7 @@ pub async fn stripe_webhook(
),
deactivated_at: None,
}
.insert(&mut *transaction)
.insert(&mut transaction)
.await?;
}
};
@@ -2409,7 +2408,7 @@ pub async fn stripe_webhook(
#[allow(clippy::too_many_arguments)]
async fn apply_credit_many(
transaction: &mut Transaction<'_, Postgres>,
transaction: &mut PgTransaction<'_>,
redis: &RedisPool,
current_user_id: crate::database::models::ids::DBUserId,
subscription_ids: Vec<crate::models::ids::UserSubscriptionId>,
@@ -2423,7 +2422,7 @@ async fn apply_credit_many(
.collect();
let subs = user_subscription_item::DBUserSubscription::get_many(
&subs_ids,
&mut **transaction,
&mut *transaction,
)
.await?;
@@ -2451,7 +2450,7 @@ async fn apply_credit_many(
let mut open_charge = charge_item::DBCharge::get_open_subscription(
subscription.id,
&mut **transaction,
&mut *transaction,
)
.await?
.ok_or_else(|| {
@@ -2598,7 +2597,7 @@ pub async fn credit(
server_ids.dedup();
let subs = user_subscription_item::DBUserSubscription::get_many_by_server_ids(
&server_ids,
&mut *transaction,
&mut transaction,
)
.await?;
if subs.is_empty() {
@@ -2622,7 +2621,7 @@ pub async fn credit(
archon_client.get_active_servers_by_region(&region).await?;
let subs = user_subscription_item::DBUserSubscription::get_many_by_server_ids(
&servers.into_iter().map(|id| id.to_string()).collect::<Vec<String>>(),
&mut *transaction,
&mut transaction,
)
.await?;
if subs.is_empty() {

View File

@@ -10,10 +10,10 @@ use crate::models::v3::users::User;
use crate::routes::ApiError;
use crate::util::anrok;
use crate::database::PgPool;
use ariadne::ids::base62_impl::to_base62;
use ariadne::ids::*;
use serde::Deserialize;
use sqlx::PgPool;
use std::collections::HashMap;
use std::str::FromStr;
use stripe::{
@@ -92,7 +92,7 @@ impl AttachedCharge {
}
pub async fn from_charge_request_type(
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
charge_request_type: ChargeRequestType,
) -> Result<Self, ApiError> {
Ok(match charge_request_type {

View File

@@ -1,11 +1,11 @@
use std::{collections::HashMap, fmt::Write, sync::LazyLock, time::Instant};
use crate::database::PgPool;
use actix_web::{HttpRequest, HttpResponse, get, post, web};
use chrono::{DateTime, Utc};
use eyre::eyre;
use reqwest::header::{HeaderMap, HeaderValue, USER_AGENT};
use serde::Deserialize;
use sqlx::PgPool;
use tokio::sync::Mutex;
use tracing::info;
@@ -200,7 +200,7 @@ async fn ingest_report_deserialized(
"#,
DBProjectId::from(report.project_id) as _,
)
.fetch_one(&mut *transaction)
.fetch_one(&mut transaction)
.await
.wrap_internal_err("failed to check if pending issue details exist")?;
@@ -292,7 +292,7 @@ async fn ingest_report_deserialized(
}
pub async fn run(
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
run_parameters: DelphiRunParameters,
) -> Result<HttpResponse, ApiError> {
let file_data = sqlx::query!(

View File

@@ -1,4 +1,5 @@
use crate::auth::get_user_from_headers;
use crate::database::PgPool;
use crate::database::models::ids::DBUserId;
use crate::database::models::notification_item::NotificationBuilder;
use crate::database::models::user_item::DBUser;
@@ -14,7 +15,6 @@ use actix_web::web;
use actix_web::{HttpResponse, post};
use ariadne::ids::UserId;
use serde::Deserialize;
use sqlx::PgPool;
pub fn config(cfg: &mut web::ServiceConfig) {
cfg.service(create).service(send_custom_email);
@@ -41,7 +41,7 @@ pub async fn create(
let mut txn = pool.begin().await?;
if !DBUser::exists_many(&user_ids, &mut *txn).await? {
if !DBUser::exists_many(&user_ids, &mut txn).await? {
return Err(ApiError::InvalidInput(
"One of the specified users do not exist.".to_owned(),
));

View File

@@ -2,6 +2,8 @@ use crate::auth::validate::{
get_full_user_from_headers, get_user_record_from_bearer_token,
};
use crate::auth::{AuthProvider, AuthenticationError, get_user_from_headers};
use crate::database::PgPool;
use crate::database::PgTransaction;
use crate::database::models::flow_item::DBFlow;
use crate::database::models::notification_item::NotificationBuilder;
use crate::database::models::{DBUser, DBUserId};
@@ -34,7 +36,6 @@ use rand_chacha::ChaCha20Rng;
use rand_chacha::rand_core::SeedableRng;
use reqwest::header::AUTHORIZATION;
use serde::{Deserialize, Serialize};
use sqlx::postgres::PgPool;
use std::collections::HashMap;
use std::str::FromStr;
use std::sync::Arc;
@@ -80,7 +81,7 @@ impl TempUser {
async fn create_account(
self,
provider: AuthProvider,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
client: &PgPool,
file_host: &Arc<dyn FileHost + Send + Sync>,
redis: &RedisPool,
@@ -834,7 +835,7 @@ impl AuthProvider {
executor: E,
) -> Result<Option<crate::database::models::DBUserId>, AuthenticationError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
Ok(match self {
AuthProvider::GitHub => {
@@ -918,7 +919,7 @@ impl AuthProvider {
&self,
user_id: crate::database::models::DBUserId,
id: Option<&str>,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<(), AuthenticationError> {
match self {
AuthProvider::GitHub => {
@@ -931,7 +932,7 @@ impl AuthProvider {
user_id as crate::database::models::DBUserId,
id.and_then(|x| x.parse::<i64>().ok())
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
}
AuthProvider::Discord => {
@@ -944,7 +945,7 @@ impl AuthProvider {
user_id as crate::database::models::DBUserId,
id.and_then(|x| x.parse::<i64>().ok())
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
}
AuthProvider::Microsoft => {
@@ -957,7 +958,7 @@ impl AuthProvider {
user_id as crate::database::models::DBUserId,
id,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
}
AuthProvider::GitLab => {
@@ -970,7 +971,7 @@ impl AuthProvider {
user_id as crate::database::models::DBUserId,
id.and_then(|x| x.parse::<i64>().ok())
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
}
AuthProvider::Google => {
@@ -983,7 +984,7 @@ impl AuthProvider {
user_id as crate::database::models::DBUserId,
id,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
}
AuthProvider::Steam => {
@@ -996,7 +997,7 @@ impl AuthProvider {
user_id as crate::database::models::DBUserId,
id.and_then(|x| x.parse::<i64>().ok())
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
}
AuthProvider::PayPal => {
@@ -1009,7 +1010,7 @@ impl AuthProvider {
",
user_id as crate::database::models::DBUserId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
} else {
sqlx::query!(
@@ -1021,7 +1022,7 @@ impl AuthProvider {
user_id as crate::database::models::DBUserId,
id,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
}
}
@@ -1217,7 +1218,7 @@ pub async fn auth_callback(
oauth_user.id,
existing_user_id as DBUserId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await
.wrap_err("failed to update user PayPal info")?;
@@ -1649,7 +1650,7 @@ async fn validate_2fa_code(
user_id: crate::database::models::DBUserId,
redis: &RedisPool,
pool: &PgPool,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<bool, AuthenticationError> {
let totp = totp_rs::TOTP::new(
totp_rs::Algorithm::SHA1,
@@ -1705,7 +1706,7 @@ async fn validate_2fa_code(
user_id as crate::database::models::ids::DBUserId,
code as i64,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
crate::database::models::DBUser::clear_caches(
@@ -1867,7 +1868,7 @@ pub async fn finish_2fa_flow(
secret,
user_id as crate::database::models::ids::DBUserId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
sqlx::query!(
@@ -1877,7 +1878,7 @@ pub async fn finish_2fa_flow(
",
user_id as crate::database::models::ids::DBUserId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
let mut codes = Vec::new();
@@ -1898,7 +1899,7 @@ pub async fn finish_2fa_flow(
user_id as crate::database::models::ids::DBUserId,
val as i64,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
codes.push(to_base62(val));
@@ -1986,7 +1987,7 @@ pub async fn remove_2fa(
",
user.id as crate::database::models::ids::DBUserId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
sqlx::query!(
@@ -1996,7 +1997,7 @@ pub async fn remove_2fa(
",
user.id as crate::database::models::ids::DBUserId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
NotificationBuilder {
@@ -2036,7 +2037,7 @@ pub async fn reset_password_begin(
let user =
match crate::database::models::DBUser::get_by_case_insensitive_email(
&reset_password.username_or_email,
&mut *txn,
&mut txn,
)
.await?[..]
{
@@ -2044,7 +2045,7 @@ pub async fn reset_password_begin(
// Try finding by username or ID
crate::database::models::DBUser::get(
&reset_password.username_or_email,
&mut *txn,
&mut txn,
&redis,
)
.await?
@@ -2053,7 +2054,7 @@ pub async fn reset_password_begin(
// If there is only one user with the given email, ignoring case,
// we can assume it's the user we want to reset the password for
crate::database::models::DBUser::get_id(
user_id, &mut *txn, &redis,
user_id, &mut txn, &redis,
)
.await?
}
@@ -2065,12 +2066,12 @@ pub async fn reset_password_begin(
if let Some(user_id) =
crate::database::models::DBUser::get_by_email(
&reset_password.username_or_email,
&mut *txn,
&mut txn,
)
.await?
{
crate::database::models::DBUser::get_id(
user_id, &mut *txn, &redis,
user_id, &mut txn, &redis,
)
.await?
} else {
@@ -2232,7 +2233,7 @@ pub async fn change_password(
update_password,
user.id as crate::database::models::ids::DBUserId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
if let Some(flow) = &change_password.flow {
@@ -2317,7 +2318,7 @@ pub async fn set_email(
email_address.email,
user.id.0 as i64,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
if let Some(user_email) = user.email.clone() {
@@ -2473,7 +2474,7 @@ pub async fn verify_email(
",
user.id as crate::database::models::ids::DBUserId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
DBFlow::remove(&email.flow, &redis).await?;

View File

@@ -1,10 +1,10 @@
use crate::auth::get_user_from_headers;
use crate::database::PgPool;
use crate::database::redis::RedisPool;
use crate::models::pats::Scopes;
use crate::queue::session::AuthQueue;
use crate::routes::ApiError;
use actix_web::{HttpRequest, HttpResponse, post, web};
use sqlx::PgPool;
pub fn config(cfg: &mut web::ServiceConfig) {
cfg.service(web::scope("gdpr").service(export));

View File

@@ -1,8 +1,8 @@
use crate::database::PgPool;
use actix_web::{HttpResponse, post, web};
use ariadne::ids::UserId;
use chrono::Utc;
use serde::{Deserialize, Serialize};
use sqlx::PgPool;
use tracing::warn;
use crate::database::models::users_redeemals::{
@@ -63,7 +63,7 @@ pub async fn redeem(
let maybe_fields =
RedeemalLookupFields::redeemal_status_by_username_and_offer(
&mut *txn,
&mut txn,
&username,
Offer::Medal,
)
@@ -93,7 +93,7 @@ pub async fn redeem(
n_attempts: 0,
};
redeemal.insert(&mut *txn).await?;
redeemal.insert(&mut txn).await?;
txn.commit().await?;

View File

@@ -1,6 +1,7 @@
use super::ApiError;
use crate::auth::get_user_from_headers;
use crate::database;
use crate::database::PgPool;
use crate::database::models::DBModerationLock;
use crate::database::redis::RedisPool;
use crate::models::ids::OrganizationId;
@@ -14,7 +15,6 @@ use ariadne::ids::{UserId, random_base62};
use chrono::{DateTime, Utc};
use ownership::get_projects_ownership;
use serde::{Deserialize, Serialize};
use sqlx::PgPool;
use std::collections::HashMap;
mod ownership;
@@ -462,7 +462,7 @@ async fn set_project_meta(
.bind(&links[..])
.bind(&proofs[..])
.bind(&flame_ids[..])
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
sqlx::query(
@@ -475,7 +475,7 @@ async fn set_project_meta(
)
.bind(&file_hashes[..])
.bind(&ids[..])
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
transaction.commit().await?;

View File

@@ -1,3 +1,4 @@
use crate::database::PgPool;
use crate::database::models::{DBOrganization, DBTeamId, DBTeamMember, DBUser};
use crate::database::redis::RedisPool;
use crate::models::ids::OrganizationId;
@@ -5,7 +6,6 @@ use crate::routes::internal::moderation::Ownership;
use crate::util::error::Context;
use ariadne::ids::UserId;
use eyre::eyre;
use sqlx::PgPool;
/// Fetches ownership information for multiple projects efficiently
pub async fn get_projects_ownership(

View File

@@ -1,10 +1,10 @@
use std::{collections::HashMap, fmt};
use crate::database::PgPool;
use actix_web::{HttpRequest, get, patch, post, put, web};
use chrono::{DateTime, Utc};
use itertools::Itertools;
use serde::{Deserialize, Serialize};
use sqlx::PgPool;
use super::ownership::get_projects_ownership;
use crate::{
@@ -986,7 +986,7 @@ async fn submit_report(
"#,
project_id as _,
)
.fetch_all(&mut *txn)
.fetch_all(&mut txn)
.await
.wrap_internal_err("failed to fetch pending issues")?;
@@ -1016,7 +1016,7 @@ async fn submit_report(
",
project_id as _,
)
.execute(&mut *txn)
.execute(&mut txn)
.await
.wrap_internal_err("failed to delete dummy issue")?;
@@ -1029,7 +1029,7 @@ async fn submit_report(
"#,
project_id as _,
)
.fetch_one(&mut *txn)
.fetch_one(&mut txn)
.await
.wrap_internal_err("failed to update reports")?;
@@ -1087,7 +1087,7 @@ async fn submit_report(
ProjectStatus::Rejected.as_str(),
project_id as _,
)
.fetch_one(&mut *txn)
.fetch_one(&mut txn)
.await
.wrap_internal_err("failed to mark project as rejected")?;
@@ -1182,7 +1182,7 @@ async fn update_issue_detail(
status as _,
issue_detail_id as _,
)
.execute(&mut *txn)
.execute(&mut txn)
.await
.wrap_internal_err("failed to update issue detail")?;
if results.rows_affected() == 0 {
@@ -1240,7 +1240,7 @@ async fn add_report(
"#,
DBFileId::from(file_id) as _,
)
.fetch_one(&mut *txn)
.fetch_one(&mut txn)
.await
.wrap_internal_err("failed to fetch file")?;

View File

@@ -13,13 +13,13 @@ use rand::distributions::Alphanumeric;
use rand_chacha::ChaCha20Rng;
use rand_chacha::rand_core::SeedableRng;
use crate::database::PgPool;
use crate::database::models::notification_item::NotificationBuilder;
use crate::models::notifications::NotificationBody;
use crate::models::pats::{PersonalAccessToken, Scopes};
use crate::queue::session::AuthQueue;
use crate::util::validate::validation_errors_to_string;
use serde::Deserialize;
use sqlx::postgres::PgPool;
use validator::Validate;
pub fn config(cfg: &mut web::ServiceConfig) {
@@ -216,7 +216,7 @@ pub async fn edit_pat(
scopes.bits() as i64,
pat.id.0
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
if let Some(name) = &info.name {
@@ -229,7 +229,7 @@ pub async fn edit_pat(
name,
pat.id.0
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
if let Some(expires) = &info.expires {
@@ -248,7 +248,7 @@ pub async fn edit_pat(
expires,
pat.id.0
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}

View File

@@ -3,6 +3,7 @@ use crate::database::models::DBUserId;
use crate::database::models::session_item::DBSession;
use crate::database::models::session_item::SessionBuilder;
use crate::database::redis::RedisPool;
use crate::database::{PgPool, PgTransaction};
use crate::models::pats::Scopes;
use crate::models::sessions::Session;
use crate::queue::session::AuthQueue;
@@ -15,7 +16,6 @@ use chrono::Utc;
use rand::distributions::Alphanumeric;
use rand::{Rng, SeedableRng};
use rand_chacha::ChaCha20Rng;
use sqlx::PgPool;
use woothee::parser::Parser;
pub fn config(cfg: &mut ServiceConfig) {
@@ -86,7 +86,7 @@ pub async fn get_session_metadata(
pub async fn issue_session(
req: HttpRequest,
user_id: DBUserId,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
redis: &RedisPool,
) -> Result<DBSession, AuthenticationError> {
let metadata = get_session_metadata(&req).await?;
@@ -112,7 +112,7 @@ pub async fn issue_session(
.insert(transaction)
.await?;
let session = DBSession::get_id(id, &mut **transaction, redis)
let session = DBSession::get_id(id, &mut *transaction, redis)
.await?
.ok_or_else(|| AuthenticationError::InvalidCredentials)?;

View File

@@ -1,5 +1,6 @@
use crate::auth::AuthenticationError;
use crate::auth::validate::get_user_record_from_bearer_token;
use crate::database::PgPool;
use crate::database::models::friend_item::DBFriend;
use crate::database::redis::RedisPool;
use crate::models::pats::Scopes;
@@ -27,7 +28,6 @@ use futures_util::future::select;
use futures_util::{StreamExt, TryStreamExt};
use redis::AsyncCommands;
use serde::Deserialize;
use sqlx::PgPool;
use std::pin::pin;
use std::sync::atomic::Ordering;
use tokio::sync::oneshot::error::TryRecvError;