use crate::{Error, UserId};
use async_trait::async_trait;
use chrono::{DateTime, Utc};
#[derive(Debug, Clone)]
pub struct PasskeyCredential {
pub user_id: UserId,
pub credential_id: Vec<u8>,
pub public_key: Vec<u8>,
pub name: Option<String>,
pub created_at: DateTime<Utc>,
pub last_used_at: Option<DateTime<Utc>>,
}
#[async_trait]
pub trait PasskeyRepository: Send + Sync + 'static {
async fn add_credential(
&self,
user_id: &UserId,
credential_id: Vec<u8>,
public_key: Vec<u8>,
name: Option<String>,
) -> Result<PasskeyCredential, Error>;
async fn get_credentials_for_user(
&self,
user_id: &UserId,
) -> Result<Vec<PasskeyCredential>, Error>;
async fn get_credential(
&self,
credential_id: &[u8],
) -> Result<Option<PasskeyCredential>, Error>;
async fn update_last_used(&self, credential_id: &[u8]) -> Result<(), Error>;
async fn delete_credential(&self, credential_id: &[u8]) -> Result<(), Error>;
async fn delete_all_for_user(&self, user_id: &UserId) -> Result<(), Error>;
}