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::database;
use crate::database::PgPool;
use crate::database::models::project_item::ProjectQueryResult;
use crate::database::models::version_item::VersionQueryResult;
use crate::database::models::{DBCollection, DBOrganization, DBTeamMember};
@@ -8,7 +9,6 @@ use crate::models::users::User;
use crate::routes::ApiError;
use futures::TryStreamExt;
use itertools::Itertools;
use sqlx::PgPool;
pub trait ValidateAuthorized {
fn validate_authorized(

View File

@@ -3,6 +3,7 @@ use std::fmt::Write;
use crate::auth::get_user_from_headers;
use crate::auth::oauth::uris::{OAuthRedirectUris, ValidatedRedirectUri};
use crate::auth::validate::extract_authorization_header;
use crate::database::PgPool;
use crate::database::models::flow_item::DBFlow;
use crate::database::models::oauth_client_authorization_item::DBOAuthClientAuthorization;
use crate::database::models::oauth_client_item::DBOAuthClient;
@@ -24,7 +25,6 @@ use rand::distributions::Alphanumeric;
use rand::{Rng, SeedableRng};
use rand_chacha::ChaCha20Rng;
use serde::{Deserialize, Serialize};
use sqlx::postgres::PgPool;
use self::errors::{OAuthError, OAuthErrorType};
@@ -288,7 +288,7 @@ pub async fn request_token(
client_id,
user_id,
}
.insert(&mut *transaction)
.insert(&mut transaction)
.await?;
transaction.commit().await?;

View File

@@ -18,7 +18,7 @@ pub async fn get_maybe_user_from_headers<'a, E>(
required_scopes: Scopes,
) -> Result<Option<(Scopes, User)>, AuthenticationError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres> + Copy,
E: crate::database::Executor<'a, Database = sqlx::Postgres> + Copy,
{
if !req.headers().contains_key(AUTHORIZATION) {
return Ok(None);
@@ -52,7 +52,7 @@ pub async fn get_full_user_from_headers<'a, E>(
required_scopes: Scopes,
) -> Result<(Scopes, DBUser), AuthenticationError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres> + Copy,
E: crate::database::Executor<'a, Database = sqlx::Postgres> + Copy,
{
let (scopes, db_user) = get_user_record_from_bearer_token(
req,
@@ -80,7 +80,7 @@ pub async fn get_user_from_headers<'a, E>(
required_scopes: Scopes,
) -> Result<(Scopes, User), AuthenticationError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres> + Copy,
E: crate::database::Executor<'a, Database = sqlx::Postgres> + Copy,
{
let (scopes, db_user) = get_full_user_from_headers(
req,
@@ -102,7 +102,7 @@ pub async fn get_user_record_from_bearer_token<'a, 'b, E>(
session_queue: &AuthQueue,
) -> Result<Option<(Scopes, user_item::DBUser)>, AuthenticationError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres> + Copy,
E: crate::database::Executor<'a, Database = sqlx::Postgres> + Copy,
{
let token = if let Some(token) = token {
token
@@ -227,7 +227,7 @@ pub async fn check_is_moderator_from_headers<'a, 'b, E>(
required_scopes: Scopes,
) -> Result<User, AuthenticationError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres> + Copy,
E: crate::database::Executor<'a, Database = sqlx::Postgres> + Copy,
{
let user = get_user_from_headers(
req,

View File

@@ -1,3 +1,4 @@
use crate::database::PgPool;
use crate::database::redis::RedisPool;
use crate::queue::billing::{index_billing, index_subscriptions};
use crate::queue::email::EmailQueue;
@@ -10,7 +11,6 @@ use crate::search::indexing::index_projects;
use crate::util::anrok;
use crate::{database, search};
use clap::ValueEnum;
use sqlx::Postgres;
use tracing::{error, info, warn};
#[derive(ValueEnum, Debug, Copy, Clone, PartialEq, Eq)]
@@ -31,8 +31,8 @@ impl BackgroundTask {
#[allow(clippy::too_many_arguments)]
pub async fn run(
self,
pool: sqlx::PgPool,
ro_pool: sqlx::PgPool,
pool: PgPool,
ro_pool: PgPool,
redis_pool: RedisPool,
search_config: search::SearchConfig,
clickhouse: clickhouse::Client,
@@ -104,7 +104,7 @@ pub async fn run_email(email_queue: EmailQueue) {
}
}
pub async fn update_bank_balances(pool: sqlx::Pool<Postgres>) {
pub async fn update_bank_balances(pool: PgPool) {
let payouts_queue = PayoutsQueue::new();
match insert_bank_balances_and_webhook(&payouts_queue, &pool).await {
@@ -120,7 +120,7 @@ pub async fn run_migrations() {
}
pub async fn index_search(
ro_pool: sqlx::PgPool,
ro_pool: PgPool,
redis_pool: RedisPool,
search_config: search::SearchConfig,
) {
@@ -132,7 +132,7 @@ pub async fn index_search(
info!("Done indexing local database");
}
pub async fn release_scheduled(pool: sqlx::Pool<Postgres>) {
pub async fn release_scheduled(pool: PgPool) {
info!("Releasing scheduled versions/projects!");
let projects_results = sqlx::query!(
@@ -168,10 +168,7 @@ pub async fn release_scheduled(pool: sqlx::Pool<Postgres>) {
info!("Finished releasing scheduled versions/projects");
}
pub async fn update_versions(
pool: sqlx::Pool<Postgres>,
redis_pool: RedisPool,
) {
pub async fn update_versions(pool: PgPool, redis_pool: RedisPool) {
info!("Indexing game versions list from Mojang");
let result = version_updater::update_versions(&pool, &redis_pool).await;
if let Err(e) = result {
@@ -181,7 +178,7 @@ pub async fn update_versions(
}
pub async fn payouts(
pool: sqlx::Pool<Postgres>,
pool: PgPool,
clickhouse: clickhouse::Client,
redis_pool: RedisPool,
) {
@@ -209,10 +206,7 @@ pub async fn payouts(
info!("Done running payouts");
}
pub async fn sync_payout_statuses(
pool: sqlx::Pool<Postgres>,
mural: muralpay::Client,
) {
pub async fn sync_payout_statuses(pool: PgPool, mural: muralpay::Client) {
// Mural sets a max limit of 100 for search payouts endpoint
const LIMIT: u32 = 100;
@@ -241,11 +235,11 @@ pub async fn sync_payout_statuses(
mod version_updater {
use std::sync::LazyLock;
use crate::database::PgPool;
use crate::database::models::legacy_loader_fields::MinecraftGameVersion;
use crate::database::redis::RedisPool;
use chrono::{DateTime, Utc};
use serde::Deserialize;
use sqlx::Postgres;
use thiserror::Error;
use tracing::warn;
@@ -273,7 +267,7 @@ mod version_updater {
}
pub async fn update_versions(
pool: &sqlx::Pool<Postgres>,
pool: &PgPool,
redis: &RedisPool,
) -> Result<(), VersionIndexingError> {
let input = reqwest::get(

View File

@@ -5,6 +5,6 @@ pub use models::DBImage;
pub use models::DBProject;
pub use models::DBVersion;
pub use postgres_database::{
MIGRATOR, ReadOnlyPgPool, check_for_migrations, connect_all,
register_and_set_metrics,
Acquire, Executor, MIGRATOR, PgPool, PgTransaction, ReadOnlyPgPool,
check_for_migrations, connect_all, register_and_set_metrics,
};

View File

@@ -15,7 +15,7 @@ pub struct DBAffiliateCode {
impl DBAffiliateCode {
pub async fn get_by_id(
id: DBAffiliateCodeId,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Option<DBAffiliateCode>, DatabaseError> {
let record = sqlx::query!(
"SELECT id, created_at, created_by, affiliate, source_name
@@ -36,7 +36,7 @@ impl DBAffiliateCode {
pub async fn get_by_affiliate(
affiliate: DBUserId,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Vec<DBAffiliateCode>, DatabaseError> {
let records = sqlx::query!(
"SELECT id, created_at, created_by, affiliate, source_name
@@ -62,7 +62,7 @@ impl DBAffiliateCode {
pub async fn insert(
&self,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<(), DatabaseError> {
sqlx::query!(
"INSERT INTO affiliate_codes (id, created_at, created_by, affiliate, source_name)
@@ -80,7 +80,7 @@ impl DBAffiliateCode {
pub async fn remove(
id: DBAffiliateCodeId,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Option<()>, DatabaseError> {
let result = sqlx::query!(
"DELETE FROM affiliate_codes WHERE id = $1",
@@ -99,7 +99,7 @@ impl DBAffiliateCode {
pub async fn update_source_name(
id: DBAffiliateCodeId,
source_name: &str,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<bool, DatabaseError> {
let result = sqlx::query!(
"UPDATE affiliate_codes SET source_name = $1 WHERE id = $2",
@@ -113,7 +113,7 @@ impl DBAffiliateCode {
}
pub async fn get_all(
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Vec<DBAffiliateCode>, DatabaseError> {
let records = sqlx::query!(
"SELECT id, created_at, created_by, affiliate, source_name

View File

@@ -44,7 +44,7 @@ impl Category {
exec: E,
) -> Result<HashMap<ProjectTypeId, CategoryId>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
let result = sqlx::query!(
"
@@ -70,7 +70,7 @@ impl Category {
exec: E,
) -> Result<Option<CategoryId>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
let result = sqlx::query!(
"
@@ -91,7 +91,7 @@ impl Category {
redis: &RedisPool,
) -> Result<Vec<Category>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
{
let mut redis = redis.connect().await?;
@@ -140,7 +140,7 @@ impl LinkPlatform {
exec: E,
) -> Result<Option<LinkPlatformId>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
let result = sqlx::query!(
"
@@ -160,7 +160,7 @@ impl LinkPlatform {
redis: &RedisPool,
) -> Result<Vec<LinkPlatform>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
{
let mut redis = redis.connect().await?;
@@ -209,7 +209,7 @@ impl ReportType {
exec: E,
) -> Result<Option<ReportTypeId>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
let result = sqlx::query!(
"
@@ -229,7 +229,7 @@ impl ReportType {
redis: &RedisPool,
) -> Result<Vec<String>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
{
let mut redis = redis.connect().await?;
@@ -274,7 +274,7 @@ impl ProjectType {
exec: E,
) -> Result<Option<ProjectTypeId>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
let result = sqlx::query!(
"
@@ -294,7 +294,7 @@ impl ProjectType {
redis: &RedisPool,
) -> Result<Vec<String>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
{
let mut redis = redis.connect().await?;

View File

@@ -1,3 +1,4 @@
use crate::database::PgTransaction;
use crate::database::models::{
DBChargeId, DBProductPriceId, DBUserId, DBUserSubscriptionId, DatabaseError,
};
@@ -123,7 +124,7 @@ macro_rules! select_charges_with_predicate {
impl DBCharge {
pub async fn upsert(
&self,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<DBChargeId, DatabaseError> {
sqlx::query!(
r#"
@@ -173,7 +174,7 @@ impl DBCharge {
self.tax_transaction_version,
self.tax_platform_accounting_time,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(self.id)
@@ -181,7 +182,7 @@ impl DBCharge {
pub async fn get(
id: DBChargeId,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Option<DBCharge>, DatabaseError> {
let id = id.0;
let res = select_charges_with_predicate!("WHERE id = $1", id)
@@ -193,7 +194,7 @@ impl DBCharge {
pub async fn get_from_user(
user_id: DBUserId,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Vec<DBCharge>, DatabaseError> {
let user_id = user_id.0;
let res = select_charges_with_predicate!(
@@ -211,7 +212,7 @@ impl DBCharge {
pub async fn get_children(
charge_id: DBChargeId,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Vec<DBCharge>, DatabaseError> {
let charge_id = charge_id.0;
let res = select_charges_with_predicate!(
@@ -229,7 +230,7 @@ impl DBCharge {
pub async fn get_open_subscription(
user_subscription_id: DBUserSubscriptionId,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Option<DBCharge>, DatabaseError> {
let user_subscription_id = user_subscription_id.0;
let res = select_charges_with_predicate!(
@@ -246,7 +247,7 @@ impl DBCharge {
}
pub async fn get_chargeable(
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Vec<DBCharge>, DatabaseError> {
let charge_type = ChargeType::Subscription.as_str();
let res = select_charges_with_predicate!(
@@ -270,7 +271,7 @@ impl DBCharge {
}
pub async fn get_unprovision(
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Vec<DBCharge>, DatabaseError> {
let charge_type = ChargeType::Subscription.as_str();
let res = select_charges_with_predicate!(
@@ -297,7 +298,7 @@ impl DBCharge {
}
pub async fn get_cancellable(
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Vec<DBCharge>, DatabaseError> {
let charge_type = ChargeType::Subscription.as_str();
let res = select_charges_with_predicate!(
@@ -327,7 +328,7 @@ impl DBCharge {
///
/// This also locks the charges.
pub async fn get_updateable_lock(
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
limit: i64,
) -> Result<Vec<DBCharge>, DatabaseError> {
let res = select_charges_with_predicate!(
@@ -358,7 +359,7 @@ impl DBCharge {
///
/// Charges are locked.
pub async fn get_missing_tax_identifier_lock(
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
offset: i64,
limit: i64,
) -> Result<Vec<DBCharge>, DatabaseError> {
@@ -387,7 +388,7 @@ impl DBCharge {
pub async fn remove(
id: DBChargeId,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<(), DatabaseError> {
sqlx::query!(
"
@@ -396,7 +397,7 @@ impl DBCharge {
",
id.0 as i64
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(())

View File

@@ -1,7 +1,7 @@
use super::ids::*;
use crate::database::models;
use crate::database::models::DatabaseError;
use crate::database::redis::RedisPool;
use crate::database::{PgTransaction, models};
use crate::models::collections::CollectionStatus;
use chrono::{DateTime, Utc};
use dashmap::DashMap;
@@ -23,7 +23,7 @@ pub struct CollectionBuilder {
impl CollectionBuilder {
pub async fn insert(
self,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<DBCollectionId, DatabaseError> {
let collection_struct = DBCollection {
id: self.collection_id,
@@ -61,7 +61,7 @@ pub struct DBCollection {
impl DBCollection {
pub async fn insert(
&self,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<(), DatabaseError> {
sqlx::query!(
"
@@ -83,7 +83,7 @@ impl DBCollection {
self.raw_icon_url.as_ref(),
self.status.to_string(),
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
let (collection_ids, project_ids): (Vec<_>, Vec<_>) =
@@ -97,7 +97,7 @@ impl DBCollection {
&collection_ids[..],
&project_ids[..],
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(())
@@ -105,10 +105,10 @@ impl DBCollection {
pub async fn remove(
id: DBCollectionId,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
redis: &RedisPool,
) -> Result<Option<()>, DatabaseError> {
let collection = Self::get(id, &mut **transaction, redis).await?;
let collection = Self::get(id, &mut *transaction, redis).await?;
if let Some(collection) = collection {
sqlx::query!(
@@ -118,7 +118,7 @@ impl DBCollection {
",
id as DBCollectionId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -128,7 +128,7 @@ impl DBCollection {
",
id as DBCollectionId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
models::DBCollection::clear_cache(collection.id, redis).await?;
@@ -145,7 +145,7 @@ impl DBCollection {
redis: &RedisPool,
) -> Result<Option<DBCollection>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
DBCollection::get_many(&[id], executor, redis)
.await
@@ -158,7 +158,7 @@ impl DBCollection {
redis: &RedisPool,
) -> Result<Vec<DBCollection>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
let val = redis
.get_cached_keys(

View File

@@ -7,9 +7,12 @@ use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use sqlx::types::Json;
use crate::database::models::{
DBFileId, DBProjectId, DatabaseError, DelphiReportId,
DelphiReportIssueDetailsId, DelphiReportIssueId,
use crate::database::{
PgTransaction,
models::{
DBFileId, DBProjectId, DatabaseError, DelphiReportId,
DelphiReportIssueDetailsId, DelphiReportIssueId,
},
};
/// A Delphi malware analysis report for a project version file.
@@ -32,7 +35,7 @@ pub struct DBDelphiReport {
impl DBDelphiReport {
pub async fn upsert(
&self,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<DelphiReportId, DatabaseError> {
Ok(DelphiReportId(sqlx::query_scalar!(
"
@@ -47,7 +50,7 @@ impl DBDelphiReport {
self.artifact_url,
self.severity as DelphiSeverity,
)
.fetch_one(&mut **transaction)
.fetch_one(&mut *transaction)
.await?))
}
}
@@ -181,7 +184,7 @@ pub struct DelphiReportIssueResult {
impl DBDelphiReportIssue {
pub async fn insert(
&self,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<DelphiReportIssueId, DatabaseError> {
Ok(DelphiReportIssueId(
sqlx::query_scalar!(
@@ -193,7 +196,7 @@ impl DBDelphiReportIssue {
self.report_id as DelphiReportId,
self.issue_type,
)
.fetch_one(&mut **transaction)
.fetch_one(&mut *transaction)
.await?,
))
}
@@ -234,7 +237,7 @@ pub struct ReportIssueDetail {
impl ReportIssueDetail {
pub async fn insert(
&self,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<DelphiReportIssueDetailsId, DatabaseError> {
Ok(DelphiReportIssueDetailsId(sqlx::query_scalar!(
"
@@ -249,19 +252,19 @@ impl ReportIssueDetail {
sqlx::types::Json(&self.data) as Json<&HashMap<String, serde_json::Value>>,
self.severity as DelphiSeverity,
)
.fetch_one(&mut **transaction)
.fetch_one(&mut *transaction)
.await?))
}
pub async fn remove_all_by_issue_id(
issue_id: DelphiReportIssueId,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<u64, DatabaseError> {
Ok(sqlx::query!(
"DELETE FROM delphi_report_issue_details WHERE issue_id = $1",
issue_id as DelphiReportIssueId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?
.rows_affected())
}

View File

@@ -1,4 +1,4 @@
use crate::database::models::DBUserId;
use crate::database::{PgTransaction, models::DBUserId};
use chrono::{DateTime, Utc};
pub struct DBFriend {
@@ -11,7 +11,7 @@ pub struct DBFriend {
impl DBFriend {
pub async fn insert(
&self,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<(), sqlx::Error> {
sqlx::query!(
"
@@ -23,7 +23,7 @@ impl DBFriend {
self.created,
self.accepted,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(())
@@ -35,7 +35,7 @@ impl DBFriend {
exec: E,
) -> Result<Option<DBFriend>, sqlx::Error>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
let friend = sqlx::query!(
"
@@ -62,7 +62,7 @@ impl DBFriend {
user_id: DBUserId,
friend_id: DBUserId,
accepted: bool,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<(), sqlx::Error> {
sqlx::query!(
"
@@ -74,7 +74,7 @@ impl DBFriend {
friend_id.0,
accepted,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(())
@@ -86,7 +86,7 @@ impl DBFriend {
exec: E,
) -> Result<Vec<DBFriend>, sqlx::Error>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
let friends = sqlx::query!(
"
@@ -114,7 +114,7 @@ impl DBFriend {
pub async fn remove(
user_id: DBUserId,
friend_id: DBUserId,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<(), sqlx::Error> {
sqlx::query!(
"
@@ -124,7 +124,7 @@ impl DBFriend {
user_id.0 as i64,
friend_id.0 as i64,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(())

View File

@@ -1,4 +1,5 @@
use super::DatabaseError;
use crate::database::PgTransaction;
use crate::models::ids::{
AffiliateCodeId, ChargeId, CollectionId, FileId, ImageId, NotificationId,
OAuthAccessTokenId, OAuthClientAuthorizationId, OAuthClientId,
@@ -21,7 +22,7 @@ const ID_RETRY_COUNT: usize = 20;
macro_rules! generate_ids {
($function_name:ident, $return_type:ident, $select_stmnt:expr) => {
pub async fn $function_name(
con: &mut sqlx::Transaction<'_, sqlx::Postgres>,
con: &mut PgTransaction<'_>,
) -> Result<$return_type, DatabaseError> {
let mut rng = ChaCha20Rng::from_entropy();
let length = 8;
@@ -32,7 +33,7 @@ macro_rules! generate_ids {
// Check if ID is unique
loop {
let results = sqlx::query!($select_stmnt, id as i64)
.fetch_one(&mut **con)
.fetch_one(&mut *con)
.await?;
if results.exists.unwrap_or(true)
@@ -58,7 +59,7 @@ macro_rules! generate_bulk_ids {
($function_name:ident, $return_type:ident, $select_stmnt:expr) => {
pub async fn $function_name(
count: usize,
con: &mut sqlx::Transaction<'_, sqlx::Postgres>,
con: &mut PgTransaction<'_>,
) -> Result<Vec<$return_type>, DatabaseError> {
let mut retry_count = 0;
@@ -73,7 +74,7 @@ macro_rules! generate_bulk_ids {
(0..count).map(|x| base + x as i64).collect::<Vec<_>>();
let results = sqlx::query!($select_stmnt, &ids)
.fetch_one(&mut **con)
.fetch_one(&mut *con)
.await?;
if !results.exists.unwrap_or(true) {

View File

@@ -1,4 +1,5 @@
use super::ids::*;
use crate::database::PgTransaction;
use crate::database::redis::RedisPool;
use crate::{database::models::DatabaseError, models::images::ImageContext};
use chrono::{DateTime, Utc};
@@ -28,7 +29,7 @@ pub struct DBImage {
impl DBImage {
pub async fn insert(
&self,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<(), DatabaseError> {
sqlx::query!(
"
@@ -51,7 +52,7 @@ impl DBImage {
self.thread_message_id.map(|x| x.0),
self.report_id.map(|x| x.0),
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(())
@@ -59,10 +60,10 @@ impl DBImage {
pub async fn remove(
id: DBImageId,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
redis: &RedisPool,
) -> Result<Option<()>, DatabaseError> {
let image = Self::get(id, &mut **transaction, redis).await?;
let image = Self::get(id, &mut *transaction, redis).await?;
if let Some(image) = image {
sqlx::query!(
@@ -72,7 +73,7 @@ impl DBImage {
",
id as DBImageId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
DBImage::clear_cache(image.id, redis).await?;
@@ -85,7 +86,7 @@ impl DBImage {
pub async fn get_many_contexted(
context: ImageContext,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<Vec<DBImage>, sqlx::Error> {
// Set all of project_id, version_id, thread_message_id, report_id to None
// Then set the one that is relevant to Some
@@ -137,7 +138,7 @@ impl DBImage {
report_id.map(|x| x.0),
)
.fetch(&mut **transaction)
.fetch(&mut *transaction)
.map_ok(|row| {
let id = DBImageId(row.id);
@@ -165,7 +166,7 @@ impl DBImage {
redis: &RedisPool,
) -> Result<Option<DBImage>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
DBImage::get_many(&[id], executor, redis)
.await
@@ -178,7 +179,7 @@ impl DBImage {
redis: &RedisPool,
) -> Result<Vec<DBImage>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
use futures::TryStreamExt;

View File

@@ -43,11 +43,11 @@ impl MinecraftGameVersion {
redis: &RedisPool,
) -> Result<Vec<MinecraftGameVersion>, DatabaseError>
where
E: sqlx::Acquire<'a, Database = sqlx::Postgres>,
E: crate::database::Acquire<'a, Database = sqlx::Postgres>,
{
let mut exec = exec.acquire().await?;
let game_version_enum =
LoaderFieldEnum::get(Self::FIELD_NAME, &mut *exec, redis)
LoaderFieldEnum::get(Self::FIELD_NAME, &mut exec, redis)
.await?
.ok_or_else(|| {
DatabaseError::SchemaError(
@@ -55,7 +55,7 @@ impl MinecraftGameVersion {
)
})?;
let game_version_enum_values =
LoaderFieldEnumValue::list(game_version_enum.id, &mut *exec, redis)
LoaderFieldEnumValue::list(game_version_enum.id, &mut exec, redis)
.await?;
let game_versions = game_version_enum_values
@@ -180,7 +180,7 @@ impl<'a> MinecraftGameVersionBuilder<'a> {
redis: &RedisPool,
) -> Result<LoaderFieldEnumValueId, DatabaseError>
where
E: sqlx::Executor<'b, Database = sqlx::Postgres> + Copy,
E: crate::database::Executor<'b, Database = sqlx::Postgres> + Copy,
{
let game_versions_enum =
LoaderFieldEnum::get("game_versions", exec, redis)
@@ -205,7 +205,7 @@ impl<'a> MinecraftGameVersionBuilder<'a> {
ON CONFLICT (enum_id, value) DO UPDATE
SET metadata = jsonb_set(
COALESCE(loader_field_enum_values.metadata, $4),
'{type}',
'{type}',
COALESCE($4->'type', loader_field_enum_values.metadata->'type')
),
created = COALESCE($3, loader_field_enum_values.created)

View File

@@ -3,6 +3,7 @@ use std::hash::Hasher;
use super::DatabaseError;
use super::ids::*;
use crate::database::PgTransaction;
use crate::database::redis::RedisPool;
use chrono::DateTime;
use chrono::Utc;
@@ -35,7 +36,7 @@ impl Game {
redis: &RedisPool,
) -> Result<Option<Game>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
Ok(Self::list(exec, redis)
.await?
@@ -48,7 +49,7 @@ impl Game {
redis: &RedisPool,
) -> Result<Vec<Game>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
{
let mut redis = redis.connect().await?;
@@ -108,7 +109,7 @@ impl Loader {
redis: &RedisPool,
) -> Result<Option<LoaderId>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
{
let mut redis = redis.connect().await?;
@@ -145,7 +146,7 @@ impl Loader {
redis: &RedisPool,
) -> Result<Vec<Loader>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
{
let mut redis = redis.connect().await?;
@@ -379,7 +380,7 @@ impl LoaderField {
redis: &RedisPool,
) -> Result<Option<LoaderField>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
let fields = Self::get_fields(loader_ids, exec, redis).await?;
Ok(fields.into_iter().find(|f| f.field == field))
@@ -393,7 +394,7 @@ impl LoaderField {
redis: &RedisPool,
) -> Result<Vec<LoaderField>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
let found_loader_fields =
Self::get_fields_per_loader(loader_ids, exec, redis).await?;
@@ -411,7 +412,7 @@ impl LoaderField {
redis: &RedisPool,
) -> Result<HashMap<LoaderId, Vec<LoaderField>>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
let val = redis.get_cached_keys_raw(
LOADER_FIELDS_NAMESPACE,
@@ -464,7 +465,7 @@ impl LoaderField {
redis: &RedisPool,
) -> Result<Vec<LoaderField>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
{
let mut redis = redis.connect().await?;
@@ -523,7 +524,7 @@ impl LoaderFieldEnum {
redis: &RedisPool,
) -> Result<Option<LoaderFieldEnum>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
{
let mut redis = redis.connect().await?;
@@ -579,7 +580,7 @@ impl LoaderFieldEnumValue {
redis: &RedisPool,
) -> Result<Vec<LoaderFieldEnumValue>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
Ok(Self::list_many(&[loader_field_enum_id], exec, redis)
.await?
@@ -595,7 +596,7 @@ impl LoaderFieldEnumValue {
redis: &RedisPool,
) -> Result<HashMap<LoaderFieldId, Vec<LoaderFieldEnumValue>>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
let get_enum_id = |x: &LoaderField| match x.field_type {
LoaderFieldType::Enum(id) | LoaderFieldType::ArrayEnum(id) => {
@@ -634,7 +635,7 @@ impl LoaderFieldEnumValue {
DatabaseError,
>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
let val = redis.get_cached_keys_raw(
LOADER_FIELD_ENUM_VALUES_NAMESPACE,
@@ -687,7 +688,7 @@ impl LoaderFieldEnumValue {
redis: &RedisPool,
) -> Result<Vec<LoaderFieldEnumValue>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
let result = Self::list(loader_field_enum_id, exec, redis)
.await?
@@ -712,7 +713,7 @@ impl LoaderFieldEnumValue {
impl VersionField {
pub async fn insert_many(
items: Vec<Self>,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<(), DatabaseError> {
let mut query_version_fields = vec![];
for item in items {
@@ -792,7 +793,7 @@ impl VersionField {
&string_values[..] as &[Option<String>],
&enum_values[..] as &[i32]
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(())

View File

@@ -1,6 +1,6 @@
use crate::database::PgPool;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use sqlx::PgPool;
use crate::database::models::{DBProjectId, DBUserId};

View File

@@ -1,4 +1,5 @@
use super::ids::*;
use crate::database::PgTransaction;
use crate::database::{models::DatabaseError, redis::RedisPool};
use crate::models::notifications::{
NotificationBody, NotificationChannel, NotificationDeliveryStatus,
@@ -36,7 +37,7 @@ impl NotificationBuilder {
pub async fn insert(
&self,
user: DBUserId,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
redis: &RedisPool,
) -> Result<(), DatabaseError> {
self.insert_many(vec![user], transaction, redis).await
@@ -45,7 +46,7 @@ impl NotificationBuilder {
pub async fn insert_many_payout_notifications(
users: Vec<DBUserId>,
dates_available: Vec<DateTime<Utc>>,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
redis: &RedisPool,
) -> Result<(), DatabaseError> {
let notification_ids =
@@ -87,7 +88,7 @@ impl NotificationBuilder {
&users_raw_ids[..],
&dates_available[..],
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
let notification_types = notification_ids
@@ -111,7 +112,7 @@ impl NotificationBuilder {
pub async fn insert_many(
&self,
users: Vec<DBUserId>,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
redis: &RedisPool,
) -> Result<(), DatabaseError> {
let notification_ids =
@@ -139,7 +140,7 @@ impl NotificationBuilder {
&users_raw_ids[..],
&bodies[..],
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
let notification_types = notification_ids
@@ -161,7 +162,7 @@ impl NotificationBuilder {
}
pub async fn insert_many_deliveries(
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
redis: &RedisPool,
notification_ids: &[i64],
users_raw_ids: &[i64],
@@ -245,7 +246,7 @@ impl NotificationBuilder {
NotificationDeliveryStatus::SkippedDefault.as_str(),
);
query.execute(&mut **transaction).await?;
query.execute(&mut *transaction).await?;
DBNotification::clear_user_notifications_cache(users, redis).await?;
@@ -259,7 +260,7 @@ impl DBNotification {
executor: E,
) -> Result<Option<Self>, sqlx::error::Error>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres> + Copy,
E: crate::database::Executor<'a, Database = sqlx::Postgres> + Copy,
{
Self::get_many(&[id], executor)
.await
@@ -271,7 +272,7 @@ impl DBNotification {
exec: E,
) -> Result<Vec<DBNotification>, sqlx::Error>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
let notification_ids_parsed: Vec<i64> =
notification_ids.iter().map(|x| x.0).collect();
@@ -324,7 +325,7 @@ impl DBNotification {
exec: E,
) -> Result<Vec<DBNotification>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres> + Copy,
E: crate::database::Executor<'a, Database = sqlx::Postgres> + Copy,
{
let db_notifications = sqlx::query!(
"
@@ -378,7 +379,7 @@ impl DBNotification {
redis: &RedisPool,
) -> Result<Vec<DBNotification>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres> + Copy,
E: crate::database::Executor<'a, Database = sqlx::Postgres> + Copy,
{
{
let mut redis = redis.connect().await?;
@@ -455,7 +456,7 @@ impl DBNotification {
pub async fn read(
id: DBNotificationId,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
redis: &RedisPool,
) -> Result<Option<()>, DatabaseError> {
Self::read_many(&[id], transaction, redis).await
@@ -463,7 +464,7 @@ impl DBNotification {
pub async fn read_many(
notification_ids: &[DBNotificationId],
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
redis: &RedisPool,
) -> Result<Option<()>, DatabaseError> {
let notification_ids_parsed: Vec<i64> =
@@ -478,7 +479,7 @@ impl DBNotification {
",
&notification_ids_parsed
)
.fetch(&mut **transaction)
.fetch(&mut *transaction)
.map_ok(|x| DBUserId(x.user_id))
.try_collect::<Vec<_>>()
.await?;
@@ -494,7 +495,7 @@ impl DBNotification {
pub async fn remove(
id: DBNotificationId,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
redis: &RedisPool,
) -> Result<Option<()>, DatabaseError> {
Self::remove_many(&[id], transaction, redis).await
@@ -502,7 +503,7 @@ impl DBNotification {
pub async fn remove_many(
notification_ids: &[DBNotificationId],
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
redis: &RedisPool,
) -> Result<Option<()>, DatabaseError> {
let notification_ids_parsed: Vec<i64> =
@@ -515,7 +516,7 @@ impl DBNotification {
",
&notification_ids_parsed
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -525,7 +526,7 @@ impl DBNotification {
",
&notification_ids_parsed
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
let affected_users = sqlx::query!(
@@ -536,7 +537,7 @@ impl DBNotification {
",
&notification_ids_parsed
)
.fetch(&mut **transaction)
.fetch(&mut *transaction)
.map_ok(|x| DBUserId(x.user_id))
.try_collect::<Vec<_>>()
.await?;

View File

@@ -60,7 +60,7 @@ impl From<NotificationDeliveryQueryResult> for DBNotificationDelivery {
impl DBNotificationDelivery {
pub async fn get_all_user(
user_id: DBUserId,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Vec<DBNotificationDelivery>, DatabaseError> {
let user_id = user_id.0;
let results = select_notification_deliveries_with_predicate!(
@@ -78,7 +78,7 @@ impl DBNotificationDelivery {
pub async fn lock_channel_processable(
channel: NotificationChannel,
limit: i64,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Vec<DBNotificationDelivery>, DatabaseError> {
// This follows the `idx_notifications_deliveries_composite_queue` index.
Ok(select_notification_deliveries_with_predicate!(
@@ -107,7 +107,7 @@ impl DBNotificationDelivery {
/// Inserts the row into the table and updates its ID.
pub async fn insert(
&mut self,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<(), DatabaseError> {
let id = sqlx::query_scalar!(
"
@@ -136,7 +136,7 @@ impl DBNotificationDelivery {
/// Updates semantically mutable columns of the row.
pub async fn update(
&self,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<(), DatabaseError> {
sqlx::query!(
"

View File

@@ -49,7 +49,7 @@ impl From<NotificationTemplateQueryResult> for NotificationTemplate {
impl NotificationTemplate {
pub async fn list_channel(
channel: NotificationChannel,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
redis: &RedisPool,
) -> Result<Vec<NotificationTemplate>, DatabaseError> {
{

View File

@@ -37,7 +37,7 @@ impl NotificationTypeItem {
redis: &RedisPool,
) -> Result<Vec<NotificationTypeItem>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
{
let mut redis = redis.connect().await?;

View File

@@ -2,7 +2,7 @@ use chrono::{DateTime, Utc};
use itertools::Itertools;
use serde::{Deserialize, Serialize};
use crate::models::pats::Scopes;
use crate::{database::PgTransaction, models::pats::Scopes};
use super::{
DBOAuthClientAuthorizationId, DBOAuthClientId, DBUserId, DatabaseError,
@@ -41,7 +41,7 @@ impl DBOAuthClientAuthorization {
pub async fn get(
client_id: DBOAuthClientId,
user_id: DBUserId,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Option<DBOAuthClientAuthorization>, DatabaseError> {
let value = sqlx::query_as!(
DBAuthClientAuthorizationQueryResult,
@@ -61,7 +61,7 @@ impl DBOAuthClientAuthorization {
pub async fn get_all_for_user(
user_id: DBUserId,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Vec<DBOAuthClientAuthorization>, DatabaseError> {
let results = sqlx::query_as!(
DBAuthClientAuthorizationQueryResult,
@@ -83,7 +83,7 @@ impl DBOAuthClientAuthorization {
client_id: DBOAuthClientId,
user_id: DBUserId,
scopes: Scopes,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<(), DatabaseError> {
sqlx::query!(
"
@@ -101,7 +101,7 @@ impl DBOAuthClientAuthorization {
user_id.0,
scopes.bits() as i64,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(())
@@ -110,7 +110,7 @@ impl DBOAuthClientAuthorization {
pub async fn remove(
client_id: DBOAuthClientId,
user_id: DBUserId,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<(), DatabaseError> {
sqlx::query!(
"

View File

@@ -4,7 +4,7 @@ use serde::{Deserialize, Serialize};
use sha2::Digest;
use super::{DBOAuthClientId, DBOAuthRedirectUriId, DBUserId, DatabaseError};
use crate::models::pats::Scopes;
use crate::{database::PgTransaction, models::pats::Scopes};
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct DBOAuthRedirectUri {
@@ -80,14 +80,14 @@ macro_rules! select_clients_with_predicate {
impl DBOAuthClient {
pub async fn get(
id: DBOAuthClientId,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Option<DBOAuthClient>, DatabaseError> {
Ok(Self::get_many(&[id], exec).await?.into_iter().next())
}
pub async fn get_many(
ids: &[DBOAuthClientId],
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Vec<DBOAuthClient>, DatabaseError> {
let ids = ids.iter().map(|id| id.0).collect_vec();
let ids_ref: &[i64] = &ids;
@@ -103,7 +103,7 @@ impl DBOAuthClient {
pub async fn get_all_user_clients(
user_id: DBUserId,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Vec<DBOAuthClient>, DatabaseError> {
let user_id_param = user_id.0;
let clients = select_clients_with_predicate!(
@@ -118,7 +118,7 @@ impl DBOAuthClient {
pub async fn remove(
id: DBOAuthClientId,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<(), DatabaseError> {
// Cascades to oauth_client_redirect_uris, oauth_client_authorizations
sqlx::query!(
@@ -136,7 +136,7 @@ impl DBOAuthClient {
pub async fn insert(
&self,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<(), DatabaseError> {
sqlx::query!(
"
@@ -155,10 +155,10 @@ impl DBOAuthClient {
self.secret_hash,
self.created_by.0
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Self::insert_redirect_uris(&self.redirect_uris, &mut **transaction)
Self::insert_redirect_uris(&self.redirect_uris, &mut *transaction)
.await?;
Ok(())
@@ -166,7 +166,7 @@ impl DBOAuthClient {
pub async fn update_editable_fields(
&self,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<(), DatabaseError> {
sqlx::query!(
"
@@ -190,7 +190,7 @@ impl DBOAuthClient {
pub async fn remove_redirect_uris(
ids: impl IntoIterator<Item = DBOAuthRedirectUriId>,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<(), DatabaseError> {
let ids = ids.into_iter().map(|id| id.0).collect_vec();
sqlx::query!(
@@ -209,7 +209,7 @@ impl DBOAuthClient {
pub async fn insert_redirect_uris(
uris: &[DBOAuthRedirectUri],
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<(), DatabaseError> {
let (ids, client_ids, uris): (Vec<_>, Vec<_>, Vec<_>) = uris
.iter()

View File

@@ -25,7 +25,7 @@ pub struct DBOAuthAccessToken {
impl DBOAuthAccessToken {
pub async fn get(
token_hash: String,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Option<DBOAuthAccessToken>, DatabaseError> {
let value = sqlx::query!(
"
@@ -65,7 +65,7 @@ impl DBOAuthAccessToken {
/// Inserts and returns the time until the token expires
pub async fn insert(
&self,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<chrono::Duration, DatabaseError> {
let r = sqlx::query!(
"

View File

@@ -1,3 +1,4 @@
use crate::database::PgTransaction;
use crate::database::redis::RedisPool;
use ariadne::ids::base62_impl::parse_base62;
use dashmap::DashMap;
@@ -38,7 +39,7 @@ pub struct DBOrganization {
impl DBOrganization {
pub async fn insert(
self,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<(), super::DatabaseError> {
sqlx::query!(
"
@@ -54,7 +55,7 @@ impl DBOrganization {
self.raw_icon_url,
self.color.map(|x| x as i32),
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(())
@@ -66,7 +67,7 @@ impl DBOrganization {
redis: &RedisPool,
) -> Result<Option<Self>, super::DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
Self::get_many(&[string], exec, redis)
.await
@@ -79,7 +80,7 @@ impl DBOrganization {
redis: &RedisPool,
) -> Result<Option<Self>, super::DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
Self::get_many_ids(&[id], exec, redis)
.await
@@ -92,7 +93,7 @@ impl DBOrganization {
redis: &RedisPool,
) -> Result<Vec<Self>, super::DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
let ids = organization_ids
.iter()
@@ -111,7 +112,7 @@ impl DBOrganization {
redis: &RedisPool,
) -> Result<Vec<Self>, super::DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
let val = redis
.get_cached_keys_with_slug(
@@ -172,7 +173,7 @@ impl DBOrganization {
exec: E,
) -> Result<Option<Self>, super::DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
let result = sqlx::query!(
"
@@ -205,10 +206,10 @@ impl DBOrganization {
pub async fn remove(
id: DBOrganizationId,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
redis: &RedisPool,
) -> Result<Option<()>, super::DatabaseError> {
let organization = Self::get_id(id, &mut **transaction, redis).await?;
let organization = Self::get_id(id, &mut *transaction, redis).await?;
if let Some(organization) = organization {
sqlx::query!(
@@ -218,7 +219,7 @@ impl DBOrganization {
",
id as DBOrganizationId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
DBTeamMember::clear_cache(organization.team_id, redis).await?;
@@ -230,7 +231,7 @@ impl DBOrganization {
",
organization.team_id as DBTeamId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -240,7 +241,7 @@ impl DBOrganization {
",
organization.team_id as DBTeamId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(Some(()))

View File

@@ -1,4 +1,5 @@
use super::ids::*;
use crate::database::PgTransaction;
use crate::database::models::DatabaseError;
use crate::database::redis::RedisPool;
use crate::models::pats::Scopes;
@@ -29,7 +30,7 @@ pub struct DBPersonalAccessToken {
impl DBPersonalAccessToken {
pub async fn insert(
&self,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<(), DatabaseError> {
sqlx::query!(
"
@@ -49,7 +50,7 @@ impl DBPersonalAccessToken {
self.user_id as DBUserId,
self.expires
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(())
@@ -65,7 +66,7 @@ impl DBPersonalAccessToken {
redis: &RedisPool,
) -> Result<Option<DBPersonalAccessToken>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
Self::get_many(&[id], exec, redis)
.await
@@ -78,7 +79,7 @@ impl DBPersonalAccessToken {
redis: &RedisPool,
) -> Result<Vec<DBPersonalAccessToken>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
let ids = pat_ids
.iter()
@@ -97,7 +98,7 @@ impl DBPersonalAccessToken {
redis: &RedisPool,
) -> Result<Vec<DBPersonalAccessToken>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
let val = redis
.get_cached_keys_with_slug(
@@ -154,7 +155,7 @@ impl DBPersonalAccessToken {
redis: &RedisPool,
) -> Result<Vec<DBPatId>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
{
let mut redis = redis.connect().await?;
@@ -228,7 +229,7 @@ impl DBPersonalAccessToken {
pub async fn remove(
id: DBPatId,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<Option<()>, sqlx::error::Error> {
sqlx::query!(
"
@@ -236,7 +237,7 @@ impl DBPersonalAccessToken {
",
id as DBPatId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(Some(()))

View File

@@ -1,4 +1,7 @@
use crate::models::payouts::{PayoutMethodType, PayoutStatus};
use crate::{
database::PgTransaction,
models::payouts::{PayoutMethodType, PayoutStatus},
};
use chrono::{DateTime, Utc};
use rust_decimal::Decimal;
use serde::{Deserialize, Serialize};
@@ -26,7 +29,7 @@ pub struct DBPayout {
impl DBPayout {
pub async fn insert(
&self,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<(), DatabaseError> {
sqlx::query!(
"
@@ -47,7 +50,7 @@ impl DBPayout {
self.method_address,
self.platform_id,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(())
@@ -58,7 +61,7 @@ impl DBPayout {
executor: E,
) -> Result<Option<DBPayout>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
DBPayout::get_many(&[id], executor)
.await
@@ -70,7 +73,7 @@ impl DBPayout {
exec: E,
) -> Result<Vec<DBPayout>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
use futures::TryStreamExt;
@@ -103,7 +106,7 @@ impl DBPayout {
pub async fn get_all_for_user(
user_id: DBUserId,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Vec<DBPayoutId>, DatabaseError> {
let results = sqlx::query!(
"

View File

@@ -55,14 +55,14 @@ impl TryFrom<ProductQueryResult> for DBProduct {
impl DBProduct {
pub async fn get(
id: DBProductId,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Option<DBProduct>, DatabaseError> {
Ok(Self::get_many(&[id], exec).await?.into_iter().next())
}
pub async fn get_price(
id: DBProductPriceId,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Option<DBProduct>, DatabaseError> {
let maybe_row = select_products_with_predicate!(
"INNER JOIN products_prices pp ON pp.id = $1
@@ -99,7 +99,7 @@ impl DBProduct {
pub async fn get_many(
ids: &[DBProductId],
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Vec<DBProduct>, DatabaseError> {
let ids = ids.iter().map(|id| id.0).collect_vec();
let ids_ref: &[i64] = &ids;
@@ -117,7 +117,7 @@ impl DBProduct {
}
pub async fn get_all(
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Vec<DBProduct>, DatabaseError> {
let one = 1;
let results = select_products_with_predicate!("WHERE 1 = $1", one)
@@ -148,7 +148,7 @@ impl QueryProductWithPrices {
redis: &RedisPool,
) -> Result<Vec<Self>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres> + Copy,
E: crate::database::Executor<'a, Database = sqlx::Postgres> + Copy,
{
{
let mut redis = redis.connect().await?;
@@ -292,14 +292,14 @@ impl TryFrom<ProductPriceQueryResult> for DBProductPrice {
impl DBProductPrice {
pub async fn get(
id: DBProductPriceId,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Option<DBProductPrice>, DatabaseError> {
Ok(Self::get_many(&[id], exec).await?.into_iter().next())
}
pub async fn get_many(
ids: &[DBProductPriceId],
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Vec<DBProductPrice>, DatabaseError> {
let ids = ids.iter().map(|id| id.0).collect_vec();
let ids_ref: &[i64] = &ids;
@@ -318,7 +318,7 @@ impl DBProductPrice {
pub async fn get_all_product_prices(
product_id: DBProductId,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Vec<DBProductPrice>, DatabaseError> {
let res = Self::get_all_products_prices(&[product_id], exec).await?;
@@ -327,7 +327,7 @@ impl DBProductPrice {
pub async fn get_all_public_product_prices(
product_id: DBProductId,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Vec<DBProductPrice>, DatabaseError> {
let res =
Self::get_all_public_products_prices(&[product_id], exec).await?;
@@ -339,7 +339,7 @@ impl DBProductPrice {
/// it won't be included in the resulting map.
pub async fn get_all_public_products_prices(
product_ids: &[DBProductId],
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<DashMap<DBProductId, Vec<DBProductPrice>>, DatabaseError> {
Self::get_all_products_prices_with_visibility(
product_ids,
@@ -351,7 +351,7 @@ impl DBProductPrice {
pub async fn get_all_products_prices(
product_ids: &[DBProductId],
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<DashMap<DBProductId, Vec<DBProductPrice>>, DatabaseError> {
Self::get_all_products_prices_with_visibility(product_ids, None, exec)
.await
@@ -360,7 +360,7 @@ impl DBProductPrice {
async fn get_all_products_prices_with_visibility(
product_ids: &[DBProductId],
public_filter: Option<bool>,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<DashMap<DBProductId, Vec<DBProductPrice>>, DatabaseError> {
let ids = product_ids.iter().map(|id| id.0).collect_vec();
let ids_ref: &[i64] = &ids;

View File

@@ -11,7 +11,7 @@ pub struct DBProductsTaxIdentifier {
impl DBProductsTaxIdentifier {
pub async fn get_product(
product_id: DBProductId,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Option<Self>, ApiError> {
let maybe_row = sqlx::query!(
"SELECT * FROM products_tax_identifiers WHERE product_id = $1",
@@ -29,7 +29,7 @@ impl DBProductsTaxIdentifier {
pub async fn get_price(
price_id: DBProductPriceId,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Option<Self>, ApiError> {
let maybe_row = sqlx::query!(
"
@@ -58,7 +58,7 @@ pub struct ProductInfo {
pub async fn product_info_by_product_price_id(
product_price_id: DBProductPriceId,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Option<ProductInfo>, ApiError> {
let maybe_row = sqlx::query!(
r#"

View File

@@ -3,9 +3,9 @@ use super::loader_fields::{
VersionField,
};
use super::{DBUser, ids::*};
use crate::database::models;
use crate::database::models::DatabaseError;
use crate::database::redis::RedisPool;
use crate::database::{PgTransaction, models};
use crate::models::projects::{
MonetizationStatus, ProjectStatus, SideTypesMigrationReviewStatus,
};
@@ -34,7 +34,7 @@ impl LinkUrl {
pub async fn insert_many_projects(
links: Vec<Self>,
project_id: DBProjectId,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<(), sqlx::error::Error> {
let (project_ids, platform_ids, urls): (Vec<_>, Vec<_>, Vec<_>) = links
.into_iter()
@@ -51,7 +51,7 @@ impl LinkUrl {
&platform_ids[..],
&urls[..],
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(())
@@ -73,7 +73,7 @@ impl DBGalleryItem {
pub async fn insert_many(
items: Vec<Self>,
project_id: DBProjectId,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<(), sqlx::error::Error> {
let (
project_ids,
@@ -112,7 +112,7 @@ impl DBGalleryItem {
&descriptions[..] as &[Option<String>],
&orderings[..]
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(())
@@ -128,7 +128,7 @@ pub struct DBModCategory {
impl DBModCategory {
pub async fn insert_many(
items: Vec<Self>,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<(), DatabaseError> {
let (project_ids, category_ids, is_additionals): (
Vec<_>,
@@ -147,7 +147,7 @@ impl DBModCategory {
&category_ids[..],
&is_additionals[..]
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(())
@@ -181,7 +181,7 @@ pub struct ProjectBuilder {
impl ProjectBuilder {
pub async fn insert(
self,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<DBProjectId, DatabaseError> {
let project_struct = DBProject {
id: self.project_id,
@@ -299,7 +299,7 @@ pub struct DBProject {
impl DBProject {
pub async fn insert(
&self,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<(), DatabaseError> {
sqlx::query!(
"
@@ -337,7 +337,7 @@ impl DBProject {
self.organization_id.map(|x| x.0 as i64),
self.side_types_migration_review_status.as_str()
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(())
@@ -345,10 +345,10 @@ impl DBProject {
pub async fn remove(
id: DBProjectId,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
redis: &RedisPool,
) -> Result<Option<()>, DatabaseError> {
let project = Self::get_id(id, &mut **transaction, redis).await?;
let project = Self::get_id(id, &mut *transaction, redis).await?;
if let Some(project) = project {
DBProject::clear_cache(id, project.inner.slug, Some(true), redis)
@@ -361,7 +361,7 @@ impl DBProject {
",
id as DBProjectId
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -371,7 +371,7 @@ impl DBProject {
",
id as DBProjectId
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -381,7 +381,7 @@ impl DBProject {
",
id as DBProjectId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -392,7 +392,7 @@ impl DBProject {
",
id as DBProjectId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -402,7 +402,7 @@ impl DBProject {
",
id as DBProjectId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -412,7 +412,7 @@ impl DBProject {
",
id as DBProjectId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
for version in project.versions {
@@ -426,7 +426,7 @@ impl DBProject {
",
id as DBProjectId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -437,7 +437,7 @@ impl DBProject {
",
id as DBProjectId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -447,7 +447,7 @@ impl DBProject {
",
id as DBProjectId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
models::DBTeamMember::clear_cache(project.inner.team_id, redis)
@@ -461,7 +461,7 @@ impl DBProject {
",
project.inner.team_id as DBTeamId,
)
.fetch(&mut **transaction)
.fetch(&mut *transaction)
.map_ok(|x| DBUserId(x.user_id))
.try_collect::<Vec<_>>()
.await?;
@@ -475,7 +475,7 @@ impl DBProject {
",
project.inner.team_id as DBTeamId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(Some(()))
@@ -490,7 +490,7 @@ impl DBProject {
redis: &RedisPool,
) -> Result<Option<ProjectQueryResult>, DatabaseError>
where
E: sqlx::Acquire<'a, Database = sqlx::Postgres>,
E: crate::database::Acquire<'a, Database = sqlx::Postgres>,
{
DBProject::get_many(&[string], executor, redis)
.await
@@ -503,7 +503,7 @@ impl DBProject {
redis: &RedisPool,
) -> Result<Option<ProjectQueryResult>, DatabaseError>
where
E: sqlx::Acquire<'a, Database = sqlx::Postgres>,
E: crate::database::Acquire<'a, Database = sqlx::Postgres>,
{
DBProject::get_many(
&[crate::models::ids::ProjectId::from(id)],
@@ -520,7 +520,7 @@ impl DBProject {
redis: &RedisPool,
) -> Result<Vec<ProjectQueryResult>, DatabaseError>
where
E: sqlx::Acquire<'a, Database = sqlx::Postgres>,
E: crate::database::Acquire<'a, Database = sqlx::Postgres>,
{
let ids = project_ids
.iter()
@@ -539,7 +539,7 @@ impl DBProject {
redis: &RedisPool,
) -> Result<Vec<ProjectQueryResult>, DatabaseError>
where
E: sqlx::Acquire<'a, Database = sqlx::Postgres>,
E: crate::database::Acquire<'a, Database = sqlx::Postgres>,
{
let val = redis.get_cached_keys_with_slug(
PROJECTS_NAMESPACE,
@@ -573,7 +573,7 @@ impl DBProject {
.map(|x| x.to_string())
.collect::<Vec<String>>()
)
.fetch(&mut *exec)
.fetch(&mut exec)
.try_fold(
DashMap::new(),
|acc: DashMap<DBProjectId, Vec<(DBVersionId, DateTime<Utc>)>>, m| {
@@ -598,7 +598,7 @@ impl DBProject {
",
&all_version_ids.iter().map(|x| x.0).collect::<Vec<_>>()
)
.fetch(&mut *exec)
.fetch(&mut exec)
.try_fold(
DashMap::new(),
|acc: DashMap<DBProjectId, Vec<QueryVersionField>>, m| {
@@ -632,7 +632,7 @@ impl DBProject {
.map(|x| x.0)
.collect::<Vec<_>>()
)
.fetch(&mut *exec)
.fetch(&mut exec)
.map_ok(|m| QueryLoaderFieldEnumValue {
id: LoaderFieldEnumValueId(m.id),
enum_id: LoaderFieldEnumId(m.enum_id),
@@ -653,7 +653,7 @@ impl DBProject {
",
&project_ids_parsed,
&slugs
).fetch(&mut *exec)
).fetch(&mut exec)
.try_fold(DashMap::new(), |acc : DashMap<DBProjectId, Vec<DBGalleryItem>>, m| {
acc.entry(DBProjectId(m.mod_id))
.or_default()
@@ -680,7 +680,7 @@ impl DBProject {
",
&project_ids_parsed,
&slugs
).fetch(&mut *exec)
).fetch(&mut exec)
.try_fold(DashMap::new(), |acc : DashMap<DBProjectId, Vec<LinkUrl>>, m| {
acc.entry(DBProjectId(m.mod_id))
.or_default()
@@ -722,7 +722,7 @@ impl DBProject {
GROUP BY mod_id
",
&all_version_ids.iter().map(|x| x.0).collect::<Vec<_>>()
).fetch(&mut *exec)
).fetch(&mut exec)
.map_ok(|m| {
let project_id = DBProjectId(m.mod_id);
@@ -753,7 +753,7 @@ impl DBProject {
",
&loader_field_ids.iter().map(|x| x.0).collect::<Vec<_>>()
)
.fetch(&mut *exec)
.fetch(&mut exec)
.map_ok(|m| QueryLoaderField {
id: LoaderFieldId(m.id),
field: m.field,
@@ -788,7 +788,7 @@ impl DBProject {
&project_ids_parsed,
&slugs,
)
.fetch(&mut *exec)
.fetch(&mut exec)
.try_fold(DashMap::new(), |acc, m| {
let id = m.id;
let project_id = DBProjectId(id);
@@ -885,7 +885,7 @@ impl DBProject {
DatabaseError,
>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
type Dependencies = Vec<(
Option<DBVersionId>,

View File

@@ -1,3 +1,5 @@
use crate::database::PgTransaction;
use super::ids::*;
use chrono::{DateTime, Utc};
@@ -29,7 +31,7 @@ pub struct ReportQueryResult {
impl DBReport {
pub async fn insert(
&self,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<(), sqlx::error::Error> {
sqlx::query!(
"
@@ -50,7 +52,7 @@ impl DBReport {
self.body,
self.reporter as DBUserId
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(())
@@ -61,7 +63,7 @@ impl DBReport {
exec: E,
) -> Result<Option<ReportQueryResult>, sqlx::Error>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
Self::get_many(&[id], exec)
.await
@@ -73,7 +75,7 @@ impl DBReport {
exec: E,
) -> Result<Vec<ReportQueryResult>, sqlx::Error>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
use futures::stream::TryStreamExt;
@@ -111,7 +113,7 @@ impl DBReport {
pub async fn remove_full(
id: DBReportId,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<Option<()>, sqlx::error::Error> {
let result = sqlx::query!(
"
@@ -119,7 +121,7 @@ impl DBReport {
",
id as DBReportId
)
.fetch_one(&mut **transaction)
.fetch_one(&mut *transaction)
.await?;
if !result.exists.unwrap_or(false) {
@@ -133,7 +135,7 @@ impl DBReport {
",
id as DBReportId
)
.fetch_optional(&mut **transaction)
.fetch_optional(&mut *transaction)
.await?;
if let Some(thread_id) = thread_id {
@@ -150,7 +152,7 @@ impl DBReport {
",
id as DBReportId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(Some(()))

View File

@@ -1,4 +1,5 @@
use super::ids::*;
use crate::database::PgTransaction;
use crate::database::models::DatabaseError;
use crate::database::redis::RedisPool;
use ariadne::ids::base62_impl::parse_base62;
@@ -29,7 +30,7 @@ pub struct SessionBuilder {
impl SessionBuilder {
pub async fn insert(
&self,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<DBSessionId, DatabaseError> {
let id = generate_session_id(transaction).await?;
@@ -54,7 +55,7 @@ impl SessionBuilder {
self.ip,
self.user_agent,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(id)
@@ -92,7 +93,7 @@ impl DBSession {
redis: &RedisPool,
) -> Result<Option<DBSession>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
Self::get_many(&[id], exec, redis)
.await
@@ -105,7 +106,7 @@ impl DBSession {
redis: &RedisPool,
) -> Result<Option<DBSession>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
DBSession::get_many(
&[crate::models::ids::SessionId::from(id)],
@@ -122,7 +123,7 @@ impl DBSession {
redis: &RedisPool,
) -> Result<Vec<DBSession>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
let ids = session_ids
.iter()
@@ -141,7 +142,7 @@ impl DBSession {
redis: &RedisPool,
) -> Result<Vec<DBSession>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
use futures::TryStreamExt;
@@ -207,7 +208,7 @@ impl DBSession {
redis: &RedisPool,
) -> Result<Vec<DBSessionId>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
{
let mut redis = redis.connect().await?;
@@ -286,7 +287,7 @@ impl DBSession {
pub async fn remove(
id: DBSessionId,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<Option<()>, sqlx::error::Error> {
sqlx::query!(
"
@@ -294,7 +295,7 @@ impl DBSession {
",
id as DBSessionId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(Some(()))

View File

@@ -1,3 +1,4 @@
use crate::database::PgTransaction;
use crate::database::models::{
DBSharedInstanceId, DBSharedInstanceVersionId, DBUserId,
};
@@ -42,7 +43,7 @@ impl From<SharedInstanceQueryResult> for DBSharedInstance {
impl DBSharedInstance {
pub async fn insert(
&self,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<(), sqlx::Error> {
sqlx::query!(
"
@@ -54,7 +55,7 @@ impl DBSharedInstance {
self.owner_id as DBUserId,
self.current_version_id.map(|x| x.0),
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(())
@@ -62,7 +63,7 @@ impl DBSharedInstance {
pub async fn get(
id: DBSharedInstanceId,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Option<Self>, sqlx::Error> {
let result = sqlx::query_as!(
SharedInstanceQueryResult,
@@ -81,7 +82,7 @@ impl DBSharedInstance {
pub async fn list_for_user(
user: DBUserId,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Vec<Self>, sqlx::Error> {
let results = sqlx::query_as!(
SharedInstanceQueryResult,
@@ -129,7 +130,7 @@ pub struct DBSharedInstanceUser {
impl DBSharedInstanceUser {
pub async fn insert(
&self,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<(), sqlx::Error> {
sqlx::query!(
"
@@ -140,7 +141,7 @@ impl DBSharedInstanceUser {
self.shared_instance_id as DBSharedInstanceId,
self.permissions.bits() as i64,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(())
@@ -149,7 +150,7 @@ impl DBSharedInstanceUser {
pub async fn get_user_permissions(
instance_id: DBSharedInstanceId,
user_id: DBUserId,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Option<SharedInstanceUserPermissions>, super::DatabaseError>
{
let permissions = sqlx::query!(
@@ -173,7 +174,7 @@ impl DBSharedInstanceUser {
pub async fn get_from_instance(
instance_id: DBSharedInstanceId,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
redis: &RedisPool,
) -> Result<Vec<DBSharedInstanceUser>, super::DatabaseError> {
Self::get_from_instance_many(&[instance_id], exec, redis).await
@@ -181,7 +182,7 @@ impl DBSharedInstanceUser {
pub async fn get_from_instance_many(
instance_ids: &[DBSharedInstanceId],
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
redis: &RedisPool,
) -> Result<Vec<DBSharedInstanceUser>, super::DatabaseError> {
if instance_ids.is_empty() {
@@ -274,7 +275,7 @@ impl From<SharedInstanceVersionQueryResult> for DBSharedInstanceVersion {
impl DBSharedInstanceVersion {
pub async fn insert(
&self,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<(), sqlx::Error> {
sqlx::query!(
"
@@ -287,7 +288,7 @@ impl DBSharedInstanceVersion {
self.sha512,
self.created,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(())
@@ -295,7 +296,7 @@ impl DBSharedInstanceVersion {
pub async fn get(
id: DBSharedInstanceVersionId,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Option<Self>, sqlx::Error> {
let result = sqlx::query_as!(
SharedInstanceVersionQueryResult,
@@ -314,7 +315,7 @@ impl DBSharedInstanceVersion {
pub async fn get_for_instance(
instance_id: DBSharedInstanceId,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Vec<Self>, sqlx::Error> {
let results = sqlx::query_as!(
SharedInstanceVersionQueryResult,

View File

@@ -1,6 +1,6 @@
use super::{DBOrganization, DBProject, ids::*};
use crate::{
database::redis::RedisPool,
database::{PgTransaction, redis::RedisPool},
models::teams::{OrganizationPermissions, ProjectPermissions},
};
use dashmap::DashMap;
@@ -28,7 +28,7 @@ pub struct TeamMemberBuilder {
impl TeamBuilder {
pub async fn insert(
self,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<DBTeamId, super::DatabaseError> {
let team_id = generate_team_id(transaction).await?;
@@ -41,7 +41,7 @@ impl TeamBuilder {
",
team.id as DBTeamId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
let mut team_member_ids = Vec::new();
@@ -101,7 +101,7 @@ impl TeamBuilder {
&payouts_splits[..],
&orderings[..],
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(team_id)
@@ -126,7 +126,7 @@ impl DBTeam {
executor: E,
) -> Result<Option<TeamAssociationId>, super::DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
let result = sqlx::query!(
"
@@ -195,7 +195,7 @@ impl DBTeamMember {
redis: &RedisPool,
) -> Result<Vec<DBTeamMember>, super::DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres> + Copy,
E: crate::database::Executor<'a, Database = sqlx::Postgres> + Copy,
{
Self::get_from_team_full_many(&[id], executor, redis).await
}
@@ -206,7 +206,7 @@ impl DBTeamMember {
redis: &RedisPool,
) -> Result<Vec<DBTeamMember>, super::DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres> + Copy,
E: crate::database::Executor<'a, Database = sqlx::Postgres> + Copy,
{
if team_ids.is_empty() {
return Ok(Vec::new());
@@ -276,7 +276,7 @@ impl DBTeamMember {
executor: E,
) -> Result<Option<Self>, super::DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
Self::get_from_user_id_many(&[id], user_id, executor)
.await
@@ -290,7 +290,7 @@ impl DBTeamMember {
executor: E,
) -> Result<Vec<Self>, super::DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
let team_ids_parsed: Vec<i64> = team_ids.iter().map(|x| x.0).collect();
@@ -335,7 +335,7 @@ impl DBTeamMember {
executor: E,
) -> Result<Option<Self>, super::DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
let result = sqlx::query!(
"
@@ -379,7 +379,7 @@ impl DBTeamMember {
pub async fn insert(
&self,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<(), sqlx::error::Error> {
sqlx::query!(
"
@@ -400,7 +400,7 @@ impl DBTeamMember {
self.accepted,
self.payouts_split
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(())
@@ -409,7 +409,7 @@ impl DBTeamMember {
pub async fn delete(
id: DBTeamId,
user_id: DBUserId,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<(), super::DatabaseError> {
sqlx::query!(
"
@@ -419,7 +419,7 @@ impl DBTeamMember {
id as DBTeamId,
user_id as DBUserId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(())
@@ -436,7 +436,7 @@ impl DBTeamMember {
new_payouts_split: Option<Decimal>,
new_ordering: Option<i64>,
new_is_owner: Option<bool>,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<(), super::DatabaseError> {
if let Some(permissions) = new_permissions {
sqlx::query!(
@@ -449,7 +449,7 @@ impl DBTeamMember {
id as DBTeamId,
user_id as DBUserId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
}
@@ -464,7 +464,7 @@ impl DBTeamMember {
id as DBTeamId,
user_id as DBUserId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
}
@@ -479,7 +479,7 @@ impl DBTeamMember {
id as DBTeamId,
user_id as DBUserId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
}
@@ -495,7 +495,7 @@ impl DBTeamMember {
id as DBTeamId,
user_id as DBUserId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
}
@@ -510,7 +510,7 @@ impl DBTeamMember {
id as DBTeamId,
user_id as DBUserId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
}
@@ -525,7 +525,7 @@ impl DBTeamMember {
id as DBTeamId,
user_id as DBUserId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
}
@@ -540,7 +540,7 @@ impl DBTeamMember {
id as DBTeamId,
user_id as DBUserId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
}
@@ -554,7 +554,7 @@ impl DBTeamMember {
executor: E,
) -> Result<Option<Self>, super::DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
let accepted = if allow_pending {
vec![true, false]
@@ -607,7 +607,7 @@ impl DBTeamMember {
executor: E,
) -> Result<Option<Self>, super::DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
let accepted = if allow_pending {
vec![true, false]
@@ -658,7 +658,7 @@ impl DBTeamMember {
executor: E,
) -> Result<Option<Self>, super::DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
let result = sqlx::query!(
"
@@ -707,7 +707,7 @@ impl DBTeamMember {
executor: E,
) -> Result<(Option<Self>, Option<Self>), super::DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres> + Copy,
E: crate::database::Executor<'a, Database = sqlx::Postgres> + Copy,
{
let project_team_member =
Self::get_from_user_id(project.team_id, user_id, executor).await?;

View File

@@ -1,4 +1,5 @@
use super::ids::*;
use crate::database::PgTransaction;
use crate::database::models::DatabaseError;
use crate::models::threads::{MessageBody, ThreadType};
use chrono::{DateTime, Utc};
@@ -43,7 +44,7 @@ pub struct DBThreadMessage {
impl ThreadMessageBuilder {
pub async fn insert(
&self,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<DBThreadMessageId, DatabaseError> {
let thread_message_id = generate_thread_message_id(transaction).await?;
@@ -62,7 +63,7 @@ impl ThreadMessageBuilder {
self.thread_id as DBThreadId,
self.hide_identity
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(thread_message_id)
@@ -72,7 +73,7 @@ impl ThreadMessageBuilder {
impl ThreadBuilder {
pub async fn insert(
&self,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<DBThreadId, DatabaseError> {
let thread_id = generate_thread_id(&mut *transaction).await?;
sqlx::query!(
@@ -89,7 +90,7 @@ impl ThreadBuilder {
self.project_id.map(|x| x.0),
self.report_id.map(|x| x.0),
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
let (thread_ids, members): (Vec<_>, Vec<_>) =
@@ -104,7 +105,7 @@ impl ThreadBuilder {
&thread_ids[..],
&members[..],
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(thread_id)
@@ -117,7 +118,7 @@ impl DBThread {
exec: E,
) -> Result<Option<DBThread>, sqlx::Error>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres> + Copy,
E: crate::database::Executor<'a, Database = sqlx::Postgres> + Copy,
{
Self::get_many(&[id], exec)
.await
@@ -129,7 +130,7 @@ impl DBThread {
exec: E,
) -> Result<Vec<DBThread>, sqlx::Error>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres> + Copy,
E: crate::database::Executor<'a, Database = sqlx::Postgres> + Copy,
{
use futures::stream::TryStreamExt;
@@ -173,7 +174,7 @@ impl DBThread {
pub async fn remove_full(
id: DBThreadId,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<Option<()>, sqlx::error::Error> {
sqlx::query!(
"
@@ -182,7 +183,7 @@ impl DBThread {
",
id as DBThreadId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
"
@@ -191,7 +192,7 @@ impl DBThread {
",
id as DBThreadId
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
"
@@ -200,7 +201,7 @@ impl DBThread {
",
id as DBThreadId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(Some(()))
@@ -213,7 +214,7 @@ impl DBThreadMessage {
exec: E,
) -> Result<Option<DBThreadMessage>, sqlx::Error>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
Self::get_many(&[id], exec)
.await
@@ -225,7 +226,7 @@ impl DBThreadMessage {
exec: E,
) -> Result<Vec<DBThreadMessage>, sqlx::Error>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
use futures::stream::TryStreamExt;
@@ -257,7 +258,7 @@ impl DBThreadMessage {
pub async fn remove_full(
id: DBThreadMessageId,
private: bool,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<Option<()>, sqlx::error::Error> {
sqlx::query!(
"
@@ -269,7 +270,7 @@ impl DBThreadMessage {
serde_json::to_value(MessageBody::Deleted { private })
.unwrap_or(serde_json::json!({}))
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(Some(()))

View File

@@ -1,10 +1,10 @@
use super::ids::{DBProjectId, DBUserId};
use super::{DBCollectionId, DBReportId, DBThreadId};
use crate::database::models;
use crate::database::models::charge_item::DBCharge;
use crate::database::models::user_subscription_item::DBUserSubscription;
use crate::database::models::{DBOrganizationId, DatabaseError};
use crate::database::redis::RedisPool;
use crate::database::{PgTransaction, models};
use crate::models::billing::ChargeStatus;
use crate::models::users::Badges;
use ariadne::ids::base62_impl::{parse_base62, to_base62};
@@ -56,7 +56,7 @@ pub struct DBUser {
impl DBUser {
pub async fn insert(
&self,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<(), sqlx::error::Error> {
sqlx::query!(
"
@@ -97,7 +97,7 @@ impl DBUser {
self.allow_friend_requests,
self.is_subscribed_to_newsletter,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(())
@@ -109,7 +109,7 @@ impl DBUser {
redis: &RedisPool,
) -> Result<Option<DBUser>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
DBUser::get_many(&[string], executor, redis)
.await
@@ -122,7 +122,7 @@ impl DBUser {
redis: &RedisPool,
) -> Result<Option<DBUser>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
DBUser::get_many(&[ariadne::ids::UserId::from(id)], executor, redis)
.await
@@ -135,7 +135,7 @@ impl DBUser {
redis: &RedisPool,
) -> Result<Vec<DBUser>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
let ids = user_ids
.iter()
@@ -154,7 +154,7 @@ impl DBUser {
redis: &RedisPool,
) -> Result<Vec<DBUser>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
use futures::TryStreamExt;
@@ -233,7 +233,7 @@ impl DBUser {
exec: E,
) -> Result<Option<DBUserId>, sqlx::Error>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
let user = sqlx::query!(
"
@@ -254,7 +254,7 @@ impl DBUser {
exec: E,
) -> Result<Vec<DBUserId>, sqlx::Error>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
let users = sqlx::query!(
"
@@ -276,7 +276,7 @@ impl DBUser {
exec: E,
) -> Result<bool, sqlx::Error>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
let ids = user_ids.iter().map(|x| x.0).collect::<Vec<_>>();
let count = sqlx::query_scalar!(
@@ -295,7 +295,7 @@ impl DBUser {
redis: &RedisPool,
) -> Result<Vec<DBProjectId>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
use futures::stream::TryStreamExt;
@@ -347,7 +347,7 @@ impl DBUser {
exec: E,
) -> Result<Vec<DBOrganizationId>, sqlx::Error>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
use futures::stream::TryStreamExt;
@@ -372,7 +372,7 @@ impl DBUser {
exec: E,
) -> Result<Vec<DBCollectionId>, sqlx::Error>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
use futures::stream::TryStreamExt;
@@ -396,7 +396,7 @@ impl DBUser {
exec: E,
) -> Result<Vec<DBProjectId>, sqlx::Error>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
use futures::stream::TryStreamExt;
@@ -420,7 +420,7 @@ impl DBUser {
exec: E,
) -> Result<Vec<DBReportId>, sqlx::Error>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
use futures::stream::TryStreamExt;
@@ -444,7 +444,7 @@ impl DBUser {
exec: E,
) -> Result<Vec<String>, sqlx::Error>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
{
use futures::stream::TryStreamExt;
@@ -502,10 +502,10 @@ impl DBUser {
pub async fn remove(
id: DBUserId,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
redis: &RedisPool,
) -> Result<Option<()>, DatabaseError> {
let user = Self::get_id(id, &mut **transaction, redis).await?;
let user = Self::get_id(id, &mut *transaction, redis).await?;
if let Some(delete_user) = user {
DBUser::clear_caches(&[(id, Some(delete_user.username))], redis)
@@ -523,7 +523,7 @@ impl DBUser {
deleted_user as DBUserId,
id as DBUserId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -535,7 +535,7 @@ impl DBUser {
deleted_user as DBUserId,
id as DBUserId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -547,7 +547,7 @@ impl DBUser {
deleted_user as DBUserId,
id as DBUserId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
use futures::TryStreamExt;
@@ -558,7 +558,7 @@ impl DBUser {
",
id as DBUserId,
)
.fetch(&mut **transaction)
.fetch(&mut *transaction)
.map_ok(|m| m.id)
.try_collect::<Vec<i64>>()
.await?;
@@ -570,7 +570,7 @@ impl DBUser {
",
&notifications
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -580,7 +580,7 @@ impl DBUser {
",
id as DBUserId
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -590,7 +590,7 @@ impl DBUser {
",
id as DBUserId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
let user_collections = sqlx::query!(
@@ -601,7 +601,7 @@ impl DBUser {
",
id as DBUserId,
)
.fetch(&mut **transaction)
.fetch(&mut *transaction)
.map_ok(|x| DBCollectionId(x.id))
.try_collect::<Vec<_>>()
.await?;
@@ -620,7 +620,7 @@ impl DBUser {
",
id as DBUserId,
)
.fetch(&mut **transaction)
.fetch(&mut *transaction)
.map_ok(|x| DBThreadId(x.id))
.try_collect::<Vec<_>>()
.await?;
@@ -636,7 +636,7 @@ impl DBUser {
",
id as DBUserId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -648,7 +648,7 @@ impl DBUser {
deleted_user as DBUserId,
id as DBUserId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -658,7 +658,7 @@ impl DBUser {
",
id as DBUserId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -668,7 +668,7 @@ impl DBUser {
",
id as DBUserId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -678,7 +678,7 @@ impl DBUser {
",
id as DBUserId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -690,7 +690,7 @@ impl DBUser {
deleted_user as DBUserId,
id as DBUserId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -702,7 +702,7 @@ impl DBUser {
id as DBUserId,
deleted_user as DBUserId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -712,7 +712,7 @@ impl DBUser {
",
id as DBUserId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -724,7 +724,7 @@ impl DBUser {
deleted_user as DBUserId,
id as DBUserId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -734,7 +734,7 @@ impl DBUser {
",
id as DBUserId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -744,7 +744,7 @@ impl DBUser {
",
id as DBUserId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -754,7 +754,7 @@ impl DBUser {
",
id as DBUserId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -765,7 +765,7 @@ impl DBUser {
deleted_user as DBUserId,
id as DBUserId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -774,7 +774,7 @@ impl DBUser {
WHERE affiliate = $1",
id as DBUserId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -785,7 +785,7 @@ impl DBUser {
deleted_user as DBUserId,
id as DBUserId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -794,16 +794,15 @@ impl DBUser {
WHERE user_id = $1",
id as DBUserId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
let open_subscriptions =
DBUserSubscription::get_all_user(id, &mut **transaction)
.await?;
DBUserSubscription::get_all_user(id, &mut *transaction).await?;
for x in open_subscriptions {
let charge =
DBCharge::get_open_subscription(x.id, &mut **transaction)
DBCharge::get_open_subscription(x.id, &mut *transaction)
.await?;
if let Some(mut charge) = charge {
charge.status = ChargeStatus::Cancelled;
@@ -823,7 +822,7 @@ impl DBUser {
deleted_user as DBUserId,
id as DBUserId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -833,7 +832,7 @@ impl DBUser {
",
id as DBUserId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -843,7 +842,7 @@ impl DBUser {
",
id as DBUserId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(Some(()))

View File

@@ -1,5 +1,5 @@
use crate::database::PgPool;
use serde::{Deserialize, Serialize};
use sqlx::PgPool;
use crate::database::models::DBUserId;

View File

@@ -1,3 +1,4 @@
use crate::database::PgTransaction;
use crate::database::models::{
DBProductPriceId, DBUserId, DBUserSubscriptionId, DatabaseError,
};
@@ -62,14 +63,14 @@ impl TryFrom<UserSubscriptionQueryResult> for DBUserSubscription {
impl DBUserSubscription {
pub async fn get(
id: DBUserSubscriptionId,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Option<DBUserSubscription>, DatabaseError> {
Ok(Self::get_many(&[id], exec).await?.into_iter().next())
}
pub async fn get_many(
ids: &[DBUserSubscriptionId],
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Vec<DBUserSubscription>, DatabaseError> {
let ids = ids.iter().map(|id| id.0).collect_vec();
let ids_ref: &[i64] = &ids;
@@ -88,7 +89,7 @@ impl DBUserSubscription {
pub async fn get_all_user(
user_id: DBUserId,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Vec<DBUserSubscription>, DatabaseError> {
let user_id = user_id.0;
let results = select_user_subscriptions_with_predicate!(
@@ -106,7 +107,7 @@ impl DBUserSubscription {
pub async fn get_all_servers(
status: Option<SubscriptionStatus>,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Vec<DBUserSubscription>, DatabaseError> {
let status = status.map(|x| x.as_str());
@@ -130,7 +131,7 @@ impl DBUserSubscription {
pub async fn upsert(
&self,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<(), DatabaseError> {
sqlx::query!(
"
@@ -155,7 +156,7 @@ impl DBUserSubscription {
self.status.as_str(),
serde_json::to_value(&self.metadata)?,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(())
@@ -163,7 +164,7 @@ impl DBUserSubscription {
pub async fn get_many_by_server_ids(
server_ids: &[String],
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Vec<DBUserSubscription>, DatabaseError> {
if server_ids.is_empty() {
return Ok(vec![]);

View File

@@ -39,14 +39,14 @@ impl From<UserNotificationPreferenceQueryResult>
impl UserNotificationPreference {
pub async fn get_user_or_default(
user_id: DBUserId,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Vec<UserNotificationPreference>, DatabaseError> {
Self::get_many_users_or_default(&[user_id], exec).await
}
pub async fn get_many_users_or_default(
user_ids: &[DBUserId],
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<Vec<UserNotificationPreference>, DatabaseError> {
let results = sqlx::query!(
r#"
@@ -86,7 +86,7 @@ impl UserNotificationPreference {
/// Inserts the row into the table and updates its ID.
pub async fn insert(
&mut self,
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
) -> Result<(), DatabaseError> {
let id = sqlx::query_scalar!(
"

View File

@@ -1,4 +1,7 @@
use crate::database::models::{DBUserId, DBUserSubscriptionId};
use crate::database::{
PgTransaction,
models::{DBUserId, DBUserSubscriptionId},
};
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use sqlx::query_scalar;
@@ -43,7 +46,7 @@ impl DBUserSubscriptionCredit {
}
pub async fn insert_many(
exec: &mut sqlx::Transaction<'_, sqlx::Postgres>,
exec: &mut PgTransaction<'_>,
subscription_ids: &[DBUserSubscriptionId],
user_ids: &[DBUserId],
creditor_ids: &[DBUserId],
@@ -74,7 +77,7 @@ impl DBUserSubscriptionCredit {
&previous_dues[..],
&next_dues[..],
)
.execute(&mut **exec)
.execute(&mut *exec)
.await?;
Ok(())

View File

@@ -1,6 +1,7 @@
use super::DatabaseError;
use super::ids::*;
use super::loader_fields::VersionField;
use crate::database::PgTransaction;
use crate::database::models::loader_fields::{
QueryLoaderField, QueryLoaderFieldEnumValue, QueryVersionField,
};
@@ -50,7 +51,7 @@ impl DependencyBuilder {
pub async fn insert_many(
builders: Vec<Self>,
version_id: DBVersionId,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<(), DatabaseError> {
let mut project_ids = Vec::new();
for dependency in &builders {
@@ -89,7 +90,7 @@ impl DependencyBuilder {
&project_ids[..] as &[Option<i64>],
&filenames[..] as &[Option<String>],
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(())
@@ -97,7 +98,7 @@ impl DependencyBuilder {
async fn try_get_project_id(
&self,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<Option<DBProjectId>, DatabaseError> {
Ok(if let Some(project_id) = self.project_id {
Some(project_id)
@@ -108,7 +109,7 @@ impl DependencyBuilder {
",
version_id as DBVersionId,
)
.fetch_optional(&mut **transaction)
.fetch_optional(&mut *transaction)
.await?
.map(|x| DBProjectId(x.mod_id))
} else {
@@ -131,7 +132,7 @@ impl VersionFileBuilder {
pub async fn insert(
self,
version_id: DBVersionId,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<DBFileId, DatabaseError> {
let file_id = generate_file_id(&mut *transaction).await?;
@@ -148,7 +149,7 @@ impl VersionFileBuilder {
self.size as i32,
self.file_type.map(|x| x.as_str()),
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
for hash in self.hashes {
@@ -161,12 +162,12 @@ impl VersionFileBuilder {
hash.algorithm,
hash.hash,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
}
if let Err(err) = crate::routes::internal::delphi::run(
&mut **transaction,
&mut *transaction,
DelphiRunParameters {
file_id: file_id.into(),
},
@@ -189,7 +190,7 @@ pub struct HashBuilder {
impl VersionBuilder {
pub async fn insert(
self,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<DBVersionId, DatabaseError> {
let version = DBVersion {
id: self.version_id,
@@ -217,7 +218,7 @@ impl VersionBuilder {
",
self.project_id as DBProjectId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
let VersionBuilder {
@@ -263,7 +264,7 @@ pub struct DBLoaderVersion {
impl DBLoaderVersion {
pub async fn insert_many(
items: Vec<Self>,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<(), DatabaseError> {
let (loader_ids, version_ids): (Vec<_>, Vec<_>) = items
.iter()
@@ -277,7 +278,7 @@ impl DBLoaderVersion {
&loader_ids[..],
&version_ids[..],
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(())
@@ -304,7 +305,7 @@ pub struct DBVersion {
impl DBVersion {
pub async fn insert(
&self,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<(), sqlx::error::Error> {
sqlx::query!(
"
@@ -332,7 +333,7 @@ impl DBVersion {
self.status.as_str(),
self.ordering
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(())
@@ -341,9 +342,9 @@ impl DBVersion {
pub async fn remove_full(
id: DBVersionId,
redis: &RedisPool,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<Option<()>, DatabaseError> {
let result = Self::get(id, &mut **transaction, redis).await?;
let result = Self::get(id, &mut *transaction, redis).await?;
let Some(result) = result else {
return Ok(None);
@@ -359,7 +360,7 @@ impl DBVersion {
",
id as DBVersionId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -369,7 +370,7 @@ impl DBVersion {
",
id as DBVersionId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -379,7 +380,7 @@ impl DBVersion {
",
id as DBVersionId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -393,7 +394,7 @@ impl DBVersion {
",
id as DBVersionId
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -403,7 +404,7 @@ impl DBVersion {
",
id as DBVersionId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
// Sync dependencies
@@ -414,7 +415,7 @@ impl DBVersion {
",
id as DBVersionId,
)
.fetch_one(&mut **transaction)
.fetch_one(&mut *transaction)
.await?;
sqlx::query!(
@@ -426,7 +427,7 @@ impl DBVersion {
id as DBVersionId,
project_id.mod_id,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -434,7 +435,7 @@ impl DBVersion {
DELETE FROM dependencies WHERE mod_dependency_id = NULL AND dependency_id = NULL AND dependency_file_name = NULL
",
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
sqlx::query!(
@@ -443,7 +444,7 @@ impl DBVersion {
",
id as DBVersionId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
// delete version
@@ -454,7 +455,7 @@ impl DBVersion {
",
id as DBVersionId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
crate::database::models::DBProject::clear_cache(
@@ -474,7 +475,7 @@ impl DBVersion {
redis: &RedisPool,
) -> Result<Option<VersionQueryResult>, DatabaseError>
where
E: sqlx::Acquire<'a, Database = sqlx::Postgres>,
E: crate::database::Acquire<'a, Database = sqlx::Postgres>,
{
Self::get_many(&[id], executor, redis)
.await
@@ -487,7 +488,7 @@ impl DBVersion {
redis: &RedisPool,
) -> Result<Vec<VersionQueryResult>, DatabaseError>
where
E: sqlx::Acquire<'a, Database = sqlx::Postgres>,
E: crate::database::Acquire<'a, Database = sqlx::Postgres>,
{
let mut val = redis.get_cached_keys(
VERSIONS_NAMESPACE,
@@ -504,7 +505,7 @@ impl DBVersion {
",
&version_ids
)
.fetch(&mut *exec)
.fetch(&mut exec)
.try_fold(
DashMap::new(),
|acc: DashMap<DBVersionId, Vec<QueryVersionField>>, m| {
@@ -554,7 +555,7 @@ impl DBVersion {
GROUP BY version_id
",
&version_ids
).fetch(&mut *exec)
).fetch(&mut exec)
.map_ok(|m| {
let version_id = DBVersionId(m.version_id);
@@ -585,7 +586,7 @@ impl DBVersion {
",
&loader_field_ids.iter().map(|x| x.0).collect::<Vec<_>>()
)
.fetch(&mut *exec)
.fetch(&mut exec)
.map_ok(|m| QueryLoaderField {
id: LoaderFieldId(m.id),
field: m.field,
@@ -610,7 +611,7 @@ impl DBVersion {
.map(|x| x.0)
.collect::<Vec<_>>()
)
.fetch(&mut *exec)
.fetch(&mut exec)
.map_ok(|m| QueryLoaderFieldEnumValue {
id: LoaderFieldEnumValueId(m.id),
enum_id: LoaderFieldEnumId(m.enum_id),
@@ -648,7 +649,7 @@ impl DBVersion {
WHERE f.version_id = ANY($1)
",
&version_ids
).fetch(&mut *exec)
).fetch(&mut exec)
.try_fold(DashMap::new(), |acc : DashMap<DBVersionId, Vec<File>>, m| {
let file = File {
id: DBFileId(m.id),
@@ -677,7 +678,7 @@ impl DBVersion {
",
&file_ids.iter().map(|x| x.0).collect::<Vec<_>>()
)
.fetch(&mut *exec)
.fetch(&mut exec)
.try_fold(DashMap::new(), |acc: DashMap<DBVersionId, Vec<Hash>>, m| {
if let Some(found_hash) = m.hash {
let hash = Hash {
@@ -701,7 +702,7 @@ impl DBVersion {
WHERE dependent_id = ANY($1)
",
&version_ids
).fetch(&mut *exec)
).fetch(&mut exec)
.try_fold(DashMap::new(), |acc : DashMap<_,Vec<DependencyQueryResult>>, m| {
let dependency = DependencyQueryResult {
project_id: m.dependency_project_id.map(DBProjectId),
@@ -727,7 +728,7 @@ impl DBVersion {
",
&version_ids
)
.fetch(&mut *exec)
.fetch(&mut exec)
.try_fold(DashMap::new(), |acc, v| {
let version_id = DBVersionId(v.id);
let VersionLoaderData {
@@ -827,7 +828,7 @@ impl DBVersion {
redis: &RedisPool,
) -> Result<Option<DBFile>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres> + Copy,
E: crate::database::Executor<'a, Database = sqlx::Postgres> + Copy,
{
Self::get_files_from_hash(algo, &[hash], executor, redis)
.await
@@ -844,7 +845,7 @@ impl DBVersion {
redis: &RedisPool,
) -> Result<Vec<DBFile>, DatabaseError>
where
E: sqlx::Executor<'a, Database = sqlx::Postgres> + Copy,
E: crate::database::Executor<'a, Database = sqlx::Postgres> + Copy,
{
let val = redis.get_cached_keys(
VERSION_FILES_NAMESPACE,

View File

@@ -1,12 +1,23 @@
use eyre::Context;
use prometheus::{IntGauge, Registry};
use sqlx::migrate::{MigrateDatabase, Migrator};
use sqlx::postgres::{PgPool, PgPoolOptions};
use sqlx::{Connection, PgConnection, Postgres};
use sqlx::postgres::PgPoolOptions;
use sqlx::{Connection, Postgres};
use std::ops::{Deref, DerefMut};
use std::time::Duration;
use tracing::info;
// TODO tracing spans
pub type PgPool = sqlx_tracing::Pool<Postgres>;
pub type PgTransaction<'c> = sqlx_tracing::Transaction<'c, Postgres>;
pub use sqlx_tracing::Acquire;
pub use sqlx_tracing::Executor;
// pub type PgPool = sqlx::PgPool;
// pub type PgTransaction<'c> = sqlx::Transaction<'c, Postgres>;
// pub use sqlx::Acquire;
// pub use sqlx::Executor;
#[derive(Clone)]
#[repr(transparent)]
pub struct ReadOnlyPgPool(PgPool);
@@ -71,6 +82,7 @@ pub async fn connect_all() -> Result<(PgPool, ReadOnlyPgPool), sqlx::Error> {
.max_lifetime(Some(Duration::from_secs(60 * 60)))
.connect(&database_url)
.await?;
let pool = PgPool::from(pool);
if let Ok(url) = dotenvy::var("READONLY_DATABASE_URL") {
let ro_pool = PgPoolOptions::new()
@@ -90,6 +102,7 @@ pub async fn connect_all() -> Result<(PgPool, ReadOnlyPgPool), sqlx::Error> {
.max_lifetime(Some(Duration::from_secs(60 * 60)))
.connect(&url)
.await?;
let ro_pool = PgPool::from(ro_pool);
Ok((pool, ReadOnlyPgPool(ro_pool)))
} else {
@@ -114,9 +127,10 @@ pub async fn check_for_migrations() -> eyre::Result<()> {
info!("Applying migrations...");
let mut conn: PgConnection = PgConnection::connect(uri)
.await
.wrap_err("failed to connect to database")?;
let mut conn: sqlx::PgConnection =
sqlx::PgConnection::connect(uri)
.await
.wrap_err("failed to connect to database")?;
MIGRATOR
.run(&mut conn)
.await

View File

@@ -7,7 +7,6 @@ use queue::{
analytics::AnalyticsQueue, email::EmailQueue, payouts::PayoutsQueue,
session::AuthQueue, socket::ActiveSockets,
};
use sqlx::Postgres;
use tracing::{debug, info, warn};
extern crate clickhouse as clickhouse_crate;
@@ -16,7 +15,7 @@ use util::cors::default_cors;
use util::gotenberg::GotenbergClient;
use crate::background_task::update_versions;
use crate::database::ReadOnlyPgPool;
use crate::database::{PgPool, ReadOnlyPgPool};
use crate::queue::billing::{index_billing, index_subscriptions};
use crate::queue::moderation::AutomatedModerationQueue;
use crate::search::MeilisearchReadClient;
@@ -50,7 +49,7 @@ pub struct Pepper {
#[derive(Clone)]
pub struct LabrinthConfig {
pub pool: sqlx::Pool<Postgres>,
pub pool: PgPool,
pub ro_pool: ReadOnlyPgPool,
pub redis_pool: RedisPool,
pub clickhouse: Client,
@@ -74,7 +73,7 @@ pub struct LabrinthConfig {
#[allow(clippy::too_many_arguments)]
pub fn app_setup(
pool: sqlx::Pool<Postgres>,
pool: PgPool,
ro_pool: ReadOnlyPgPool,
redis_pool: RedisPool,
search_config: search::SearchConfig,

View File

@@ -231,7 +231,7 @@ impl LegacyProject {
redis: &RedisPool,
) -> Result<Vec<Self>, DatabaseError>
where
E: sqlx::Acquire<'a, Database = sqlx::Postgres>,
E: crate::database::Acquire<'a, Database = sqlx::Postgres>,
{
let version_ids: Vec<_> = data
.iter()

View File

@@ -1,5 +1,5 @@
use crate::database::PgPool;
use serde::{Deserialize, Serialize};
use sqlx::PgPool;
use crate::{
database::models::{DBUserId, user_limits::DBUserLimits},

View File

@@ -1,3 +1,4 @@
use crate::database::PgPool;
use crate::database::models::DatabaseError;
use crate::database::redis::RedisPool;
use crate::models::analytics::{
@@ -6,7 +7,6 @@ use crate::models::analytics::{
use crate::routes::ApiError;
use dashmap::{DashMap, DashSet};
use redis::cmd;
use sqlx::PgPool;
use std::collections::HashMap;
const DOWNLOADS_NAMESPACE: &str = "downloads";
@@ -255,7 +255,7 @@ impl AnalyticsQueue {
)
.bind(version_downloads.keys().copied().collect::<Vec<_>>())
.bind(version_downloads.values().copied().collect::<Vec<_>>())
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
sqlx::query(
@@ -268,7 +268,7 @@ impl AnalyticsQueue {
)
.bind(project_downloads.keys().copied().collect::<Vec<_>>())
.bind(project_downloads.values().copied().collect::<Vec<_>>())
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
transaction.commit().await?;

View File

@@ -11,6 +11,7 @@ use crate::database::models::{
product_item, user_subscription_item, users_redeemals,
};
use crate::database::redis::RedisPool;
use crate::database::{PgPool, PgTransaction};
use crate::models::billing::{
ChargeStatus, ChargeType, PaymentPlatform, Price, PriceDuration,
ProductMetadata, SubscriptionMetadata, SubscriptionStatus,
@@ -28,7 +29,6 @@ use ariadne::ids::base62_impl::to_base62;
use chrono::Utc;
use futures::FutureExt;
use futures::stream::{FuturesUnordered, StreamExt};
use sqlx::PgPool;
use std::collections::HashSet;
use std::str::FromStr;
use std::time::Instant;
@@ -49,7 +49,7 @@ async fn update_tax_amounts(
loop {
let mut txn = pg.begin().await?;
let charges = DBCharge::get_updateable_lock(&mut *txn, 5).await?;
let charges = DBCharge::get_updateable_lock(&mut txn, 5).await?;
if charges.is_empty() {
info!("No more charges to process");
@@ -273,7 +273,7 @@ async fn update_anrok_transactions(
) -> Result<(), ApiError> {
async fn process_charge(
stripe_client: &stripe::Client,
txn: &mut sqlx::PgTransaction<'_>,
txn: &mut PgTransaction<'_>,
redis: &RedisPool,
anrok_client: &anrok::Client,
mut c: DBCharge,
@@ -341,7 +341,7 @@ async fn update_anrok_transactions(
.and_then(|x| x.billing_details.address);
let stripe_customer_id =
DBUser::get_id(c.user_id, &mut **txn, redis)
DBUser::get_id(c.user_id, &mut *txn, redis)
.await?
.ok_or_else(|| {
ApiError::from(DatabaseError::Database(
@@ -395,7 +395,7 @@ async fn update_anrok_transactions(
(address, tax_platform_id, customer_id)
};
let tax_id = DBProductsTaxIdentifier::get_price(c.price_id, &mut **txn)
let tax_id = DBProductsTaxIdentifier::get_price(c.price_id, &mut *txn)
.await?
.ok_or_else(|| DatabaseError::Database(sqlx::Error::RowNotFound))?;
@@ -466,7 +466,7 @@ async fn update_anrok_transactions(
let mut txn = pg.begin().await?;
let mut charges =
DBCharge::get_missing_tax_identifier_lock(&mut *txn, offset, 1)
DBCharge::get_missing_tax_identifier_lock(&mut txn, offset, 1)
.await?;
let Some(c) = charges.pop() else {
@@ -654,7 +654,7 @@ pub async fn try_process_user_redeemal(
// Update `users_redeemal`, mark subscription as redeemed.
user_redeemal.status = users_redeemals::Status::Processed;
user_redeemal.update(&mut *txn).await?;
user_redeemal.update(&mut txn).await?;
txn.commit().await?;
@@ -896,7 +896,7 @@ async fn unprovision_subscriptions(
badges.bits() as i64,
user.id as DBUserId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
true
@@ -942,7 +942,7 @@ async fn unprovision_subscriptions(
DBUsersSubscriptionsAffiliations::deactivate(
subscription.id,
&mut *transaction,
&mut transaction,
)
.await
.wrap_internal_err(

View File

@@ -4,6 +4,7 @@ use crate::database::models::notifications_deliveries_item::DBNotificationDelive
use crate::database::models::notifications_template_item::NotificationTemplate;
use crate::database::models::user_item::DBUser;
use crate::database::redis::RedisPool;
use crate::database::{PgPool, PgTransaction};
use crate::models::notifications::{NotificationBody, NotificationType};
use crate::models::v3::notifications::{
NotificationChannel, NotificationDeliveryStatus,
@@ -16,7 +17,6 @@ use lettre::transport::smtp::authentication::Credentials;
use lettre::transport::smtp::client::{Tls, TlsParameters};
use lettre::{AsyncSmtpTransport, AsyncTransport, Tokio1Executor};
use reqwest::Client;
use sqlx::PgPool;
use std::sync::Arc;
use thiserror::Error;
use tokio::sync::Mutex as TokioMutex;
@@ -204,12 +204,9 @@ impl EmailQueue {
futures.push(async move {
let mut txn = this.pg.begin().await?;
let maybe_user = DBUser::get_id(
notification.user_id,
&mut *txn,
&this.redis,
)
.await?;
let maybe_user =
DBUser::get_id(notification.user_id, &mut txn, &this.redis)
.await?;
let Some(mailbox) = maybe_user
.and_then(|user| user.email)
@@ -301,7 +298,7 @@ impl EmailQueue {
pub async fn send_one(
&self,
txn: &mut sqlx::PgTransaction<'_>,
txn: &mut PgTransaction<'_>,
notification: NotificationBody,
user_id: DBUserId,
address: Mailbox,
@@ -319,7 +316,7 @@ impl EmailQueue {
async fn send_one_with_transport(
&self,
txn: &mut sqlx::PgTransaction<'_>,
txn: &mut PgTransaction<'_>,
transport: Arc<AsyncSmtpTransport<Tokio1Executor>>,
notification: NotificationBody,
user_id: DBUserId,
@@ -330,7 +327,7 @@ impl EmailQueue {
let Some(template) = NotificationTemplate::list_channel(
NotificationChannel::Email,
&mut **txn,
&mut *txn,
&self.redis,
)
.await?

View File

@@ -1,4 +1,5 @@
use super::MailError;
use crate::database::PgTransaction;
use crate::database::models::ids::*;
use crate::database::models::notifications_template_item::{
NotificationTemplate, get_or_set_cached_dynamic_html,
@@ -105,7 +106,7 @@ impl MailingIdentity {
#[allow(clippy::too_many_arguments)]
pub async fn build_email(
exec: &mut sqlx::PgTransaction<'_>,
exec: &mut PgTransaction<'_>,
redis: &RedisPool,
client: &reqwest::Client,
user_id: DBUserId,
@@ -147,7 +148,7 @@ pub async fn build_email(
reply_address,
} = from;
let db_user = DBUser::get_id(user_id, &mut **exec, redis)
let db_user = DBUser::get_id(user_id, &mut *exec, redis)
.await?
.ok_or(DatabaseError::Database(sqlx::Error::RowNotFound))?;
@@ -297,7 +298,7 @@ enum EmailTemplate {
}
async fn collect_template_variables(
exec: &mut sqlx::PgTransaction<'_>,
exec: &mut PgTransaction<'_>,
redis: &RedisPool,
user_id: DBUserId,
n: &NotificationBody,
@@ -339,7 +340,7 @@ async fn collect_template_variables(
"#,
report_id.0 as i64
)
.fetch_one(&mut **exec)
.fetch_one(&mut *exec)
.await?;
map.insert(REPORT_ID, to_base62(report_id.0));
@@ -361,7 +362,7 @@ async fn collect_template_variables(
"#,
report_id.0 as i64
)
.fetch_one(&mut **exec)
.fetch_one(&mut *exec)
.await?;
map.insert(REPORT_TITLE, result.title);
@@ -376,7 +377,7 @@ async fn collect_template_variables(
"#,
project_id.0 as i64
)
.fetch_one(&mut **exec)
.fetch_one(&mut *exec)
.await?;
map.insert(PROJECT_ID, to_base62(project_id.0));
@@ -414,7 +415,7 @@ async fn collect_template_variables(
} => {
let project = DBProject::get_id(
DBProjectId(project_id.0 as i64),
&mut **exec,
&mut *exec,
redis,
)
.await?
@@ -428,7 +429,7 @@ async fn collect_template_variables(
if let Some(new_owner_user_id) = new_owner_user_id {
let user = DBUser::get_id(
DBUserId(new_owner_user_id.0 as i64),
&mut **exec,
&mut *exec,
redis,
)
.await?
@@ -444,7 +445,7 @@ async fn collect_template_variables(
{
let org = DBOrganization::get_id(
DBOrganizationId(new_owner_organization_id.0 as i64),
&mut **exec,
&mut *exec,
redis,
)
.await?
@@ -484,7 +485,7 @@ async fn collect_template_variables(
project_id.0 as i64,
user_id.0 as i64
)
.fetch_one(&mut **exec)
.fetch_one(&mut *exec)
.await?;
map.insert(TEAMINVITE_INVITER_NAME, result.inviter_name);
@@ -516,7 +517,7 @@ async fn collect_template_variables(
organization_id.0 as i64,
user_id.0 as i64
)
.fetch_one(&mut **exec)
.fetch_one(&mut *exec)
.await?;
map.insert(ORGINVITE_INVITER_NAME, result.inviter_name);
@@ -544,7 +545,7 @@ async fn collect_template_variables(
project_id.0 as i64,
user_id.0 as i64,
)
.fetch_one(&mut **exec)
.fetch_one(&mut *exec)
.await?;
map.insert(STATUSCHANGE_PROJECT_NAME, result.project_name);
@@ -706,12 +707,12 @@ async fn collect_template_variables(
// Resolve product metadata via price_id join
if let Some(info) = crate::database::models::user_subscription_item::DBUserSubscription::get(
(*subscription_id).into(),
&mut **exec,
&mut *exec,
)
.await
.ok()
.flatten()
&& let Ok(Some(pinfo)) = crate::database::models::products_tax_identifier_item::product_info_by_product_price_id(info.price_id, &mut **exec).await {
&& let Ok(Some(pinfo)) = crate::database::models::products_tax_identifier_item::product_info_by_product_price_id(info.price_id, &mut *exec).await {
let label = match pinfo.product_metadata {
crate::models::billing::ProductMetadata::Pyro { .. } => "server".to_string(),
crate::models::billing::ProductMetadata::Medal { .. } => "server".to_string(),

View File

@@ -1,5 +1,6 @@
use crate::auth::checks::filter_visible_versions;
use crate::database;
use crate::database::PgPool;
use crate::database::models::notification_item::NotificationBuilder;
use crate::database::models::thread_item::ThreadMessageBuilder;
use crate::database::redis::RedisPool;
@@ -14,7 +15,6 @@ use hex::ToHex;
use itertools::Itertools;
use serde::{Deserialize, Serialize};
use sha1::Digest;
use sqlx::PgPool;
use std::collections::HashMap;
use std::fmt::Write;
use std::io::{Cursor, Read};

View File

@@ -1,7 +1,7 @@
use crate::database::PgPool;
use chrono::{Datelike, Duration, TimeZone, Utc};
use eyre::{Context, Result, eyre};
use rust_decimal::{Decimal, dec};
use sqlx::PgPool;
use tracing::warn;
use crate::database::models::{DBAffiliateCodeId, DBUserId};
@@ -58,7 +58,7 @@ pub async fn process_affiliate_payouts(postgres: &PgPool) -> Result<()> {
)
"#
)
.fetch_all(&mut *txn)
.fetch_all(&mut txn)
.await
.wrap_err("failed to fetch charges awaiting affiliate payout")?;
@@ -147,7 +147,7 @@ pub async fn process_affiliate_payouts(postgres: &PgPool) -> Result<()> {
available,
affiliate_code_id as _,
)
.fetch_one(&mut *txn)
.fetch_one(&mut txn)
.await
.wrap_err_with(|| eyre!("failed to insert payout value for ({affiliate_user_id:?}, {affiliate_code_id:?})"))?
.id;
@@ -170,7 +170,7 @@ pub async fn process_affiliate_payouts(postgres: &PgPool) -> Result<()> {
&insert_usap_affiliate_codes[..],
&insert_usap_payout_values[..],
)
.execute(&mut *txn)
.execute(&mut txn)
.await
.wrap_err("failed to associate charges with affiliate payouts")?;
@@ -221,7 +221,7 @@ pub async fn remove_payouts_for_refunded_charges(
AND refund_charges.charge_type = 'refund'
"#
)
.fetch_all(&mut *txn)
.fetch_all(&mut txn)
.await
.wrap_err("failed to fetch refundable affiliate payouts")?;
@@ -248,7 +248,7 @@ pub async fn remove_payouts_for_refunded_charges(
",
&usap_ids[..]
)
.execute(&mut *txn)
.execute(&mut txn)
.await
.wrap_err("failed to delete affiliate payout associations")?;
@@ -260,7 +260,7 @@ pub async fn remove_payouts_for_refunded_charges(
",
&payout_value_ids[..]
)
.execute(&mut *txn)
.execute(&mut txn)
.await
.wrap_err("failed to delete payout values")?;

View File

@@ -4,7 +4,6 @@
use eyre::eyre;
use modrinth_util::decimal::Decimal2dp;
use rust_decimal::Decimal;
use sqlx::PgTransaction;
use thiserror::Error;
pub mod mural;
@@ -12,7 +11,10 @@ pub mod paypal;
pub mod tremendous;
use crate::{
database::models::{DBPayoutId, DBUser},
database::{
PgTransaction,
models::{DBPayoutId, DBUser},
},
models::payouts::{PayoutMethodRequest, Withdrawal},
queue::payouts::PayoutsQueue,
routes::ApiError,

View File

@@ -1,6 +1,7 @@
use crate::database::models::notification_item::NotificationBuilder;
use crate::database::models::payouts_values_notifications;
use crate::database::redis::RedisPool;
use crate::database::{PgPool, PgTransaction};
use crate::models::payouts::{
PayoutDecimal, PayoutInterval, PayoutMethod, PayoutMethodType,
TremendousForexResponse,
@@ -26,7 +27,6 @@ use rust_decimal::prelude::ToPrimitive;
use serde::de::DeserializeOwned;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use sqlx::PgPool;
use sqlx::postgres::PgQueryResult;
use std::collections::HashMap;
use tokio::sync::RwLock;
@@ -1023,7 +1023,7 @@ pub async fn process_payout(
.map(|x| x.to_string())
.collect::<Vec<String>>(),
)
.fetch(&mut *transaction)
.fetch(&mut transaction)
.try_fold(DashMap::new(), |acc: DashMap<i64, HashMap<i64, Decimal>>, r| {
acc.entry(r.id)
.or_default()
@@ -1046,7 +1046,7 @@ pub async fn process_payout(
.map(|x| x.to_string())
.collect::<Vec<String>>(),
)
.fetch(&mut *transaction)
.fetch(&mut transaction)
.try_fold(
DashMap::new(),
|acc: DashMap<i64, HashMap<i64, Decimal>>, r| {
@@ -1193,7 +1193,7 @@ pub async fn process_payout(
&insert_starts[..],
&insert_availables[..]
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
transaction.commit().await?;
@@ -1208,7 +1208,7 @@ pub async fn insert_payouts(
insert_payouts: Vec<Decimal>,
insert_starts: Vec<DateTime<Utc>>,
insert_availables: Vec<DateTime<Utc>>,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> sqlx::Result<PgQueryResult> {
sqlx::query!(
"
@@ -1221,7 +1221,7 @@ pub async fn insert_payouts(
&insert_starts[..],
&insert_availables[..],
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await
}
@@ -1234,11 +1234,11 @@ pub async fn index_payouts_notifications(
let mut transaction = pool.begin().await?;
payouts_values_notifications::synchronize_future_payout_values(
&mut *transaction,
&mut transaction,
200,
)
.await?;
let items = payouts_values_notifications::PayoutsValuesNotification::unnotified_users_with_available_payouts_with_limit(&mut *transaction, 200).await?;
let items = payouts_values_notifications::PayoutsValuesNotification::unnotified_users_with_available_payouts_with_limit(&mut transaction, 200).await?;
let payout_ref_ids = items.iter().map(|x| x.id).collect::<Vec<_>>();
let dates_available =
@@ -1254,7 +1254,7 @@ pub async fn index_payouts_notifications(
.await?;
payouts_values_notifications::PayoutsValuesNotification::set_notified_many(
&payout_ref_ids,
&mut *transaction,
&mut transaction,
)
.await?;
@@ -1320,7 +1320,7 @@ pub async fn insert_bank_balances_and_webhook(
&insert_pending[..],
&insert_recorded[..],
)
.fetch_one(&mut *transaction)
.fetch_one(&mut transaction)
.await?;
if inserted {

View File

@@ -1,10 +1,10 @@
use crate::database::PgPool;
use chrono::Utc;
use eyre::{Result, eyre};
use futures::{StreamExt, TryFutureExt, stream::FuturesUnordered};
use modrinth_util::decimal::Decimal2dp;
use rust_decimal::{Decimal, prelude::ToPrimitive};
use serde::{Deserialize, Serialize};
use sqlx::PgPool;
use tracing::{info, trace, warn};
use crate::{
@@ -177,7 +177,7 @@ pub async fn sync_pending_payouts_from_mural(
.collect::<Vec<String>>(),
i64::from(limit),
)
.fetch_all(&mut *txn)
.fetch_all(&mut txn)
.await
.wrap_internal_err("failed to fetch incomplete Mural payouts")?;
@@ -235,7 +235,7 @@ pub async fn sync_pending_payouts_from_mural(
&payout_ids,
&payout_statuses,
)
.execute(&mut *txn)
.execute(&mut txn)
.await
.wrap_internal_err("failed to update payout statuses")?;
@@ -452,7 +452,7 @@ mod tests {
}
async fn setup_test_db_with_payouts(
db: &sqlx::PgPool,
db: &PgPool,
payouts: Vec<(i64, String, PayoutStatus)>,
) -> Result<(), eyre::Error> {
for (id, platform_id, status) in payouts {

View File

@@ -4,10 +4,10 @@ use crate::database::models::{
DBOAuthAccessTokenId, DBPatId, DBSessionId, DBUserId, DatabaseError,
};
use crate::database::redis::RedisPool;
use crate::database::{PgPool, PgTransaction};
use crate::routes::internal::session::SessionMetadata;
use chrono::Utc;
use itertools::Itertools;
use sqlx::PgPool;
use std::collections::{HashMap, HashSet};
use tokio::sync::Mutex;
@@ -55,14 +55,14 @@ impl AuthQueue {
let mut queue = self.session_queue.lock().await;
let len = queue.len();
std::mem::replace(&mut queue, HashMap::with_capacity(len))
std::mem::replace(&mut *queue, HashMap::with_capacity(len))
}
pub async fn take_hashset<T>(queue: &Mutex<HashSet<T>>) -> HashSet<T> {
let mut queue = queue.lock().await;
let len = queue.len();
std::mem::replace(&mut queue, HashSet::with_capacity(len))
std::mem::replace(&mut *queue, HashSet::with_capacity(len))
}
pub async fn index(
@@ -100,7 +100,7 @@ impl AuthQueue {
metadata.platform,
metadata.user_agent,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
@@ -112,7 +112,7 @@ impl AuthQueue {
WHERE refresh_expires <= NOW()
"
)
.fetch(&mut *transaction)
.fetch(&mut transaction)
.map_ok(|x| (DBSessionId(x.id), x.session, DBUserId(x.user_id)))
.try_collect::<Vec<(DBSessionId, String, DBUserId)>>()
.await?;
@@ -143,7 +143,7 @@ impl AuthQueue {
&ids[..],
Utc::now(),
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
update_oauth_access_token_last_used(
@@ -162,7 +162,7 @@ impl AuthQueue {
async fn update_oauth_access_token_last_used(
oauth_access_token_queue: HashSet<DBOAuthAccessTokenId>,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<(), DatabaseError> {
let ids = oauth_access_token_queue.iter().map(|id| id.0).collect_vec();
sqlx::query!(
@@ -175,7 +175,7 @@ async fn update_oauth_access_token_last_used(
&ids[..],
Utc::now()
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
Ok(())
}

View File

@@ -1,4 +1,5 @@
use crate::auth::get_user_from_headers;
use crate::database::PgPool;
use crate::database::redis::RedisPool;
use crate::models::analytics::{PageView, Playtime};
use crate::models::pats::Scopes;
@@ -10,7 +11,6 @@ use crate::util::env::parse_strings_from_var;
use actix_web::{HttpRequest, HttpResponse};
use actix_web::{post, web};
use serde::Deserialize;
use sqlx::PgPool;
use std::collections::HashMap;
use std::net::Ipv4Addr;
use std::sync::Arc;

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;

View File

@@ -1,4 +1,5 @@
use crate::auth::checks::{is_visible_project, is_visible_version};
use crate::database::PgPool;
use crate::database::models::legacy_loader_fields::MinecraftGameVersion;
use crate::database::models::loader_fields::Loader;
use crate::database::models::project_item::ProjectQueryResult;
@@ -12,7 +13,6 @@ use crate::queue::session::AuthQueue;
use crate::routes::ApiError;
use crate::{auth::get_user_from_headers, database};
use actix_web::{HttpRequest, HttpResponse, get, route, web};
use sqlx::PgPool;
use std::collections::HashSet;
use yaserde::YaSerialize;

View File

@@ -105,11 +105,11 @@ pub enum ApiError {
Env(#[from] dotenvy::Error),
#[error("Error while uploading file: {0}")]
FileHosting(#[from] FileHostingError),
#[error("Database error: {0}")]
#[error("database error")]
Database(#[from] crate::database::models::DatabaseError),
#[error("SQLx database error: {0}")]
#[error("Postgres database error")]
SqlxDatabase(#[from] sqlx::Error),
#[error("Redis database error: {0}")]
#[error("redis database error")]
RedisDatabase(#[from] redis::RedisError),
#[error("Clickhouse error: {0}")]
Clickhouse(#[from] clickhouse::error::Error),
@@ -125,7 +125,7 @@ pub enum ApiError {
Validation(String),
#[error("Search error: {0}")]
Search(#[from] meilisearch_sdk::errors::Error),
#[error("Indexing error: {0}")]
#[error("search indexing error")]
Indexing(#[from] crate::search::indexing::IndexingError),
#[error("Payments error: {0}")]
Payments(String),

View File

@@ -1,8 +1,8 @@
use std::collections::HashMap;
use crate::database::PgPool;
use actix_web::{HttpRequest, HttpResponse, get, web};
use serde::{Deserialize, Serialize};
use sqlx::PgPool;
use crate::auth::checks::{filter_visible_versions, is_visible_project};
use crate::auth::get_user_from_headers;

View File

@@ -1,4 +1,5 @@
use super::ApiError;
use crate::database::PgPool;
use crate::models::projects::Project;
use crate::models::v2::projects::LegacyProject;
use crate::queue::session::AuthQueue;
@@ -6,7 +7,6 @@ use crate::routes::internal;
use crate::{database::redis::RedisPool, routes::v2_reroute};
use actix_web::{HttpRequest, HttpResponse, get, web};
use serde::Deserialize;
use sqlx::PgPool;
pub fn config(cfg: &mut web::ServiceConfig) {
cfg.service(web::scope("moderation").service(get_projects));

View File

@@ -1,3 +1,4 @@
use crate::database::PgPool;
use crate::database::redis::RedisPool;
use crate::models::ids::NotificationId;
use crate::models::notifications::Notification;
@@ -8,7 +9,6 @@ use crate::routes::v2_reroute;
use crate::routes::v3;
use actix_web::{HttpRequest, HttpResponse, delete, get, patch, web};
use serde::{Deserialize, Serialize};
use sqlx::PgPool;
pub fn config(cfg: &mut web::ServiceConfig) {
cfg.service(notifications_get);

View File

@@ -1,3 +1,4 @@
use crate::database::PgPool;
use crate::database::models::version_item;
use crate::database::redis::RedisPool;
use crate::file_hosting::FileHost;
@@ -16,7 +17,6 @@ use actix_web::web::Data;
use actix_web::{HttpRequest, HttpResponse, post};
use serde::{Deserialize, Serialize};
use serde_json::json;
use sqlx::postgres::PgPool;
use std::collections::HashMap;
use std::sync::Arc;

View File

@@ -1,3 +1,4 @@
use crate::database::PgPool;
use crate::database::models::categories::LinkPlatform;
use crate::database::models::{project_item, version_item};
use crate::database::redis::RedisPool;
@@ -18,7 +19,6 @@ use crate::search::{
};
use actix_web::{HttpRequest, HttpResponse, delete, get, patch, post, web};
use serde::{Deserialize, Serialize};
use sqlx::PgPool;
use std::collections::HashMap;
use std::sync::Arc;
use validator::Validate;

View File

@@ -1,3 +1,4 @@
use crate::database::PgPool;
use crate::database::redis::RedisPool;
use crate::models::reports::Report;
use crate::models::v2::reports::LegacyReport;
@@ -5,7 +6,6 @@ use crate::queue::session::AuthQueue;
use crate::routes::{ApiError, v2_reroute, v3};
use actix_web::{HttpRequest, HttpResponse, delete, get, patch, post, web};
use serde::Deserialize;
use sqlx::PgPool;
use validator::Validate;
pub fn config(cfg: &mut web::ServiceConfig) {

View File

@@ -1,9 +1,9 @@
use crate::database::PgPool;
use crate::routes::{
ApiError, v2_reroute,
v3::{self, statistics::V3Stats},
};
use actix_web::{HttpResponse, get, web};
use sqlx::PgPool;
pub fn config(cfg: &mut web::ServiceConfig) {
cfg.service(get_stats);

View File

@@ -1,6 +1,7 @@
use std::collections::HashMap;
use super::ApiError;
use crate::database::PgPool;
use crate::database::models::loader_fields::LoaderFieldEnumValue;
use crate::database::redis::RedisPool;
use crate::models::v2::projects::LegacySideType;
@@ -10,7 +11,6 @@ use crate::routes::{v2_reroute, v3};
use actix_web::{HttpResponse, get, web};
use chrono::{DateTime, Utc};
use itertools::Itertools;
use sqlx::PgPool;
pub fn config(cfg: &mut web::ServiceConfig) {
cfg.service(

View File

@@ -1,3 +1,4 @@
use crate::database::PgPool;
use crate::database::redis::RedisPool;
use crate::models::ids::TeamId;
use crate::models::teams::{
@@ -10,7 +11,6 @@ use actix_web::{HttpRequest, HttpResponse, delete, get, patch, post, web};
use ariadne::ids::UserId;
use rust_decimal::Decimal;
use serde::{Deserialize, Serialize};
use sqlx::PgPool;
pub fn config(cfg: &mut web::ServiceConfig) {
cfg.service(teams_get);

View File

@@ -1,5 +1,6 @@
use std::sync::Arc;
use crate::database::PgPool;
use crate::database::redis::RedisPool;
use crate::file_hosting::FileHost;
use crate::models::ids::{ThreadId, ThreadMessageId};
@@ -9,7 +10,6 @@ use crate::queue::session::AuthQueue;
use crate::routes::{ApiError, v2_reroute, v3};
use actix_web::{HttpRequest, HttpResponse, delete, get, post, web};
use serde::Deserialize;
use sqlx::PgPool;
pub fn config(cfg: &mut web::ServiceConfig) {
cfg.service(

View File

@@ -1,3 +1,4 @@
use crate::database::PgPool;
use crate::database::redis::RedisPool;
use crate::file_hosting::FileHost;
use crate::models::notifications::Notification;
@@ -10,7 +11,6 @@ use crate::queue::session::AuthQueue;
use crate::routes::{ApiError, v2_reroute, v3};
use actix_web::{HttpRequest, HttpResponse, delete, get, patch, web};
use serde::{Deserialize, Serialize};
use sqlx::PgPool;
use std::sync::Arc;
use validator::Validate;

View File

@@ -1,3 +1,4 @@
use crate::database::PgPool;
use crate::database::models::loader_fields::VersionField;
use crate::database::models::{project_item, version_item};
use crate::database::redis::RedisPool;
@@ -18,7 +19,6 @@ use actix_web::web::Data;
use actix_web::{HttpRequest, HttpResponse, post, web};
use serde::{Deserialize, Serialize};
use serde_json::json;
use sqlx::postgres::PgPool;
use std::collections::HashMap;
use std::sync::Arc;
use validator::Validate;

View File

@@ -1,4 +1,5 @@
use super::ApiError;
use crate::database::PgPool;
use crate::database::ReadOnlyPgPool;
use crate::database::redis::RedisPool;
use crate::models::projects::{Project, Version, VersionType};
@@ -8,7 +9,6 @@ use crate::routes::v3::version_file::HashQuery;
use crate::routes::{v2_reroute, v3};
use actix_web::{HttpRequest, HttpResponse, delete, get, post, web};
use serde::{Deserialize, Serialize};
use sqlx::PgPool;
use std::collections::HashMap;
pub fn config(cfg: &mut web::ServiceConfig) {

View File

@@ -1,6 +1,7 @@
use std::collections::HashMap;
use super::ApiError;
use crate::database::PgPool;
use crate::database::redis::RedisPool;
use crate::models;
use crate::models::ids::VersionId;
@@ -13,7 +14,6 @@ use crate::routes::{v2_reroute, v3};
use crate::search::SearchConfig;
use actix_web::{HttpRequest, HttpResponse, delete, get, patch, web};
use serde::{Deserialize, Serialize};
use sqlx::PgPool;
use validator::Validate;
pub fn config(cfg: &mut web::ServiceConfig) {

View File

@@ -11,13 +11,13 @@ mod old;
use std::num::NonZeroU64;
use crate::database::PgPool;
use actix_web::{HttpRequest, post, web};
use chrono::{DateTime, TimeDelta, Utc};
use eyre::eyre;
use futures::StreamExt;
use rust_decimal::Decimal;
use serde::{Deserialize, Serialize};
use sqlx::PgPool;
use crate::{
auth::{AuthenticationError, get_user_from_headers},

View File

@@ -2,6 +2,7 @@
use super::ApiError;
use crate::database;
use crate::database::PgPool;
use crate::database::redis::RedisPool;
use crate::models::teams::ProjectPermissions;
use crate::{
@@ -15,7 +16,6 @@ use ariadne::ids::base62_impl::to_base62;
use chrono::{DateTime, Duration, Utc};
use eyre::eyre;
use serde::{Deserialize, Serialize};
use sqlx::PgPool;
use sqlx::postgres::types::PgInterval;
use std::collections::HashMap;
use std::convert::TryInto;

View File

@@ -1,5 +1,6 @@
use crate::auth::checks::is_visible_collection;
use crate::auth::{filter_visible_collections, get_user_from_headers};
use crate::database::PgPool;
use crate::database::models::{
collection_item, generate_collection_id, project_item,
};
@@ -24,7 +25,6 @@ use chrono::Utc;
use eyre::eyre;
use itertools::Itertools;
use serde::{Deserialize, Serialize};
use sqlx::PgPool;
use std::sync::Arc;
use validator::Validate;
@@ -96,7 +96,7 @@ pub async fn collection_create(
let initial_project_ids = project_item::DBProject::get_many(
&collection_create_data.projects,
&mut *transaction,
&mut transaction,
&redis,
)
.await?
@@ -274,7 +274,7 @@ pub async fn collection_edit(
name.trim(),
id as database::models::ids::DBCollectionId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
@@ -288,7 +288,7 @@ pub async fn collection_edit(
description.as_ref(),
id as database::models::ids::DBCollectionId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
@@ -311,7 +311,7 @@ pub async fn collection_edit(
status.to_string(),
id as database::models::ids::DBCollectionId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
@@ -324,7 +324,7 @@ pub async fn collection_edit(
",
collection_item.id as database::models::ids::DBCollectionId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
let collection_item_ids = new_project_ids
@@ -352,7 +352,7 @@ pub async fn collection_edit(
&collection_item_ids[..],
&validated_project_ids[..],
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
sqlx::query!(
@@ -363,7 +363,7 @@ pub async fn collection_edit(
",
collection_item.id as database::models::ids::DBCollectionId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
@@ -458,7 +458,7 @@ pub async fn collection_icon_edit(
upload_result.color.map(|x| x as i32),
collection_item.id as database::models::ids::DBCollectionId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
transaction.commit().await?;
@@ -517,7 +517,7 @@ pub async fn delete_collection_icon(
",
collection_item.id as database::models::ids::DBCollectionId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
transaction.commit().await?;

View File

@@ -1,4 +1,5 @@
use crate::auth::get_user_from_headers;
use crate::database::PgPool;
use crate::database::models::friend_item::DBFriend;
use crate::database::models::{DBUser, DBUserId};
use crate::database::redis::RedisPool;
@@ -15,7 +16,6 @@ use crate::sync::status::get_user_status;
use actix_web::{HttpRequest, HttpResponse, delete, get, post, web};
use ariadne::networking::message::ServerToClientMessage;
use chrono::Utc;
use sqlx::PgPool;
pub fn config(cfg: &mut web::ServiceConfig) {
cfg.service(add_friend);

View File

@@ -4,6 +4,7 @@ use super::threads::is_authorized_thread;
use crate::auth::checks::{is_team_member_project, is_team_member_version};
use crate::auth::get_user_from_headers;
use crate::database;
use crate::database::PgPool;
use crate::database::models::{
project_item, report_item, thread_item, version_item,
};
@@ -17,7 +18,6 @@ use crate::util::img::upload_image_optimized;
use crate::util::routes::read_limited_from_payload;
use actix_web::{HttpRequest, HttpResponse, web};
use serde::{Deserialize, Serialize};
use sqlx::PgPool;
pub fn config(cfg: &mut web::ServiceConfig) {
cfg.route("image", web::post().to(images_add));

View File

@@ -1,3 +1,4 @@
use crate::database::PgPool;
use crate::{
auth::get_user_from_headers,
database::redis::RedisPool,
@@ -6,7 +7,6 @@ use crate::{
routes::ApiError,
};
use actix_web::{HttpRequest, web};
use sqlx::PgPool;
pub fn config(cfg: &mut web::ServiceConfig) {
cfg.service(

View File

@@ -1,5 +1,6 @@
use crate::auth::get_user_from_headers;
use crate::database;
use crate::database::PgPool;
use crate::database::redis::RedisPool;
use crate::models::ids::NotificationId;
use crate::models::notifications::Notification;
@@ -8,7 +9,6 @@ use crate::queue::session::AuthQueue;
use crate::routes::ApiError;
use actix_web::{HttpRequest, HttpResponse, web};
use serde::{Deserialize, Serialize};
use sqlx::PgPool;
pub fn config(cfg: &mut web::ServiceConfig) {
cfg.route("notifications", web::get().to(notifications_get));

View File

@@ -1,6 +1,7 @@
use std::{collections::HashSet, fmt::Display, sync::Arc};
use super::ApiError;
use crate::database::{PgPool, PgTransaction};
use crate::file_hosting::FileHostPublicity;
use crate::models::ids::OAuthClientId;
use crate::util::img::{delete_old_images, upload_image_optimized};
@@ -38,7 +39,6 @@ use itertools::Itertools;
use rand::{Rng, SeedableRng, distributions::Alphanumeric};
use rand_chacha::ChaCha20Rng;
use serde::{Deserialize, Serialize};
use sqlx::PgPool;
use validator::Validate;
pub fn config(cfg: &mut web::ServiceConfig) {
@@ -325,7 +325,7 @@ pub async fn oauth_client_edit(
let mut transaction = pool.begin().await?;
updated_client
.update_editable_fields(&mut *transaction)
.update_editable_fields(&mut transaction)
.await?;
if let Some(redirects) = redirect_uris {
@@ -410,7 +410,7 @@ pub async fn oauth_client_icon_edit(
editable_client.raw_icon_url = Some(upload_result.raw_url);
editable_client
.update_editable_fields(&mut *transaction)
.update_editable_fields(&mut transaction)
.await?;
transaction.commit().await?;
@@ -461,7 +461,7 @@ pub async fn oauth_client_icon_delete(
editable_client.raw_icon_url = None;
editable_client
.update_editable_fields(&mut *transaction)
.update_editable_fields(&mut transaction)
.await?;
transaction.commit().await?;
@@ -536,7 +536,7 @@ fn generate_oauth_client_secret() -> String {
async fn create_redirect_uris(
uri_strings: impl IntoIterator<Item = impl Display>,
client_id: DBOAuthClientId,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<Vec<DBOAuthRedirectUri>, DatabaseError> {
let mut redirect_uris = vec![];
for uri in uri_strings.into_iter() {
@@ -554,7 +554,7 @@ async fn create_redirect_uris(
async fn edit_redirects(
redirects: Vec<String>,
existing_client: &DBOAuthClient,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<(), DatabaseError> {
let updated_redirects: HashSet<String> = redirects.into_iter().collect();
let original_redirects: HashSet<String> = existing_client
@@ -569,14 +569,14 @@ async fn edit_redirects(
&mut *transaction,
)
.await?;
DBOAuthClient::insert_redirect_uris(&redirects_to_add, &mut **transaction)
DBOAuthClient::insert_redirect_uris(&redirects_to_add, &mut *transaction)
.await?;
let mut redirects_to_remove = existing_client.redirect_uris.clone();
redirects_to_remove.retain(|r| !updated_redirects.contains(&r.uri));
DBOAuthClient::remove_redirect_uris(
redirects_to_remove.iter().map(|r| r.id),
&mut **transaction,
&mut *transaction,
)
.await?;

View File

@@ -4,6 +4,7 @@ use std::sync::Arc;
use super::ApiError;
use crate::auth::checks::is_visible_organization;
use crate::auth::{filter_visible_projects, get_user_from_headers};
use crate::database::PgPool;
use crate::database::models::team_item::DBTeamMember;
use crate::database::models::{
DBOrganization, generate_organization_id, team_item,
@@ -25,7 +26,6 @@ use ariadne::ids::UserId;
use futures::TryStreamExt;
use rust_decimal::Decimal;
use serde::{Deserialize, Serialize};
use sqlx::PgPool;
use validator::Validate;
pub fn config(cfg: &mut web::ServiceConfig) {
@@ -158,7 +158,7 @@ pub async fn organization_create(
organization_strings.push(new_organization.slug.clone());
let results = DBOrganization::get_many(
&organization_strings,
&mut *transaction,
&mut transaction,
&redis,
)
.await?;
@@ -454,7 +454,7 @@ pub async fn organizations_edit(
description,
id as database::models::ids::DBOrganizationId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
@@ -474,7 +474,7 @@ pub async fn organizations_edit(
name,
id as database::models::ids::DBOrganizationId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
@@ -488,7 +488,7 @@ pub async fn organizations_edit(
let existing = DBOrganization::get(
&slug.to_lowercase(),
&mut *transaction,
&mut transaction,
&redis,
)
.await?;
@@ -513,7 +513,7 @@ pub async fn organizations_edit(
",
slug
)
.fetch_one(&mut *transaction)
.fetch_one(&mut transaction)
.await?;
if results.exists.unwrap_or(true) {
@@ -533,7 +533,7 @@ pub async fn organizations_edit(
Some(slug),
id as database::models::ids::DBOrganizationId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
@@ -640,7 +640,7 @@ pub async fn organization_delete(
",
organization.id as database::models::ids::DBOrganizationId
)
.fetch(&mut *transaction)
.fetch(&mut transaction)
.map_ok(|c| database::models::DBTeamId(c.id))
.try_collect::<Vec<_>>()
.await?;
@@ -797,7 +797,7 @@ pub async fn organization_projects_add(
organization.id as database::models::DBOrganizationId,
project_item.inner.id as database::models::ids::DBProjectId
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
// The former owner is no longer an owner (as it is now 'owned' by the organization, 'given' to them)
@@ -813,7 +813,7 @@ pub async fn organization_projects_add(
",
organization.team_id as database::models::ids::DBTeamId
)
.fetch_one(&mut *transaction)
.fetch_one(&mut transaction)
.await?;
let organization_owner_user_id =
database::models::ids::DBUserId(organization_owner_user_id.id);
@@ -826,7 +826,7 @@ pub async fn organization_projects_add(
project_item.inner.team_id as database::models::ids::DBTeamId,
organization_owner_user_id as database::models::ids::DBUserId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
transaction.commit().await?;
@@ -1004,7 +1004,7 @@ pub async fn organization_projects_remove(
new_owner.id as database::models::ids::DBTeamMemberId,
ProjectPermissions::all().bits() as i64
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
sqlx::query!(
@@ -1015,7 +1015,7 @@ pub async fn organization_projects_remove(
",
project_item.inner.id as database::models::ids::DBProjectId
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
transaction.commit().await?;
@@ -1144,7 +1144,7 @@ pub async fn organization_icon_edit(
upload_result.color.map(|x| x as i32),
organization_item.id as database::models::ids::DBOrganizationId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
transaction.commit().await?;
@@ -1227,7 +1227,7 @@ pub async fn delete_organization_icon(
",
organization_item.id as database::models::ids::DBOrganizationId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
transaction.commit().await?;

View File

@@ -1,5 +1,6 @@
use crate::auth::validate::get_user_record_from_bearer_token;
use crate::auth::{AuthenticationError, get_user_from_headers};
use crate::database::PgPool;
use crate::database::models::DBUserId;
use crate::database::models::{generate_payout_id, users_compliance};
use crate::database::redis::RedisPool;
@@ -21,7 +22,6 @@ use reqwest::Method;
use rust_decimal::Decimal;
use serde::{Deserialize, Serialize};
use sha2::Sha256;
use sqlx::PgPool;
use std::collections::HashMap;
use tokio_stream::StreamExt;
use tracing::error;
@@ -71,7 +71,7 @@ pub async fn post_compliance_form(
let mut txn = pool.begin().await?;
let maybe_compliance =
users_compliance::UserCompliance::get_by_user_id(&mut *txn, user_id)
users_compliance::UserCompliance::get_by_user_id(&mut txn, user_id)
.await?;
let mut compliance = match maybe_compliance {
@@ -125,7 +125,7 @@ pub async fn post_compliance_form(
compliance.form_type = Some(body.0.form_type);
compliance.last_checked = Utc::now() - COMPLIANCE_CHECK_DEBOUNCE;
compliance.upsert_partial(&mut *txn).await?;
compliance.upsert_partial(&mut txn).await?;
txn.commit().await?;
Ok(HttpResponse::Ok().json(toplevel))
@@ -250,7 +250,7 @@ pub async fn paypal_webhook(
webhook.resource.payout_item_id,
PayoutStatus::InTransit.as_str()
)
.fetch_optional(&mut *transaction)
.fetch_optional(&mut transaction)
.await?;
if let Some(result) = result {
@@ -268,7 +268,7 @@ pub async fn paypal_webhook(
.as_str(),
webhook.resource.payout_item_id
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
transaction.commit().await?;
@@ -294,7 +294,7 @@ pub async fn paypal_webhook(
PayoutStatus::Success.as_str(),
webhook.resource.payout_item_id
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
transaction.commit().await?;
}
@@ -361,7 +361,7 @@ pub async fn tremendous_webhook(
webhook.payload.resource.id,
PayoutStatus::InTransit.as_str()
)
.fetch_optional(&mut *transaction)
.fetch_optional(&mut transaction)
.await?;
if let Some(result) = result {
@@ -379,7 +379,7 @@ pub async fn tremendous_webhook(
.as_str(),
webhook.payload.resource.id
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
transaction.commit().await?;
@@ -405,7 +405,7 @@ pub async fn tremendous_webhook(
PayoutStatus::Success.as_str(),
webhook.payload.resource.id
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
transaction.commit().await?;
}
@@ -491,7 +491,7 @@ pub async fn create_payout(
",
user.id.0
)
.fetch_optional(&mut *transaction)
.fetch_optional(&mut transaction)
.await
.wrap_internal_err("failed to fetch user balance")?;
@@ -827,7 +827,7 @@ pub async fn cancel_payout(
PayoutStatus::Cancelling.as_str(),
platform_id
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
transaction.commit().await?;

View File

@@ -1,5 +1,7 @@
use super::version_creation::{InitialVersionData, try_create_version_fields};
use crate::auth::{AuthenticationError, get_user_from_headers};
use crate::database::PgPool;
use crate::database::PgTransaction;
use crate::database::models::loader_fields::{
Loader, LoaderField, LoaderFieldEnumValue,
};
@@ -36,7 +38,6 @@ use image::ImageError;
use itertools::Itertools;
use rust_decimal::Decimal;
use serde::{Deserialize, Serialize};
use sqlx::postgres::PgPool;
use std::collections::HashMap;
use std::sync::Arc;
use thiserror::Error;
@@ -405,7 +406,7 @@ Project Creation Steps:
async fn project_create_inner(
req: HttpRequest,
payload: &mut Multipart,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
file_host: &dyn FileHost,
uploaded_files: &mut Vec<UploadedFile>,
pool: &PgPool,
@@ -429,7 +430,7 @@ async fn project_create_inner(
}
let all_loaders =
models::loader_fields::Loader::list(&mut **transaction, redis).await?;
models::loader_fields::Loader::list(&mut *transaction, redis).await?;
let project_create_data: ProjectCreateData;
let mut versions;
@@ -484,7 +485,7 @@ async fn project_create_inner(
",
slug_project_id as models::ids::DBProjectId
)
.fetch_one(&mut **transaction)
.fetch_one(&mut *transaction)
.await
.map_err(|e| CreateError::DatabaseError(e.into()))?;
@@ -500,7 +501,7 @@ async fn project_create_inner(
",
create_data.slug
)
.fetch_one(&mut **transaction)
.fetch_one(&mut *transaction)
.await
.map_err(|e| CreateError::DatabaseError(e.into()))?;
@@ -695,7 +696,7 @@ async fn project_create_inner(
for category in &project_create_data.categories {
let ids = models::categories::Category::get_ids(
category,
&mut **transaction,
&mut *transaction,
)
.await?;
if ids.is_empty() {
@@ -712,7 +713,7 @@ async fn project_create_inner(
for category in &project_create_data.additional_categories {
let ids = models::categories::Category::get_ids(
category,
&mut **transaction,
&mut *transaction,
)
.await?;
if ids.is_empty() {
@@ -798,12 +799,12 @@ async fn project_create_inner(
let mut link_urls = vec![];
let link_platforms =
models::categories::LinkPlatform::list(&mut **transaction, redis)
models::categories::LinkPlatform::list(&mut *transaction, redis)
.await?;
for (platform, url) in &project_create_data.link_urls {
let platform_id = models::categories::LinkPlatform::get_id(
platform,
&mut **transaction,
&mut *transaction,
)
.await?
.ok_or_else(|| {
@@ -875,7 +876,7 @@ async fn project_create_inner(
for image_id in project_create_data.uploaded_images {
if let Some(db_image) = image_item::DBImage::get(
image_id.into(),
&mut **transaction,
&mut *transaction,
redis,
)
.await?
@@ -898,7 +899,7 @@ async fn project_create_inner(
id as models::ids::DBProjectId,
image_id.0 as i64
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
image_item::DBImage::clear_cache(image.id.into(), redis)
@@ -925,7 +926,7 @@ async fn project_create_inner(
.flat_map(|v| v.loaders.clone())
.unique()
.collect::<Vec<_>>();
let (project_types, games) = Loader::list(&mut **transaction, redis)
let (project_types, games) = Loader::list(&mut *transaction, redis)
.await?
.into_iter()
.fold(
@@ -997,7 +998,7 @@ async fn create_initial_version(
project_id: ProjectId,
author: UserId,
all_loaders: &[models::loader_fields::Loader],
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
redis: &RedisPool,
) -> Result<models::version_item::VersionBuilder, CreateError> {
if version_data.project_id.is_some() {
@@ -1027,11 +1028,11 @@ async fn create_initial_version(
.collect::<Result<Vec<models::LoaderId>, CreateError>>()?;
let loader_fields =
LoaderField::get_fields(&loaders, &mut **transaction, redis).await?;
LoaderField::get_fields(&loaders, &mut *transaction, redis).await?;
let mut loader_field_enum_values =
LoaderFieldEnumValue::list_many_loader_fields(
&loader_fields,
&mut **transaction,
&mut *transaction,
redis,
)
.await?;

View File

@@ -11,6 +11,7 @@ use crate::database::models::{
};
use crate::database::redis::RedisPool;
use crate::database::{self, models as db_models};
use crate::database::{PgPool, PgTransaction};
use crate::file_hosting::{FileHost, FileHostPublicity};
use crate::models;
use crate::models::ids::{ProjectId, VersionId};
@@ -40,7 +41,6 @@ use futures::TryStreamExt;
use itertools::Itertools;
use serde::{Deserialize, Serialize};
use serde_json::json;
use sqlx::PgPool;
use validator::Validate;
pub fn config(cfg: &mut web::ServiceConfig) {
@@ -328,7 +328,7 @@ pub async fn project_edit(
name.trim(),
id as db_ids::DBProjectId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
@@ -349,7 +349,7 @@ pub async fn project_edit(
summary,
id as db_ids::DBProjectId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
@@ -404,7 +404,7 @@ pub async fn project_edit(
",
id as db_ids::DBProjectId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
moderation_queue
@@ -421,7 +421,7 @@ pub async fn project_edit(
",
id as db_ids::DBProjectId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
@@ -447,7 +447,7 @@ pub async fn project_edit(
",
id as db_ids::DBProjectId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
@@ -484,7 +484,7 @@ pub async fn project_edit(
",
project_item.inner.team_id as db_ids::DBTeamId
)
.fetch(&mut *transaction)
.fetch(&mut transaction)
.map_ok(|c| db_models::DBUserId(c.id))
.try_collect::<Vec<_>>()
.await?;
@@ -537,7 +537,7 @@ pub async fn project_edit(
status.as_str(),
id as db_ids::DBProjectId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
@@ -567,7 +567,7 @@ pub async fn project_edit(
requested_status.map(|x| x.as_str()),
id as db_ids::DBProjectId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
@@ -580,7 +580,7 @@ pub async fn project_edit(
",
id as db_ids::DBProjectId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
@@ -592,7 +592,7 @@ pub async fn project_edit(
",
id as db_ids::DBProjectId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
}
@@ -636,7 +636,7 @@ pub async fn project_edit(
license_url.as_deref(),
id as db_ids::DBProjectId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
@@ -650,7 +650,7 @@ pub async fn project_edit(
let existing = db_models::DBProject::get(
&slug.to_lowercase(),
&mut *transaction,
&mut transaction,
&redis,
)
.await?;
@@ -674,7 +674,7 @@ pub async fn project_edit(
",
slug
)
.fetch_one(&mut *transaction)
.fetch_one(&mut transaction)
.await?;
if results.exists.unwrap_or(true) {
@@ -693,7 +693,7 @@ pub async fn project_edit(
Some(slug),
id as db_ids::DBProjectId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
@@ -726,7 +726,7 @@ pub async fn project_edit(
license,
id as db_ids::DBProjectId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
@@ -752,14 +752,14 @@ pub async fn project_edit(
id as db_ids::DBProjectId,
&ids_to_delete
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
for (platform, url) in links {
if let Some(url) = url {
let platform_id = db_models::categories::LinkPlatform::get_id(
platform,
&mut *transaction,
&mut transaction,
)
.await?
.ok_or_else(|| {
@@ -777,7 +777,7 @@ pub async fn project_edit(
platform_id as db_ids::LinkPlatformId,
url
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
}
@@ -802,7 +802,7 @@ pub async fn project_edit(
moderation_message.as_deref(),
id as db_ids::DBProjectId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
@@ -827,7 +827,7 @@ pub async fn project_edit(
moderation_message_body.as_deref(),
id as db_ids::DBProjectId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
@@ -848,7 +848,7 @@ pub async fn project_edit(
description,
id as db_ids::DBProjectId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
@@ -880,7 +880,7 @@ pub async fn project_edit(
monetization_status.as_str(),
id as db_ids::DBProjectId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
@@ -903,7 +903,7 @@ pub async fn project_edit(
side_types_migration_review_status.as_str(),
id as db_ids::DBProjectId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
@@ -993,7 +993,7 @@ pub async fn edit_project_categories(
perms: &ProjectPermissions,
project_id: db_ids::DBProjectId,
is_additional: bool,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<(), ApiError> {
if !perms.contains(ProjectPermissions::EDIT_DETAILS) {
let additional_str = if is_additional { "additional " } else { "" };
@@ -1006,7 +1006,7 @@ pub async fn edit_project_categories(
for category in categories {
let category_ids = db_models::categories::Category::get_ids(
category,
&mut **transaction,
&mut *transaction,
)
.await?;
// TODO: We should filter out categories that don't match the project type of any of the versions
@@ -1373,7 +1373,7 @@ pub async fn projects_edit(
project.inner.id as db_ids::DBProjectId,
&ids_to_delete
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
for (platform, url) in links {
@@ -1397,7 +1397,7 @@ pub async fn projects_edit(
platform_id as db_ids::LinkPlatformId,
url
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
}
@@ -1424,7 +1424,7 @@ pub async fn bulk_edit_project_categories(
bulk_changes: CategoryChanges<'_>,
max_num_categories: usize,
is_additional: bool,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
transaction: &mut PgTransaction<'_>,
) -> Result<(), ApiError> {
let mut set_categories =
if let Some(categories) = bulk_changes.categories.clone() {
@@ -1461,7 +1461,7 @@ pub async fn bulk_edit_project_categories(
project_id as db_ids::DBProjectId,
is_additional
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
let mut mod_categories = Vec::new();
@@ -1594,7 +1594,7 @@ pub async fn project_icon_edit(
upload_result.color.map(|x| x as i32),
project_item.inner.id as db_ids::DBProjectId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
transaction.commit().await?;
@@ -1684,7 +1684,7 @@ pub async fn delete_project_icon(
",
project_item.inner.id as db_ids::DBProjectId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
transaction.commit().await?;
@@ -1823,7 +1823,7 @@ pub async fn add_gallery_item(
project_item.inner.id as db_ids::DBProjectId,
false,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
@@ -1969,7 +1969,7 @@ pub async fn edit_gallery_item(
project_item.inner.id as db_ids::DBProjectId,
false,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
@@ -1982,7 +1982,7 @@ pub async fn edit_gallery_item(
result.id,
featured
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
if let Some(name) = item.name {
@@ -1995,7 +1995,7 @@ pub async fn edit_gallery_item(
result.id,
name
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
if let Some(description) = item.description {
@@ -2008,7 +2008,7 @@ pub async fn edit_gallery_item(
result.id,
description
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
if let Some(ordering) = item.ordering {
@@ -2021,7 +2021,7 @@ pub async fn edit_gallery_item(
result.id,
ordering
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
@@ -2137,7 +2137,7 @@ pub async fn delete_gallery_item(
",
item.id
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
transaction.commit().await?;
@@ -2228,7 +2228,7 @@ pub async fn project_delete(
",
project.inner.id as db_ids::DBProjectId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
let result = db_models::DBProject::remove(
@@ -2313,7 +2313,7 @@ pub async fn project_follow(
",
project_id as db_ids::DBProjectId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
sqlx::query!(
@@ -2324,7 +2324,7 @@ pub async fn project_follow(
user_id as db_ids::DBUserId,
project_id as db_ids::DBProjectId
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
transaction.commit().await?;
@@ -2389,7 +2389,7 @@ pub async fn project_unfollow(
",
project_id as db_ids::DBProjectId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
sqlx::query!(
@@ -2400,7 +2400,7 @@ pub async fn project_unfollow(
user_id as db_ids::DBUserId,
project_id as db_ids::DBProjectId
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
transaction.commit().await?;

View File

@@ -1,5 +1,6 @@
use crate::auth::{check_is_moderator_from_headers, get_user_from_headers};
use crate::database;
use crate::database::PgPool;
use crate::database::models::image_item;
use crate::database::models::notification_item::NotificationBuilder;
use crate::database::models::thread_item::{
@@ -22,7 +23,6 @@ use ariadne::ids::UserId;
use ariadne::ids::base62_impl::parse_base62;
use chrono::Utc;
use serde::Deserialize;
use sqlx::PgPool;
use validator::Validate;
pub fn config(cfg: &mut web::ServiceConfig) {
@@ -71,7 +71,7 @@ pub async fn report_create(
crate::database::models::generate_report_id(&mut transaction).await?;
let report_type = crate::database::models::categories::ReportType::get_id(
&new_report.report_type,
&mut *transaction,
&mut transaction,
)
.await?
.ok_or_else(|| {
@@ -102,7 +102,7 @@ pub async fn report_create(
"SELECT EXISTS(SELECT 1 FROM mods WHERE id = $1)",
project_id.0 as i64
)
.fetch_one(&mut *transaction)
.fetch_one(&mut transaction)
.await?;
if !result.exists.unwrap_or(false) {
@@ -122,7 +122,7 @@ pub async fn report_create(
"SELECT EXISTS(SELECT 1 FROM versions WHERE id = $1)",
version_id.0 as i64
)
.fetch_one(&mut *transaction)
.fetch_one(&mut transaction)
.await?;
if !result.exists.unwrap_or(false) {
@@ -141,7 +141,7 @@ pub async fn report_create(
"SELECT EXISTS(SELECT 1 FROM users WHERE id = $1)",
user_id.0 as i64
)
.fetch_one(&mut *transaction)
.fetch_one(&mut transaction)
.await?;
if !result.exists.unwrap_or(false) {
@@ -165,7 +165,7 @@ pub async fn report_create(
for image_id in new_report.uploaded_images {
if let Some(db_image) =
image_item::DBImage::get(image_id.into(), &mut *transaction, &redis)
image_item::DBImage::get(image_id.into(), &mut transaction, &redis)
.await?
{
let image: Image = db_image.into();
@@ -186,7 +186,7 @@ pub async fn report_create(
id.0 as i64,
image_id.0 as i64
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
image_item::DBImage::clear_cache(image.id.into(), &redis).await?;
@@ -442,7 +442,7 @@ pub async fn report_edit(
edit_body,
id as crate::database::models::ids::DBReportId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}
@@ -483,7 +483,7 @@ pub async fn report_edit(
edit_closed,
id as crate::database::models::ids::DBReportId,
)
.execute(&mut *transaction)
.execute(&mut transaction)
.await?;
}

View File

@@ -7,6 +7,7 @@ use crate::database::models::{
generate_shared_instance_version_id,
};
use crate::database::redis::RedisPool;
use crate::database::{PgPool, PgTransaction};
use crate::file_hosting::{FileHost, FileHostPublicity};
use crate::models::ids::{SharedInstanceId, SharedInstanceVersionId};
use crate::models::pats::Scopes;
@@ -24,7 +25,6 @@ use bytes::BytesMut;
use chrono::Utc;
use futures_util::StreamExt;
use hex::FromHex;
use sqlx::{PgPool, Postgres, Transaction};
use std::sync::Arc;
const MAX_FILE_SIZE: usize = 500 * 1024 * 1024;
@@ -100,7 +100,7 @@ async fn shared_instance_version_create_inner(
file_host: &dyn FileHost,
instance_id: DBSharedInstanceId,
session_queue: &AuthQueue,
transaction: &mut Transaction<'_, Postgres>,
transaction: &mut PgTransaction<'_>,
uploaded_files: &mut Vec<UploadedFile>,
) -> Result<HttpResponse, ApiError> {
let user = get_user_from_headers(
@@ -192,7 +192,7 @@ async fn shared_instance_version_create_inner(
new_version.id as DBSharedInstanceVersionId,
instance_id as DBSharedInstanceId,
)
.execute(&mut **transaction)
.execute(&mut *transaction)
.await?;
let version: SharedInstanceVersion = new_version.into();

Some files were not shown because too many files have changed in this diff Show More