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:
@@ -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,
|
||||
};
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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?;
|
||||
|
||||
@@ -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(())
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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())
|
||||
}
|
||||
|
||||
@@ -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(())
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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(())
|
||||
|
||||
@@ -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};
|
||||
|
||||
|
||||
@@ -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 {
|
||||
",
|
||||
¬ification_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 {
|
||||
",
|
||||
¬ification_ids_parsed
|
||||
)
|
||||
.execute(&mut **transaction)
|
||||
.execute(&mut *transaction)
|
||||
.await?;
|
||||
|
||||
sqlx::query!(
|
||||
@@ -525,7 +526,7 @@ impl DBNotification {
|
||||
",
|
||||
¬ification_ids_parsed
|
||||
)
|
||||
.execute(&mut **transaction)
|
||||
.execute(&mut *transaction)
|
||||
.await?;
|
||||
|
||||
let affected_users = sqlx::query!(
|
||||
@@ -536,7 +537,7 @@ impl DBNotification {
|
||||
",
|
||||
¬ification_ids_parsed
|
||||
)
|
||||
.fetch(&mut **transaction)
|
||||
.fetch(&mut *transaction)
|
||||
.map_ok(|x| DBUserId(x.user_id))
|
||||
.try_collect::<Vec<_>>()
|
||||
.await?;
|
||||
|
||||
@@ -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!(
|
||||
"
|
||||
|
||||
@@ -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> {
|
||||
{
|
||||
|
||||
@@ -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?;
|
||||
|
||||
@@ -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!(
|
||||
"
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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!(
|
||||
"
|
||||
|
||||
@@ -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(()))
|
||||
|
||||
@@ -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(()))
|
||||
|
||||
@@ -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!(
|
||||
"
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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#"
|
||||
|
||||
@@ -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>,
|
||||
|
||||
@@ -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(()))
|
||||
|
||||
@@ -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(()))
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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?;
|
||||
|
||||
@@ -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(()))
|
||||
|
||||
@@ -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 {
|
||||
",
|
||||
¬ifications
|
||||
)
|
||||
.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(()))
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use crate::database::PgPool;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use sqlx::PgPool;
|
||||
|
||||
use crate::database::models::DBUserId;
|
||||
|
||||
|
||||
@@ -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![]);
|
||||
|
||||
@@ -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!(
|
||||
"
|
||||
|
||||
@@ -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(())
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user