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