summaryrefslogtreecommitdiff
path: root/src/channel/app.rs
diff options
context:
space:
mode:
authorOwen Jacobson <owen@grimoire.ca>2024-09-27 20:18:50 -0400
committerOwen Jacobson <owen@grimoire.ca>2024-09-28 01:00:09 -0400
commit1458ff7be5d883444943090cb636e9343487d03e (patch)
treeadb410ce9245dc2a1562fc370f2398cab35e7507 /src/channel/app.rs
parenteff129bc1f29bcb1b2b9d10c6b49ab886edc83d6 (diff)
Send created events when channels are added.
Diffstat (limited to 'src/channel/app.rs')
-rw-r--r--src/channel/app.rs18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/channel/app.rs b/src/channel/app.rs
index 6bad158..1eeca79 100644
--- a/src/channel/app.rs
+++ b/src/channel/app.rs
@@ -1,25 +1,33 @@
use sqlx::sqlite::SqlitePool;
-use crate::repo::channel::{Channel, Provider as _};
+use crate::{
+ clock::DateTime,
+ events::{broadcaster::Broadcaster, types::ChannelEvent},
+ repo::channel::{Channel, Provider as _},
+};
pub struct Channels<'a> {
db: &'a SqlitePool,
+ broadcaster: &'a Broadcaster,
}
impl<'a> Channels<'a> {
- pub const fn new(db: &'a SqlitePool) -> Self {
- Self { db }
+ pub const fn new(db: &'a SqlitePool, broadcaster: &'a Broadcaster) -> Self {
+ Self { db, broadcaster }
}
- pub async fn create(&self, name: &str) -> Result<Channel, CreateError> {
+ pub async fn create(&self, name: &str, created_at: &DateTime) -> Result<Channel, CreateError> {
let mut tx = self.db.begin().await?;
let channel = tx
.channels()
- .create(name)
+ .create(name, created_at)
.await
.map_err(|err| CreateError::from_duplicate_name(err, name))?;
tx.commit().await?;
+ self.broadcaster
+ .broadcast(&ChannelEvent::created(channel.clone()));
+
Ok(channel)
}