summaryrefslogtreecommitdiff
path: root/src/channel
diff options
context:
space:
mode:
Diffstat (limited to 'src/channel')
-rw-r--r--src/channel/routes.rs89
-rw-r--r--src/channel/routes/test/list.rs65
-rw-r--r--src/channel/routes/test/mod.rs1
3 files changed, 2 insertions, 153 deletions
diff --git a/src/channel/routes.rs b/src/channel/routes.rs
index 23c0602..5d67af8 100644
--- a/src/channel/routes.rs
+++ b/src/channel/routes.rs
@@ -2,56 +2,21 @@ use axum::{
extract::{Json, Path, State},
http::StatusCode,
response::{IntoResponse, Response},
- routing::{delete, get, post},
+ routing::{delete, post},
Router,
};
-use axum_extra::extract::Query;
use super::{app, Channel, Id};
-use crate::{
- app::App,
- clock::RequestedAt,
- error::Internal,
- event::{Instant, Sequence},
- login::Login,
- message::{self, app::SendError},
-};
+use crate::{app::App, clock::RequestedAt, error::Internal, login::Login, message::app::SendError};
#[cfg(test)]
mod test;
pub fn router() -> Router<App> {
Router::new()
- .route("/api/channels", get(list))
.route("/api/channels", post(on_create))
.route("/api/channels/:channel", post(on_send))
.route("/api/channels/:channel", delete(on_delete))
- .route("/api/channels/:channel/messages", get(messages))
-}
-
-#[derive(Default, serde::Deserialize)]
-struct ResumeQuery {
- resume_point: Option<Sequence>,
-}
-
-async fn list(
- State(app): State<App>,
- _: Login,
- Query(query): Query<ResumeQuery>,
-) -> Result<Channels, Internal> {
- let channels = app.channels().all(query.resume_point).await?;
- let response = Channels(channels);
-
- Ok(response)
-}
-
-struct Channels(Vec<Channel>);
-
-impl IntoResponse for Channels {
- fn into_response(self) -> Response {
- let Self(channels) = self;
- Json(channels).into_response()
- }
}
#[derive(Clone, serde::Deserialize)]
@@ -150,53 +115,3 @@ impl IntoResponse for ErrorResponse {
}
}
}
-
-async fn messages(
- State(app): State<App>,
- Path(channel): Path<Id>,
- _: Login,
- Query(query): Query<ResumeQuery>,
-) -> Result<Messages, ErrorResponse> {
- let messages = app
- .channels()
- .messages(&channel, query.resume_point)
- .await?;
- let response = Messages(
- messages
- .into_iter()
- .map(|message| MessageView {
- sent: message.sent,
- sender: message.sender,
- message: MessageInner {
- id: message.id,
- body: message.body,
- },
- })
- .collect(),
- );
-
- Ok(response)
-}
-
-struct Messages(Vec<MessageView>);
-
-#[derive(serde::Serialize)]
-struct MessageView {
- #[serde(flatten)]
- sent: Instant,
- sender: Login,
- message: MessageInner,
-}
-
-#[derive(serde::Serialize)]
-struct MessageInner {
- id: message::Id,
- body: String,
-}
-
-impl IntoResponse for Messages {
- fn into_response(self) -> Response {
- let Self(messages) = self;
- Json(messages).into_response()
- }
-}
diff --git a/src/channel/routes/test/list.rs b/src/channel/routes/test/list.rs
deleted file mode 100644
index f15a53c..0000000
--- a/src/channel/routes/test/list.rs
+++ /dev/null
@@ -1,65 +0,0 @@
-use axum::extract::State;
-use axum_extra::extract::Query;
-
-use crate::{channel::routes, test::fixtures};
-
-#[tokio::test]
-async fn empty_list() {
- // Set up the environment
-
- let app = fixtures::scratch_app().await;
- let viewer = fixtures::login::create(&app).await;
-
- // Call the endpoint
-
- let routes::Channels(channels) = routes::list(State(app), viewer, Query::default())
- .await
- .expect("always succeeds");
-
- // Verify the semantics
-
- assert!(channels.is_empty());
-}
-
-#[tokio::test]
-async fn one_channel() {
- // Set up the environment
-
- let app = fixtures::scratch_app().await;
- let viewer = fixtures::login::create(&app).await;
- let channel = fixtures::channel::create(&app, &fixtures::now()).await;
-
- // Call the endpoint
-
- let routes::Channels(channels) = routes::list(State(app), viewer, Query::default())
- .await
- .expect("always succeeds");
-
- // Verify the semantics
-
- assert!(channels.contains(&channel));
-}
-
-#[tokio::test]
-async fn multiple_channels() {
- // Set up the environment
-
- let app = fixtures::scratch_app().await;
- let viewer = fixtures::login::create(&app).await;
- let channels = vec![
- fixtures::channel::create(&app, &fixtures::now()).await,
- fixtures::channel::create(&app, &fixtures::now()).await,
- ];
-
- // Call the endpoint
-
- let routes::Channels(response_channels) = routes::list(State(app), viewer, Query::default())
- .await
- .expect("always succeeds");
-
- // Verify the semantics
-
- assert!(channels
- .into_iter()
- .all(|channel| response_channels.contains(&channel)));
-}
diff --git a/src/channel/routes/test/mod.rs b/src/channel/routes/test/mod.rs
index ab663eb..3e5aa17 100644
--- a/src/channel/routes/test/mod.rs
+++ b/src/channel/routes/test/mod.rs
@@ -1,3 +1,2 @@
-mod list;
mod on_create;
mod on_send;