* Changed a local var MAX to a const module level alias MAX_MESSAGES
+ Adding limiter to get_time_range
This commit is contained in:
parent
d55a8420ac
commit
feef6104c6
@ -21,6 +21,7 @@ pub struct Message {
|
|||||||
pub channel_id: UBigInt
|
pub channel_id: UBigInt
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const MAX_MESSAGES: u64 = 1000;
|
||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl FromDB<Message, (BigInt, UBigInt)> for Message {
|
impl FromDB<Message, (BigInt, UBigInt)> for Message {
|
||||||
type Row = Option<(UBigInt, BigInt, VarChar, UBigInt, UBigInt)>;
|
type Row = Option<(UBigInt, BigInt, VarChar, UBigInt, UBigInt)>;
|
||||||
@ -155,7 +156,7 @@ impl Message {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_time_range(p: &Pool, channel_id: UBigInt, start: BigInt, end: BigInt) -> Result<Response<Self>, SqlError> {
|
pub async fn get_time_range(p: &Pool, channel_id: UBigInt, start: BigInt, end: BigInt, limit: Option<u64>) -> Result<Response<Self>, SqlError> {
|
||||||
//! @returns on success : Set(Vec<Messages>)
|
//! @returns on success : Set(Vec<Messages>)
|
||||||
//! @returns on userfail: RestrictedInput(message)
|
//! @returns on userfail: RestrictedInput(message)
|
||||||
//! @returns on error : Err(SqlError)
|
//! @returns on error : Err(SqlError)
|
||||||
@ -165,13 +166,25 @@ impl Message {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
let conn = p.get_conn().await?;
|
let conn = p.get_conn().await?;
|
||||||
let q = "SELECT id, time, content, author_id FROM messages WHERE channel_id = :channel AND time >= :start AND time < :end";
|
let limit = if let Some(limit) = limit {
|
||||||
|
match limit {
|
||||||
|
1 ..= MAX_MESSAGES => limit,
|
||||||
|
_ => MAX_MESSAGES
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
MAX_MESSAGES
|
||||||
|
};
|
||||||
|
|
||||||
|
let q = "SELECT id, time, content, author_id FROM messages
|
||||||
|
WHERE channel_id = :channel AND time >= :start AND time < :end
|
||||||
|
LIMIT :limit";
|
||||||
|
|
||||||
let select_result = conn.prep_exec(
|
let select_result = conn.prep_exec(
|
||||||
q, params!{
|
q, params!{
|
||||||
"start" => start,
|
"start" => start,
|
||||||
"end" => end,
|
"end" => end,
|
||||||
"channel" => channel_id
|
"channel" => channel_id,
|
||||||
|
"limit" => limit
|
||||||
}).await?;
|
}).await?;
|
||||||
|
|
||||||
let(_conn, messages) = select_result.map_and_drop(|row| {
|
let(_conn, messages) = select_result.map_and_drop(|row| {
|
||||||
@ -194,14 +207,13 @@ impl Message {
|
|||||||
//! @returns on success : Set(Vec<Messages>)
|
//! @returns on success : Set(Vec<Messages>)
|
||||||
//! @returns on failure : Err(SqlError)
|
//! @returns on failure : Err(SqlError)
|
||||||
let conn = p.get_conn().await?;
|
let conn = p.get_conn().await?;
|
||||||
const MAX: u64 = 1000;
|
|
||||||
let limit = if let Some(limit) = limit{
|
let limit = if let Some(limit) = limit{
|
||||||
match limit {
|
match limit {
|
||||||
1 ..= MAX => limit,
|
1 ..= MAX_MESSAGES => limit,
|
||||||
_ => MAX
|
_ => MAX_MESSAGES
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
MAX // messages at a time
|
MAX_MESSAGES // messages at a time
|
||||||
};
|
};
|
||||||
|
|
||||||
let q = "SELECT id, time, content, author_id FROM messages WHERE
|
let q = "SELECT id, time, content, author_id FROM messages WHERE
|
||||||
|
Loading…
Reference in New Issue
Block a user