diff options
Diffstat (limited to 'src/login/repo.rs')
| -rw-r--r-- | src/login/repo.rs | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/login/repo.rs b/src/login/repo.rs index 6021f26..c6bc734 100644 --- a/src/login/repo.rs +++ b/src/login/repo.rs @@ -89,6 +89,7 @@ impl<'c> Logins<'c> { Ok(logins) } + pub async fn replay(&mut self, resume_at: ResumePoint) -> Result<Vec<History>, LoadError> { let logins = sqlx::query!( r#" @@ -119,6 +120,38 @@ 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)] |
