summaryrefslogtreecommitdiff
path: root/src/user/repo.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/user/repo.rs')
-rw-r--r--src/user/repo.rs50
1 files changed, 29 insertions, 21 deletions
diff --git a/src/user/repo.rs b/src/user/repo.rs
index aaf3b73..292d72e 100644
--- a/src/user/repo.rs
+++ b/src/user/repo.rs
@@ -1,13 +1,13 @@
use futures::stream::{StreamExt as _, TryStreamExt as _};
use sqlx::{SqliteConnection, Transaction, sqlite::Sqlite};
+use super::{Event, History, Id, User, event::Created};
use crate::{
clock::DateTime,
db::NotFound,
event::{Instant, Sequence},
login::Login,
name::{self, Name},
- user::{History, Id, User},
};
pub trait Provider {
@@ -23,30 +23,39 @@ impl Provider for Transaction<'_, Sqlite> {
pub struct Users<'t>(&'t mut SqliteConnection);
impl Users<'_> {
- pub async fn create(
+ pub async fn record_events(
&mut self,
- login: &Login,
- created: &Instant,
- ) -> Result<History, sqlx::Error> {
+ events: impl IntoIterator<Item = Event>,
+ ) -> Result<(), sqlx::Error> {
+ for event in events {
+ self.record_event(&event).await?;
+ }
+ Ok(())
+ }
+
+ pub async fn record_event(&mut self, event: &Event) -> Result<(), sqlx::Error> {
+ match event {
+ Event::Created(created) => self.record_created(created).await,
+ }
+ }
+
+ async fn record_created(&mut self, created: &Created) -> Result<(), sqlx::Error> {
+ let Created { user, instant } = created;
+
sqlx::query!(
r#"
- insert into user (id, created_sequence, created_at)
+ insert
+ into user (id, created_at, created_sequence)
values ($1, $2, $3)
"#,
- login.id,
- created.sequence,
- created.at,
+ user.id,
+ instant.at,
+ instant.sequence,
)
.execute(&mut *self.0)
.await?;
- Ok(History {
- user: User {
- id: login.id.clone().into(),
- name: login.name.clone(),
- },
- created: *created,
- })
+ Ok(())
}
pub async fn by_login(&mut self, login: &Login) -> Result<History, LoadError> {
@@ -86,12 +95,11 @@ impl Users<'_> {
id as "id: Id",
login.display_name as "display_name: String",
login.canonical_name as "canonical_name: String",
- user.created_sequence as "created_sequence: Sequence",
- user.created_at as "created_at: DateTime"
+ user.created_at as "created_at: DateTime",
+ user.created_sequence as "created_sequence: Sequence"
from user
join login using (id)
where user.created_sequence <= $1
- order by canonical_name
"#,
resume_at,
)
@@ -119,8 +127,8 @@ impl Users<'_> {
id as "id: Id",
login.display_name as "display_name: String",
login.canonical_name as "canonical_name: String",
- user.created_sequence as "created_sequence: Sequence",
- user.created_at as "created_at: DateTime"
+ user.created_at as "created_at: DateTime",
+ user.created_sequence as "created_sequence: Sequence"
from user
join login using (id)
where user.created_sequence > $1