Fixed query building and dice track
This commit is contained in:
@@ -10,6 +10,8 @@ use uuid::Uuid;
|
||||
use crate::api::auth::{AuthCredential, AuthorizationMiddleware};
|
||||
use crate::AppState;
|
||||
use crate::bot::commands::fun::roll::{format_roll, parse_dice};
|
||||
use crate::data::condition::Condition;
|
||||
use crate::data::{ExecutableQuery, Value};
|
||||
use crate::data::query::QueryBuilder;
|
||||
use crate::error::{Error, SirenResult};
|
||||
|
||||
@@ -95,22 +97,26 @@ struct QueryDiceTrack {
|
||||
}
|
||||
|
||||
impl QueryDiceTrack {
|
||||
pub async fn find() -> SirenResult<Vec<Self>> {
|
||||
let pool = crate::data::pool();
|
||||
let query = QueryBuilder::new(TABLE_NAME)
|
||||
// .where_condition(
|
||||
// Condition::and(
|
||||
// Condition::is_equal("guild_id", "$1"),
|
||||
// Condition::and(
|
||||
// Condition::is_equal("owner_id", "$2"),
|
||||
//
|
||||
// )
|
||||
// )
|
||||
// )
|
||||
.build();
|
||||
let items: Vec<QueryDiceTrack> = sqlx::query_as(&query.0).fetch_all(pool).await?;
|
||||
|
||||
Ok(items)
|
||||
pub async fn find(dice: &InsertDiceTrack) -> Option<Self> {
|
||||
QueryBuilder::new(TABLE_NAME)
|
||||
.where_condition(Condition::and(
|
||||
Condition::is_equal("guild_id", Value::BigInt(dice.guild_id)),
|
||||
Condition::and(
|
||||
Condition::is_equal("owner_id", Value::BigInt(dice.owner_id)),
|
||||
Condition::and(
|
||||
Condition::is_equal("dice", Value::Text(dice.dice.clone())),
|
||||
Condition::and(
|
||||
Condition::is_equal("user_id", Value::OptionalBigInt(dice.user_id)),
|
||||
Condition::and(
|
||||
Condition::is_equal("value", Value::OptionalInt(dice.value)),
|
||||
Condition::is_equal("operator", Value::OptionalText(dice.operator.clone())),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
))
|
||||
.fetch_optional()
|
||||
.await
|
||||
}
|
||||
}
|
||||
|
||||
@@ -168,7 +174,7 @@ pub async fn add_track_dice(
|
||||
|
||||
let dice = parse_dice(&payload.dice)?;
|
||||
|
||||
let dice = InsertDiceTrack {
|
||||
let insert_dice = InsertDiceTrack {
|
||||
guild_id: guild_id.get() as i64,
|
||||
owner_id: owner_id.get() as i64,
|
||||
dice: format_roll(dice.0, dice.1, dice.2),
|
||||
@@ -180,6 +186,14 @@ pub async fn add_track_dice(
|
||||
},
|
||||
};
|
||||
|
||||
let dice_track = dice.insert().await?;
|
||||
Ok(Json(dice_track))
|
||||
// Check for existing dice tracks
|
||||
let results = QueryDiceTrack::find(&insert_dice).await;
|
||||
|
||||
match results {
|
||||
Some(dice_track) => Ok(Json(dice_track)),
|
||||
None => {
|
||||
let dice_track = insert_dice.insert().await?;
|
||||
Ok(Json(dice_track))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user