boarddown_core/
storage.rs1use boarddown_schema::{Board, BoardId, Task, TaskId};
2use crate::{Query, Error};
3use crate::crdt::{Changeset, Version};
4
5#[async_trait::async_trait]
6pub trait Storage: Send + Sync {
7 async fn load_board(&self, id: &BoardId) -> Result<Board, Error>;
8 async fn save_board(&self, board: &Board) -> Result<(), Error>;
9 async fn delete_board(&self, id: &BoardId) -> Result<(), Error>;
10 async fn list_boards(&self) -> Result<Vec<BoardId>, Error>;
11
12 async fn load_task(&self, board_id: &BoardId, task_id: &TaskId) -> Result<Task, Error>;
13 async fn save_task(&self, board_id: &BoardId, task: &Task) -> Result<(), Error>;
14 async fn delete_task(&self, board_id: &BoardId, task_id: &TaskId) -> Result<(), Error>;
15
16 async fn query(&self, board_id: &BoardId, query: Query) -> Result<Vec<Task>, Error>;
17
18 async fn search(&self, board_id: &BoardId, query: &str) -> Result<Vec<SearchResult>, Error> {
19 let _ = (board_id, query);
20 Ok(Vec::new())
21 }
22
23 async fn get_changeset(&self, board_id: &BoardId, since: Version) -> Result<Changeset, Error>;
24 async fn apply_changeset(&self, board_id: &BoardId, changeset: &Changeset) -> Result<(), Error>;
25}
26
27#[derive(Debug, Clone)]
28pub struct SearchResult {
29 pub task_id: TaskId,
30 pub title: String,
31 pub snippet: String,
32 pub rank: f64,
33}
34
35#[async_trait::async_trait]
36pub trait Transaction: Send + Sync {
37 async fn get_task(&mut self, board_id: &BoardId, task_id: &TaskId) -> Result<Task, Error>;
38 async fn save_task(&mut self, board_id: &BoardId, task: &Task) -> Result<(), Error>;
39 async fn commit(self) -> Result<(), Error>;
40 async fn rollback(self) -> Result<(), Error>;
41}