summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorOwen Jacobson <owen@grimoire.ca>2024-10-30 01:25:04 -0400
committerOwen Jacobson <owen@grimoire.ca>2024-10-30 01:25:04 -0400
commit70591c5ac10069a4ae649bd6f79d769da9e32a98 (patch)
treef9a4d155275975e4f37e063f331b7697f5c3cb07 /src
parentffba911ba5240f67cc616b2cc2eaf7c730ebbde8 (diff)
Remove `hi-recanonicalize`.
This utility was needed to support a database migration with existing data. I have it on good authority that no further databases exist that are in the state that made this tool necessary.
Diffstat (limited to 'src')
-rw-r--r--src/app.rs9
-rw-r--r--src/bin/hi-recanonicalize.rs9
-rw-r--r--src/channel/app.rs8
-rw-r--r--src/channel/repo.rs32
-rw-r--r--src/cli.rs (renamed from src/cli/mod.rs)2
-rw-r--r--src/cli/recanonicalize.rs86
-rw-r--r--src/login/app.rs21
-rw-r--r--src/login/mod.rs1
-rw-r--r--src/login/repo.rs32
-rw-r--r--src/main.rs (renamed from src/bin/hi.rs)0
10 files changed, 4 insertions, 196 deletions
diff --git a/src/app.rs b/src/app.rs
index bc1daa5..0dbf017 100644
--- a/src/app.rs
+++ b/src/app.rs
@@ -5,12 +5,14 @@ use crate::{
channel::app::Channels,
event::{self, app::Events},
invite::app::Invites,
- login::app::Logins,
message::app::Messages,
setup::app::Setup,
token::{self, app::Tokens},
};
+#[cfg(test)]
+use crate::login::app::Logins;
+
#[derive(Clone)]
pub struct App {
db: SqlitePool,
@@ -47,11 +49,6 @@ impl App {
Invites::new(&self.db, &self.events)
}
- #[cfg(not(test))]
- pub const fn logins(&self) -> Logins {
- Logins::new(&self.db)
- }
-
#[cfg(test)]
pub const fn logins(&self) -> Logins {
Logins::new(&self.db, &self.events)
diff --git a/src/bin/hi-recanonicalize.rs b/src/bin/hi-recanonicalize.rs
deleted file mode 100644
index 4081276..0000000
--- a/src/bin/hi-recanonicalize.rs
+++ /dev/null
@@ -1,9 +0,0 @@
-use clap::Parser;
-
-use hi::cli;
-
-#[tokio::main]
-async fn main() -> Result<(), cli::recanonicalize::Error> {
- let args = cli::recanonicalize::Args::parse();
- args.run().await
-}
diff --git a/src/channel/app.rs b/src/channel/app.rs
index e32eb6c..21784e9 100644
--- a/src/channel/app.rs
+++ b/src/channel/app.rs
@@ -137,14 +137,6 @@ impl<'a> Channels<'a> {
Ok(())
}
-
- pub async fn recanonicalize(&self) -> Result<(), sqlx::Error> {
- let mut tx = self.db.begin().await?;
- tx.channels().recanonicalize().await?;
- tx.commit().await?;
-
- Ok(())
- }
}
#[derive(Debug, thiserror::Error)]
diff --git a/src/channel/repo.rs b/src/channel/repo.rs
index a49db52..f47e564 100644
--- a/src/channel/repo.rs
+++ b/src/channel/repo.rs
@@ -300,38 +300,6 @@ impl<'c> Channels<'c> {
Ok(channels)
}
-
- pub async fn recanonicalize(&mut self) -> Result<(), sqlx::Error> {
- let channels = sqlx::query!(
- r#"
- select
- id as "id: Id",
- display_name as "display_name: String"
- from channel_name
- "#,
- )
- .fetch_all(&mut *self.0)
- .await?;
-
- for channel in channels {
- let name = Name::from(channel.display_name);
- let canonical_name = name.canonical();
-
- sqlx::query!(
- r#"
- update channel_name
- set canonical_name = $1
- where id = $2
- "#,
- canonical_name,
- channel.id,
- )
- .execute(&mut *self.0)
- .await?;
- }
-
- Ok(())
- }
}
#[derive(Debug, thiserror::Error)]
diff --git a/src/cli/mod.rs b/src/cli.rs
index c75ce2b..0659851 100644
--- a/src/cli/mod.rs
+++ b/src/cli.rs
@@ -22,8 +22,6 @@ use crate::{
ui,
};
-pub mod recanonicalize;
-
/// Command-line entry point for running the `hi` server.
///
/// This is intended to be used as a Clap [Parser], to capture command-line
diff --git a/src/cli/recanonicalize.rs b/src/cli/recanonicalize.rs
deleted file mode 100644
index 9db5b77..0000000
--- a/src/cli/recanonicalize.rs
+++ /dev/null
@@ -1,86 +0,0 @@
-use sqlx::sqlite::SqlitePool;
-
-use crate::{app::App, db};
-
-/// Command-line entry point for repairing canonical names in the `hi` database.
-/// This command may be necessary after an upgrade, if the canonical forms of
-/// names has changed. It will re-calculate the canonical form of each name in
-/// the database, based on its display form, and store the results back to the
-/// database.
-///
-/// This is intended to be used as a Clap [Parser], to capture command-line
-/// arguments for the `hi-recanonicalize` command:
-///
-/// ```no_run
-/// # use hi::cli::recanonicalize::Error;
-/// #
-/// # #[tokio::main]
-/// # async fn main() -> Result<(), Error> {
-/// use clap::Parser;
-/// use hi::cli::recanonicalize::Args;
-///
-/// let args = Args::parse();
-/// args.run().await?;
-/// # Ok(())
-/// # }
-/// ```
-#[derive(clap::Parser)]
-#[command(
- version,
- about = "Recanonicalize names in the `hi` database.",
- long_about = r#"Recanonicalize names in the `hi` database.
-
-The `hi` server must not be running while this command is run.
-
-The database at `--database-url` will also be created, or upgraded, automatically."#
-)]
-pub struct Args {
- /// Sqlite URL or path for the `hi` database
- #[arg(short, long, env, default_value = "sqlite://.hi")]
- database_url: String,
-
- /// Sqlite URL or path for a backup of the `hi` database during upgrades
- #[arg(short = 'D', long, env, default_value = "sqlite://.hi.backup")]
- backup_database_url: String,
-}
-
-impl Args {
- /// Recanonicalizes the `hi` database, using the parsed configuation in
- /// `self`.
- ///
- /// This will perform the following tasks:
- ///
- /// * Migrate the `hi` database (at `--database-url`).
- /// * Recanonicalize names in the `login` and `channel` tables.
- ///
- /// # Errors
- ///
- /// Will return `Err` if the canonicalization or database upgrade processes
- /// fail. The specific [`Error`] variant will expose the cause
- /// of the failure.
- pub async fn run(self) -> Result<(), Error> {
- let pool = self.pool().await?;
-
- let app = App::from(pool);
- app.logins().recanonicalize().await?;
- app.channels().recanonicalize().await?;
-
- Ok(())
- }
-
- async fn pool(&self) -> Result<SqlitePool, db::Error> {
- db::prepare(&self.database_url, &self.backup_database_url).await
- }
-}
-
-/// Errors that can be raised by [`Args::run`].
-#[derive(Debug, thiserror::Error)]
-#[error(transparent)]
-pub enum Error {
- // /// Failure due to `io::Error`. See [`io::Error`].
- // Io(#[from] io::Error),
- /// Failure due to a database initialization error. See [`db::Error`].
- Database(#[from] db::Error),
- /// Failure due to a data manipulation error. See [`sqlx::Error`].
- Sqlx(#[from] sqlx::Error),
-}
diff --git a/src/login/app.rs b/src/login/app.rs
index 6da26e9..f458561 100644
--- a/src/login/app.rs
+++ b/src/login/app.rs
@@ -1,33 +1,21 @@
use sqlx::sqlite::SqlitePool;
-use super::repo::Provider as _;
-
-#[cfg(test)]
use super::{
create::{self, Create},
Login, Password,
};
-#[cfg(test)]
use crate::{clock::DateTime, event::Broadcaster, name::Name};
pub struct Logins<'a> {
db: &'a SqlitePool,
- #[cfg(test)]
events: &'a Broadcaster,
}
impl<'a> Logins<'a> {
- #[cfg(not(test))]
- pub const fn new(db: &'a SqlitePool) -> Self {
- Self { db }
- }
-
- #[cfg(test)]
pub const fn new(db: &'a SqlitePool, events: &'a Broadcaster) -> Self {
Self { db, events }
}
- #[cfg(test)]
pub async fn create(
&self,
name: &Name,
@@ -45,17 +33,8 @@ impl<'a> Logins<'a> {
Ok(login.as_created())
}
-
- pub async fn recanonicalize(&self) -> Result<(), sqlx::Error> {
- let mut tx = self.db.begin().await?;
- tx.logins().recanonicalize().await?;
- tx.commit().await?;
-
- Ok(())
- }
}
-#[cfg(test)]
#[derive(Debug, thiserror::Error)]
pub enum CreateError {
#[error("invalid login name: {0}")]
diff --git a/src/login/mod.rs b/src/login/mod.rs
index 5a6d715..006fa0c 100644
--- a/src/login/mod.rs
+++ b/src/login/mod.rs
@@ -1,3 +1,4 @@
+#[cfg(test)]
pub mod app;
pub mod create;
pub mod event;
diff --git a/src/login/repo.rs b/src/login/repo.rs
index a972304..9439a25 100644
--- a/src/login/repo.rs
+++ b/src/login/repo.rs
@@ -143,38 +143,6 @@ impl<'c> Logins<'c> {
Ok(logins)
}
-
- pub async fn recanonicalize(&mut self) -> Result<(), sqlx::Error> {
- let logins = sqlx::query!(
- r#"
- select
- id as "id: Id",
- display_name as "display_name: String"
- from login
- "#,
- )
- .fetch_all(&mut *self.0)
- .await?;
-
- for login in logins {
- let name = Name::from(login.display_name);
- let canonical_name = name.canonical();
-
- sqlx::query!(
- r#"
- update login
- set canonical_name = $1
- where id = $2
- "#,
- canonical_name,
- login.id,
- )
- .execute(&mut *self.0)
- .await?;
- }
-
- Ok(())
- }
}
#[derive(Debug, thiserror::Error)]
diff --git a/src/bin/hi.rs b/src/main.rs
index d0830ff..d0830ff 100644
--- a/src/bin/hi.rs
+++ b/src/main.rs