feat(gpodder): add create_user method to AuthStore

This commit is contained in:
Jef Roosens 2025-03-19 10:46:34 +01:00
parent 2a8917f21d
commit b44a47fefd
Signed by: Jef Roosens
GPG key ID: 21FD3D77D56BAF49
4 changed files with 40 additions and 7 deletions

View file

@ -4,7 +4,10 @@ use gpodder::AuthErr;
use super::SqliteRepository;
use crate::{
models::{session::Session, user::User},
models::{
session::Session,
user::{NewUser, User},
},
schema::*,
DbError,
};
@ -30,18 +33,34 @@ impl gpodder::AuthStore for SqliteRepository {
.map(gpodder::User::from))
}
fn insert_user(&self, username: &str, password_hash: &str) -> Result<gpodder::User, AuthErr> {
let conn = &mut self.pool.get().map_err(DbError::from)?;
Ok(diesel::insert_into(users::table)
.values(NewUser {
username,
password_hash,
})
.returning(User::as_returning())
.get_result(conn)
.map(gpodder::User::from)
.map_err(DbError::from)?)
}
fn get_session(&self, session_id: i64) -> Result<Option<gpodder::models::Session>, AuthErr> {
match sessions::table
.inner_join(users::table)
.filter(sessions::id.eq(session_id))
.select((Session::as_select(), User::as_select()))
.get_result(&mut self.pool.get().map_err(DbError::from)?)
.optional()
{
Ok((session, user)) => Ok(Some(gpodder::Session {
Ok(Some((session, user))) => Ok(Some(gpodder::Session {
id: session.id,
last_seen: DateTime::from_timestamp(session.last_seen, 0).unwrap(),
user: user.into(),
})),
Ok(None) => Ok(None),
Err(err) => Err(DbError::from(err).into()),
}
}