linkrs_server/web/
storage.rs1use async_trait::async_trait;
8
9use crate::web::error::WebResult;
10use crate::web::models::metadata::{FavoriteItem, HistoryItem};
11
12mod sqlite;
13
14pub use sqlite::SqliteStorage;
15
16#[async_trait]
18pub trait MetadataStorage: Send + Sync {
19 async fn add_history(&self, item: &HistoryItem) -> WebResult<()>;
21
22 async fn get_history(
24 &self,
25 session_id: &str,
26 limit: usize,
27 offset: usize,
28 ) -> WebResult<(Vec<HistoryItem>, i64)>;
29
30 async fn delete_history(&self, id: &str, session_id: &str) -> WebResult<()>;
32
33 async fn clear_history(&self, session_id: &str) -> WebResult<()>;
35
36 async fn add_favorite(&self, item: &FavoriteItem) -> WebResult<()>;
38
39 async fn get_favorites(&self, session_id: &str) -> WebResult<Vec<FavoriteItem>>;
41
42 async fn get_favorite(&self, id: &str, session_id: &str) -> WebResult<FavoriteItem>;
44
45 async fn update_favorite(
47 &self,
48 id: &str,
49 session_id: &str,
50 item: &FavoriteItem,
51 ) -> WebResult<()>;
52
53 async fn delete_favorite(&self, id: &str, session_id: &str) -> WebResult<()>;
55
56 async fn delete_all_favorites(&self, session_id: &str) -> WebResult<()>;
58}