use async_trait::async_trait;
use crate::web::error::WebResult;
use crate::web::models::metadata::{FavoriteItem, HistoryItem};
mod sqlite;
pub use sqlite::SqliteStorage;
#[async_trait]
pub trait MetadataStorage: Send + Sync {
async fn add_history(&self, item: &HistoryItem) -> WebResult<()>;
async fn get_history(
&self,
session_id: &str,
limit: usize,
offset: usize,
) -> WebResult<(Vec<HistoryItem>, i64)>;
async fn delete_history(&self, id: &str, session_id: &str) -> WebResult<()>;
async fn clear_history(&self, session_id: &str) -> WebResult<()>;
async fn add_favorite(&self, item: &FavoriteItem) -> WebResult<()>;
async fn get_favorites(&self, session_id: &str) -> WebResult<Vec<FavoriteItem>>;
async fn get_favorite(&self, id: &str, session_id: &str) -> WebResult<FavoriteItem>;
async fn update_favorite(
&self,
id: &str,
session_id: &str,
item: &FavoriteItem,
) -> WebResult<()>;
async fn delete_favorite(&self, id: &str, session_id: &str) -> WebResult<()>;
async fn delete_all_favorites(&self, session_id: &str) -> WebResult<()>;
}