add offset support
This commit is contained in:
parent
c7be67cc71
commit
4098036d31
|
@ -23,9 +23,12 @@ pub async fn read_channel(
|
|||
channel_id: &str,
|
||||
log_date: ChannelLogDate,
|
||||
reverse: bool,
|
||||
limit: Option<u64>,
|
||||
offset: Option<u64>,
|
||||
) -> Result<LogsStream> {
|
||||
let suffix = if reverse { "DESC" } else { "ASC" };
|
||||
let query = format!("SELECT raw FROM message WHERE channel_id = ? AND toStartOfDay(timestamp) = ? ORDER BY timestamp {suffix}");
|
||||
let mut query = format!("SELECT raw FROM message WHERE channel_id = ? AND toStartOfDay(timestamp) = ? ORDER BY timestamp {suffix}");
|
||||
apply_limit_offset(&mut query, limit, offset);
|
||||
|
||||
let cursor = db
|
||||
.query(&query)
|
||||
|
@ -41,9 +44,12 @@ pub async fn read_user(
|
|||
user_id: &str,
|
||||
log_date: UserLogDate,
|
||||
reverse: bool,
|
||||
limit: Option<u64>,
|
||||
offset: Option<u64>,
|
||||
) -> Result<LogsStream> {
|
||||
let suffix = if reverse { "DESC" } else { "ASC" };
|
||||
let query = format!("SELECT raw FROM message WHERE channel_id = ? AND user_id = ? AND toStartOfMonth(timestamp) = ? ORDER BY timestamp {suffix}");
|
||||
let mut query = format!("SELECT raw FROM message WHERE channel_id = ? AND user_id = ? AND toStartOfMonth(timestamp) = ? ORDER BY timestamp {suffix}");
|
||||
apply_limit_offset(&mut query, limit, offset);
|
||||
|
||||
let cursor = db
|
||||
.query(&query)
|
||||
|
@ -188,3 +194,12 @@ pub async fn delete_user_logs(db: &Client, user_id: &str) -> Result<()> {
|
|||
.await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn apply_limit_offset(query: &mut String, limit: Option<u64>, offset: Option<u64>) {
|
||||
if let Some(limit) = limit {
|
||||
*query = format!("{query} LIMIT {limit}");
|
||||
}
|
||||
if let Some(offset) = offset {
|
||||
*query = format!("{query} OFFSET {offset}");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -72,7 +72,15 @@ pub async fn get_channel_logs(
|
|||
let log_date = ChannelLogDate::try_from(channel_log_params.date)?;
|
||||
debug!("Querying logs for date {log_date:?}");
|
||||
|
||||
let stream = read_channel(&app.db, &channel_id, log_date, logs_params.reverse).await?;
|
||||
let stream = read_channel(
|
||||
&app.db,
|
||||
&channel_id,
|
||||
log_date,
|
||||
logs_params.reverse,
|
||||
logs_params.limit,
|
||||
logs_params.offset,
|
||||
)
|
||||
.await?;
|
||||
|
||||
let logs = LogsResponse {
|
||||
response_type: logs_params.response_type(),
|
||||
|
@ -143,6 +151,8 @@ async fn get_user_logs(
|
|||
&user_id,
|
||||
log_date,
|
||||
logs_params.reverse,
|
||||
logs_params.limit,
|
||||
logs_params.offset,
|
||||
)
|
||||
.await?;
|
||||
|
||||
|
|
|
@ -89,6 +89,8 @@ pub struct LogsParams {
|
|||
pub reverse: bool,
|
||||
#[serde(default, deserialize_with = "deserialize_bool_param")]
|
||||
pub ndjson: bool,
|
||||
pub limit: Option<u64>,
|
||||
pub offset: Option<u64>,
|
||||
}
|
||||
|
||||
impl LogsParams {
|
||||
|
|
Loading…
Reference in New Issue