feat(gpodder): add create_user method to AuthStore
This commit is contained in:
parent
2a8917f21d
commit
b44a47fefd
4 changed files with 40 additions and 7 deletions
|
|
@ -14,9 +14,9 @@ pub struct User {
|
|||
#[derive(Insertable)]
|
||||
#[diesel(table_name = users)]
|
||||
#[diesel(check_for_backend(diesel::sqlite::Sqlite))]
|
||||
pub struct NewUser {
|
||||
pub username: String,
|
||||
pub password_hash: String,
|
||||
pub struct NewUser<'a> {
|
||||
pub username: &'a str,
|
||||
pub password_hash: &'a str,
|
||||
}
|
||||
|
||||
// impl NewUser {
|
||||
|
|
|
|||
|
|
@ -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()),
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue