Files
Oxicloud/src/domain/repositories/session_repository.rs
T

58 lines
1.9 KiB
Rust
Raw Normal View History

2025-03-20 09:22:31 +01:00
use crate::common::errors::DomainError;
2026-02-14 01:29:34 +01:00
use crate::domain::entities::session::Session;
use uuid::Uuid;
2025-03-20 09:22:31 +01:00
#[derive(Debug, thiserror::Error)]
pub enum SessionRepositoryError {
#[error("Session not found: {0}")]
2025-03-20 09:22:31 +01:00
NotFound(String),
2026-02-14 01:29:34 +01:00
#[error("Database error: {0}")]
2025-03-20 09:22:31 +01:00
DatabaseError(String),
2026-02-14 01:29:34 +01:00
#[error("Timeout error: {0}")]
2025-03-20 09:22:31 +01:00
Timeout(String),
}
pub type SessionRepositoryResult<T> = Result<T, SessionRepositoryError>;
// Conversion from SessionRepositoryError to DomainError
2025-03-20 09:22:31 +01:00
impl From<SessionRepositoryError> for DomainError {
fn from(err: SessionRepositoryError) -> Self {
match err {
2026-02-14 01:29:34 +01:00
SessionRepositoryError::NotFound(msg) => DomainError::not_found("Session", msg),
2025-03-20 09:22:31 +01:00
SessionRepositoryError::DatabaseError(msg) => {
DomainError::internal_error("Database", msg)
2026-02-14 01:29:34 +01:00
}
SessionRepositoryError::Timeout(msg) => DomainError::timeout("Database", msg),
2025-03-20 09:22:31 +01:00
}
}
}
pub trait SessionRepository: Send + Sync + 'static {
/// Creates a new session
2025-03-20 09:22:31 +01:00
async fn create_session(&self, session: Session) -> SessionRepositoryResult<Session>;
2026-02-14 01:29:34 +01:00
/// Gets a session by ID
async fn get_session_by_id(&self, id: Uuid) -> SessionRepositoryResult<Session>;
2026-02-14 01:29:34 +01:00
/// Gets a session by refresh token
2026-02-14 01:29:34 +01:00
async fn get_session_by_refresh_token(
&self,
refresh_token: &str,
) -> SessionRepositoryResult<Session>;
/// Gets all sessions for a user
async fn get_sessions_by_user_id(&self, user_id: Uuid)
2026-02-14 01:29:34 +01:00
-> SessionRepositoryResult<Vec<Session>>;
/// Revokes a specific session
async fn revoke_session(&self, session_id: Uuid) -> SessionRepositoryResult<()>;
2026-02-14 01:29:34 +01:00
/// Revokes all sessions for a user
async fn revoke_all_user_sessions(&self, user_id: Uuid) -> SessionRepositoryResult<u64>;
2026-02-14 01:29:34 +01:00
/// Deletes expired sessions
2025-03-20 09:22:31 +01:00
async fn delete_expired_sessions(&self) -> SessionRepositoryResult<u64>;
2026-02-14 01:29:34 +01:00
}