From 6366fb3c96e4ed281e233279c85bbfd90ab3ecbc Mon Sep 17 00:00:00 2001 From: Owen Jacobson Date: Wed, 4 Sep 2024 23:38:21 -0400 Subject: Support joining channels. --- src/channel/repo.rs | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) (limited to 'src/channel/repo.rs') diff --git a/src/channel/repo.rs b/src/channel/repo.rs index bb39d6e..a255305 100644 --- a/src/channel/repo.rs +++ b/src/channel/repo.rs @@ -62,7 +62,7 @@ impl<'c> Channels<'c> { Ok(()) } - pub async fn for_login(&mut self, login: &LoginId) -> Result, BoxedError> { + pub async fn joined(&mut self, login: &LoginId) -> Result, BoxedError> { let channels = sqlx::query_as!( Channel, r#" @@ -83,6 +83,32 @@ impl<'c> Channels<'c> { Ok(channels) } + pub async fn unjoined(&mut self, login: &LoginId) -> Result, BoxedError> { + let channels = sqlx::query_as!( + Channel, + r#" + select + channel.id as "id: Id", + channel.name + from channel + except + select + channel.id as "id: Id", + channel.name + from channel + join channel_member + on (channel.id = channel_member.channel) + where channel_member.login = $1 + order by channel.name + "#, + login, + ) + .fetch_all(&mut *self.0) + .await?; + + Ok(channels) + } + /// Unenrol a login from a channel. pub async fn leave(&mut self, channel: &Id, login: &LoginId) -> Result<(), BoxedError> { sqlx::query_scalar!( -- cgit v1.2.3