summaryrefslogtreecommitdiff
path: root/src/channel/routes.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/channel/routes.rs')
-rw-r--r--src/channel/routes.rs54
1 files changed, 4 insertions, 50 deletions
diff --git a/src/channel/routes.rs b/src/channel/routes.rs
index eae68a2..3c2353b 100644
--- a/src/channel/routes.rs
+++ b/src/channel/routes.rs
@@ -1,30 +1,17 @@
use axum::{
extract::{Form, Path, State},
- response::{
- sse::{self, Sse},
- IntoResponse, Redirect,
- },
- routing::{get, post},
+ response::{IntoResponse, Redirect},
+ routing::post,
Router,
};
-use axum_extra::TypedHeader;
-use chrono::{format::SecondsFormat, DateTime};
-use futures::{future, stream::TryStreamExt as _};
-use super::{
- header::LastEventId,
- repo::{channels::Id as ChannelId, messages::BroadcastMessage},
-};
-use crate::{
- app::App, clock::RequestedAt, error::BoxedError, error::InternalError,
- login::repo::logins::Login,
-};
+use super::repo::channels::Id as ChannelId;
+use crate::{app::App, clock::RequestedAt, error::InternalError, login::repo::logins::Login};
pub fn router() -> Router<App> {
Router::new()
.route("/create", post(on_create))
.route("/:channel/send", post(on_send))
- .route("/:channel/events", get(on_events))
}
#[derive(serde::Deserialize)]
@@ -60,36 +47,3 @@ async fn on_send(
Ok(Redirect::to(&format!("/{}", channel)))
}
-
-async fn on_events(
- Path(channel): Path<ChannelId>,
- State(app): State<App>,
- _: Login, // requires auth, but doesn't actually care who you are
- last_event_id: Option<TypedHeader<LastEventId>>,
-) -> Result<impl IntoResponse, InternalError> {
- let resume_at = last_event_id
- .map(|TypedHeader(header)| header)
- .map(|LastEventId(header)| header)
- .map(|header| DateTime::parse_from_rfc3339(&header))
- .transpose()?
- .map(|ts| ts.to_utc());
-
- let stream = app
- .channels()
- .events(&channel, resume_at.as_ref())
- .await?
- .and_then(|msg| future::ready(to_event(msg)));
-
- Ok(Sse::new(stream).keep_alive(sse::KeepAlive::default()))
-}
-
-fn to_event(msg: BroadcastMessage) -> Result<sse::Event, BoxedError> {
- let data = serde_json::to_string(&msg)?;
- let event = sse::Event::default()
- .id(msg
- .sent_at
- .to_rfc3339_opts(SecondsFormat::AutoSi, /* use_z */ true))
- .data(&data);
-
- Ok(event)
-}