use crate::database::{DbAccessToken, DbAuditLog, DbAuthCode, DbOAuthClient}; use anyhow::Result; pub mod sqlite; pub use sqlite::{ SqliteAuditRepository, SqliteAuthCodeRepository, SqliteClientRepository, SqliteRateRepository, SqliteTokenRepository, }; /// Repository trait for OAuth client operations pub trait ClientRepository: Send + Sync { fn get_client(&self, client_id: &str) -> Result>; fn create_client(&self, client: &DbOAuthClient) -> Result<()>; fn update_client(&self, client: &DbOAuthClient) -> Result<()>; fn delete_client(&self, client_id: &str) -> Result<()>; fn list_clients(&self) -> Result>; } /// Repository trait for authorization code operations pub trait AuthCodeRepository: Send + Sync { fn create_auth_code(&self, code: &DbAuthCode) -> Result<()>; fn get_auth_code(&self, code: &str) -> Result>; fn mark_auth_code_used(&self, code: &str) -> Result<()>; fn cleanup_expired_codes(&self) -> Result<()>; } /// Repository trait for access token operations pub trait TokenRepository: Send + Sync { fn create_access_token(&self, token: &DbAccessToken) -> Result<()>; fn get_access_token(&self, token_hash: &str) -> Result>; fn revoke_access_token(&self, token_hash: &str) -> Result<()>; fn cleanup_expired_tokens(&self) -> Result<()>; } /// Repository trait for audit log operations pub trait AuditRepository: Send + Sync { fn create_audit_log(&self, log: &DbAuditLog) -> Result<()>; fn get_audit_logs(&self, limit: Option) -> Result>; fn cleanup_old_audit_logs(&self, days: i32) -> Result<()>; } /// Repository trait for rate limiting operations pub trait RateRepository: Send + Sync { fn increment_rate_limit( &self, identifier: &str, endpoint: &str, window_size: i32, ) -> Result; fn cleanup_old_rate_limits(&self) -> Result<()>; }