summaryrefslogtreecommitdiff
path: root/src/channel/repo.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/channel/repo.rs')
-rw-r--r--src/channel/repo.rs60
1 files changed, 21 insertions, 39 deletions
diff --git a/src/channel/repo.rs b/src/channel/repo.rs
index a49db52..6612151 100644
--- a/src/channel/repo.rs
+++ b/src/channel/repo.rs
@@ -5,7 +5,7 @@ use crate::{
channel::{Channel, History, Id},
clock::DateTime,
db::NotFound,
- event::{Instant, ResumePoint, Sequence},
+ event::{Instant, Sequence},
name::{self, Name},
};
@@ -32,12 +32,13 @@ impl<'c> Channels<'c> {
sqlx::query!(
r#"
insert
- into channel (id, created_at, created_sequence)
- values ($1, $2, $3)
+ into channel (id, created_at, created_sequence, last_sequence)
+ values ($1, $2, $3, $4)
"#,
id,
created.at,
created.sequence,
+ created.sequence,
)
.execute(&mut *self.0)
.await?;
@@ -144,13 +145,13 @@ impl<'c> Channels<'c> {
Ok(channels)
}
- pub async fn replay(&mut self, resume_at: ResumePoint) -> Result<Vec<History>, LoadError> {
+ pub async fn replay(&mut self, resume_at: Sequence) -> Result<Vec<History>, LoadError> {
let channels = sqlx::query!(
r#"
select
id as "id: Id",
- name.display_name as "display_name: String",
- name.canonical_name as "canonical_name: String",
+ name.display_name as "display_name?: String",
+ name.canonical_name as "canonical_name?: String",
channel.created_at as "created_at: DateTime",
channel.created_sequence as "created_sequence: Sequence",
deleted.deleted_at as "deleted_at?: DateTime",
@@ -160,7 +161,7 @@ impl<'c> Channels<'c> {
using (id)
left join channel_deleted as deleted
using (id)
- where coalesce(channel.created_sequence > $1, true)
+ where channel.last_sequence > $1
"#,
resume_at,
)
@@ -191,6 +192,19 @@ impl<'c> Channels<'c> {
let id = channel.id();
sqlx::query!(
r#"
+ update channel
+ set last_sequence = max(last_sequence, $1)
+ where id = $2
+ returning id as "id: Id"
+ "#,
+ deleted.sequence,
+ id,
+ )
+ .fetch_one(&mut *self.0)
+ .await?;
+
+ sqlx::query!(
+ r#"
insert into channel_deleted (id, deleted_at, deleted_sequence)
values ($1, $2, $3)
"#,
@@ -300,38 +314,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)]