diff options
| author | Owen Jacobson <owen@grimoire.ca> | 2024-10-11 22:57:56 -0400 |
|---|---|---|
| committer | Owen Jacobson <owen@grimoire.ca> | 2024-10-11 22:57:56 -0400 |
| commit | 756863f298f9e4277863f9e8758e253c5ae95923 (patch) | |
| tree | 82a9c6643b360b035f4630f2b1db138d9937c8d8 /src/channel/app.rs | |
| parent | 812f1cafe3f8a68bf45b677fade7417c30d92eac (diff) | |
Return a distinct error when an invite username is in use.
I've also aligned channel creation with this (it's 409 Conflict). To make server setup more distinct, it now returns 503 Service Unavailable if setup has not been completed.
Diffstat (limited to 'src/channel/app.rs')
| -rw-r--r-- | src/channel/app.rs | 16 |
1 files changed, 2 insertions, 14 deletions
diff --git a/src/channel/app.rs b/src/channel/app.rs index 7c0b107..5d6cada 100644 --- a/src/channel/app.rs +++ b/src/channel/app.rs @@ -5,7 +5,7 @@ use sqlx::sqlite::SqlitePool; use super::{repo::Provider as _, Channel, History, Id}; use crate::{ clock::DateTime, - db::NotFound, + db::{Duplicate as _, NotFound as _}, event::{repo::Provider as _, Broadcaster, Event, Sequence}, message::repo::Provider as _, }; @@ -27,7 +27,7 @@ impl<'a> Channels<'a> { .channels() .create(name, &created) .await - .map_err(|err| CreateError::from_duplicate_name(err, name))?; + .duplicate(|| CreateError::DuplicateName(name.into()))?; tx.commit().await?; self.events @@ -133,18 +133,6 @@ pub enum Error { DatabaseError(#[from] sqlx::Error), } -impl CreateError { - fn from_duplicate_name(error: sqlx::Error, name: &str) -> Self { - if let Some(error) = error.as_database_error() { - if error.is_unique_violation() { - return Self::DuplicateName(name.into()); - } - } - - Self::from(error) - } -} - #[derive(Debug, thiserror::Error)] pub enum InternalError { #[error(transparent)] |
