summaryrefslogtreecommitdiff
path: root/src/events/routes.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/events/routes.rs')
-rw-r--r--src/events/routes.rs11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/events/routes.rs b/src/events/routes.rs
index e3a959f..d81c7fb 100644
--- a/src/events/routes.rs
+++ b/src/events/routes.rs
@@ -7,6 +7,7 @@ use axum::{
routing::get,
Router,
};
+use axum_extra::extract::Query;
use futures::stream::{Stream, StreamExt as _};
use super::{extract::LastEventId, types};
@@ -24,12 +25,20 @@ pub fn router() -> Router<App> {
Router::new().route("/api/events", get(events))
}
+#[derive(Default, serde::Deserialize)]
+struct EventsQuery {
+ resume_point: Option<Sequence>,
+}
+
async fn events(
State(app): State<App>,
identity: Identity,
last_event_id: Option<LastEventId<Sequence>>,
+ Query(query): Query<EventsQuery>,
) -> Result<Events<impl Stream<Item = types::ChannelEvent> + std::fmt::Debug>, EventsError> {
- let resume_at = last_event_id.map(LastEventId::into_inner);
+ let resume_at = last_event_id
+ .map(LastEventId::into_inner)
+ .or(query.resume_point);
let stream = app.events().subscribe(resume_at).await?;
let stream = app.logins().limit_stream(identity.token, stream).await?;