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

@@ -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