Skip to main content

boarddown_core/
storage.rs

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