refactor: migrate devices to store
parent
54a723f803
commit
3a5a6759ac
|
@ -10,7 +10,7 @@ pub fn serve(config: &crate::config::Config) -> u8 {
|
|||
|
||||
let ctx = server::Context {
|
||||
repo: repo.clone(),
|
||||
store: crate::gpodder::GpodderRepository::new(Box::new(repo)),
|
||||
store: crate::gpodder::GpodderRepository::new(repo),
|
||||
};
|
||||
let app = server::app(ctx);
|
||||
|
||||
|
|
|
@ -11,6 +11,10 @@ pub enum AuthErr {
|
|||
Other(Box<dyn std::error::Error + Sync + Send>),
|
||||
}
|
||||
|
||||
pub trait Store: AuthStore + DeviceRepository {}
|
||||
|
||||
impl<T> Store for T where T: AuthStore + DeviceRepository {}
|
||||
|
||||
pub trait AuthRepository {
|
||||
/// Validate the given session ID and return its user.
|
||||
fn validate_session(&self, session_id: i64) -> Result<models::User, AuthErr>;
|
||||
|
|
|
@ -3,21 +3,19 @@ use std::sync::Arc;
|
|||
use argon2::{Argon2, PasswordHash, PasswordVerifier};
|
||||
use rand::Rng;
|
||||
|
||||
use super::{models, AuthErr, AuthStore};
|
||||
use super::{models, AuthErr, Store};
|
||||
|
||||
const MAX_SESSION_AGE: i64 = 60 * 60 * 24 * 7;
|
||||
|
||||
type Store = dyn AuthStore + Send + Sync;
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct GpodderRepository {
|
||||
store: Arc<Store>,
|
||||
store: Arc<dyn Store + Send + Sync>,
|
||||
}
|
||||
|
||||
impl GpodderRepository {
|
||||
pub fn new(store: Box<Store>) -> Self {
|
||||
pub fn new(store: impl Store + Send + Sync + 'static) -> Self {
|
||||
Self {
|
||||
store: Arc::from(store),
|
||||
store: Arc::new(store),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -71,4 +69,17 @@ impl GpodderRepository {
|
|||
pub fn remove_session(&self, session_id: i64) -> Result<(), AuthErr> {
|
||||
self.store.remove_session(session_id)
|
||||
}
|
||||
|
||||
pub fn devices_for_user(&self, user: &models::User) -> Result<Vec<models::Device>, AuthErr> {
|
||||
self.store.devices_for_user(user)
|
||||
}
|
||||
|
||||
pub fn update_device_info(
|
||||
&self,
|
||||
user: &models::User,
|
||||
device_id: &str,
|
||||
patch: models::DevicePatch,
|
||||
) -> Result<(), AuthErr> {
|
||||
self.store.update_device_info(user, device_id, patch)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@ use axum::{
|
|||
};
|
||||
|
||||
use crate::{
|
||||
gpodder::{self, DeviceRepository},
|
||||
gpodder,
|
||||
server::{
|
||||
error::{AppError, AppResult},
|
||||
gpodder::{
|
||||
|
@ -38,7 +38,7 @@ async fn get_devices(
|
|||
}
|
||||
|
||||
Ok(
|
||||
tokio::task::spawn_blocking(move || ctx.repo.devices_for_user(&user))
|
||||
tokio::task::spawn_blocking(move || ctx.store.devices_for_user(&user))
|
||||
.await
|
||||
.unwrap()
|
||||
.map(Json)?,
|
||||
|
@ -55,7 +55,7 @@ async fn post_device(
|
|||
return Err(AppError::NotFound);
|
||||
}
|
||||
|
||||
tokio::task::spawn_blocking(move || ctx.repo.update_device_info(&user, &id, patch))
|
||||
tokio::task::spawn_blocking(move || ctx.store.update_device_info(&user, &id, patch))
|
||||
.await
|
||||
.unwrap()?;
|
||||
|
||||
|
|
Loading…
Reference in New Issue