summaryrefslogtreecommitdiff
path: root/src/conversation/handlers/delete
diff options
context:
space:
mode:
authorOwen Jacobson <owen@grimoire.ca>2025-10-27 17:29:36 -0400
committerOwen Jacobson <owen@grimoire.ca>2025-10-28 01:27:13 -0400
commit398bc79a3f1f4316e6cc33b6e6bce133c1db3e4c (patch)
treef34f9ec001d2064b080b302fba175d66b08865ce /src/conversation/handlers/delete
parent2d05e6fb933d8c33078232b3bdfbc2aa05106d80 (diff)
Convert the `Conversations` component into a freestanding struct.
Unlike the previous example, this involves cloning an event broadcaster, as well. This is, per the documentation, how the type may be used. From <https://docs.rs/tokio/latest/tokio/sync/broadcast/fn.channel.html>: > The Sender can be cloned to send to the same channel from multiple points in the process or it can be used concurrently from an `Arc`. The language is less firm than the language sqlx uses for its pool, but the intent is clear enough, and it works in practice.
Diffstat (limited to 'src/conversation/handlers/delete')
-rw-r--r--src/conversation/handlers/delete/mod.rs9
-rw-r--r--src/conversation/handlers/delete/test.rs12
2 files changed, 9 insertions, 12 deletions
diff --git a/src/conversation/handlers/delete/mod.rs b/src/conversation/handlers/delete/mod.rs
index 272165a..231e433 100644
--- a/src/conversation/handlers/delete/mod.rs
+++ b/src/conversation/handlers/delete/mod.rs
@@ -5,9 +5,8 @@ use axum::{
};
use crate::{
- app::App,
clock::RequestedAt,
- conversation::{self, app, handlers::PathInfo},
+ conversation::{self, app, app::Conversations, handlers::PathInfo},
error::{Internal, NotFound},
token::extract::Identity,
};
@@ -16,14 +15,12 @@ use crate::{
mod test;
pub async fn handler(
- State(app): State<App>,
+ State(conversations): State<Conversations>,
Path(conversation): Path<PathInfo>,
RequestedAt(deleted_at): RequestedAt,
_: Identity,
) -> Result<Response, Error> {
- app.conversations()
- .delete(&conversation, &deleted_at)
- .await?;
+ conversations.delete(&conversation, &deleted_at).await?;
Ok(Response { id: conversation })
}
diff --git a/src/conversation/handlers/delete/test.rs b/src/conversation/handlers/delete/test.rs
index 2718d3b..e9e882a 100644
--- a/src/conversation/handlers/delete/test.rs
+++ b/src/conversation/handlers/delete/test.rs
@@ -14,7 +14,7 @@ pub async fn valid_conversation() {
let deleter = fixtures::identity::create(&app, &fixtures::now()).await;
let response = super::handler(
- State(app.clone()),
+ State(app.conversations()),
Path(conversation.id.clone()),
fixtures::now(),
deleter,
@@ -52,7 +52,7 @@ pub async fn invalid_conversation_id() {
let deleter = fixtures::identity::create(&app, &fixtures::now()).await;
let conversation = fixtures::conversation::fictitious();
let super::Error(error) = super::handler(
- State(app.clone()),
+ State(app.conversations()),
Path(conversation.clone()),
fixtures::now(),
deleter,
@@ -81,7 +81,7 @@ pub async fn conversation_deleted() {
let deleter = fixtures::identity::create(&app, &fixtures::now()).await;
let super::Error(error) = super::handler(
- State(app.clone()),
+ State(app.conversations()),
Path(conversation.id.clone()),
fixtures::now(),
deleter,
@@ -110,7 +110,7 @@ pub async fn conversation_expired() {
let deleter = fixtures::identity::create(&app, &fixtures::now()).await;
let super::Error(error) = super::handler(
- State(app.clone()),
+ State(app.conversations()),
Path(conversation.id.clone()),
fixtures::now(),
deleter,
@@ -144,7 +144,7 @@ pub async fn conversation_purged() {
let deleter = fixtures::identity::create(&app, &fixtures::now()).await;
let super::Error(error) = super::handler(
- State(app.clone()),
+ State(app.conversations()),
Path(conversation.id.clone()),
fixtures::now(),
deleter,
@@ -170,7 +170,7 @@ pub async fn conversation_not_empty() {
let deleter = fixtures::identity::create(&app, &fixtures::now()).await;
let super::Error(error) = super::handler(
- State(app.clone()),
+ State(app.conversations()),
Path(conversation.id.clone()),
fixtures::now(),
deleter,