Skip to main content

boarddown_core/
storage.rs

1use 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}