summaryrefslogtreecommitdiff
path: root/src/event/repo
diff options
context:
space:
mode:
authorOwen Jacobson <owen@grimoire.ca>2024-10-02 01:31:43 -0400
committerOwen Jacobson <owen@grimoire.ca>2024-10-02 01:31:43 -0400
commit469613872f6fb19f4579b387e19b2bc38fa52f51 (patch)
tree16edc3e8fac1a418c4b9ed5450167a793a7d6c8b /src/event/repo
parent6f07e6869bbf62903ac83c9bc061e7bde997e6a8 (diff)
Package up common event fields as Instant
Diffstat (limited to 'src/event/repo')
-rw-r--r--src/event/repo/message.rs42
-rw-r--r--src/event/repo/sequence.rs12
2 files changed, 34 insertions, 20 deletions
diff --git a/src/event/repo/message.rs b/src/event/repo/message.rs
index f051fec..f29c8a4 100644
--- a/src/event/repo/message.rs
+++ b/src/event/repo/message.rs
@@ -3,7 +3,7 @@ use sqlx::{sqlite::Sqlite, SqliteConnection, Transaction};
use crate::{
channel::{self, Channel},
clock::DateTime,
- event::{types, Sequence},
+ event::{types, Instant, Sequence},
login::{self, Login},
message::{self, Message},
};
@@ -25,8 +25,7 @@ impl<'c> Events<'c> {
&mut self,
sender: &Login,
channel: &Channel,
- sent_at: &DateTime,
- sent_sequence: Sequence,
+ sent: &Instant,
body: &str,
) -> Result<types::ChannelEvent, sqlx::Error> {
let id = message::Id::generate();
@@ -46,13 +45,15 @@ impl<'c> Events<'c> {
id,
channel.id,
sender.id,
- sent_at,
- sent_sequence,
+ sent.at,
+ sent.sequence,
body,
)
.map(|row| types::ChannelEvent {
- sequence: row.sent_sequence,
- at: row.sent_at,
+ instant: Instant {
+ at: row.sent_at,
+ sequence: row.sent_sequence,
+ },
data: types::MessageEvent {
channel: channel.clone(),
sender: sender.clone(),
@@ -73,8 +74,7 @@ impl<'c> Events<'c> {
&mut self,
channel: &Channel,
message: &message::Id,
- deleted_at: &DateTime,
- deleted_sequence: Sequence,
+ deleted: &Instant,
) -> Result<types::ChannelEvent, sqlx::Error> {
sqlx::query_scalar!(
r#"
@@ -88,8 +88,10 @@ impl<'c> Events<'c> {
.await?;
Ok(types::ChannelEvent {
- sequence: deleted_sequence,
- at: *deleted_at,
+ instant: Instant {
+ at: deleted.at,
+ sequence: deleted.sequence,
+ },
data: types::MessageDeletedEvent {
channel: channel.clone(),
message: message.clone(),
@@ -122,8 +124,10 @@ impl<'c> Events<'c> {
Channel {
id: row.channel_id,
name: row.channel_name,
- created_at: row.channel_created_at,
- created_sequence: row.channel_created_sequence,
+ created: Instant {
+ at: row.channel_created_at,
+ sequence: row.channel_created_sequence,
+ },
},
row.message,
)
@@ -160,14 +164,18 @@ impl<'c> Events<'c> {
resume_at,
)
.map(|row| types::ChannelEvent {
- sequence: row.sent_sequence,
- at: row.sent_at,
+ instant: Instant {
+ at: row.sent_at,
+ sequence: row.sent_sequence,
+ },
data: types::MessageEvent {
channel: Channel {
id: row.channel_id,
name: row.channel_name,
- created_at: row.channel_created_at,
- created_sequence: row.channel_created_sequence,
+ created: Instant {
+ at: row.channel_created_at,
+ sequence: row.channel_created_sequence,
+ },
},
sender: Login {
id: row.sender_id,
diff --git a/src/event/repo/sequence.rs b/src/event/repo/sequence.rs
index c985869..40d6a53 100644
--- a/src/event/repo/sequence.rs
+++ b/src/event/repo/sequence.rs
@@ -1,6 +1,9 @@
use sqlx::{sqlite::Sqlite, SqliteConnection, Transaction};
-use crate::event::Sequence;
+use crate::{
+ clock::DateTime,
+ event::{Instant, Sequence},
+};
pub trait Provider {
fn sequence(&mut self) -> Sequences;
@@ -15,7 +18,7 @@ impl<'c> Provider for Transaction<'c, Sqlite> {
pub struct Sequences<'t>(&'t mut SqliteConnection);
impl<'c> Sequences<'c> {
- pub async fn next(&mut self) -> Result<Sequence, sqlx::Error> {
+ pub async fn next(&mut self, at: &DateTime) -> Result<Instant, sqlx::Error> {
let next = sqlx::query_scalar!(
r#"
update event_sequence
@@ -26,7 +29,10 @@ impl<'c> Sequences<'c> {
.fetch_one(&mut *self.0)
.await?;
- Ok(next)
+ Ok(Instant {
+ at: *at,
+ sequence: next,
+ })
}
pub async fn current(&mut self) -> Result<Sequence, sqlx::Error> {