edc_dataplane_core/core/db/
transfer.rs1use async_trait::async_trait;
2use bon::{builder, Builder};
3use miwa::derive::interface;
4
5use crate::core::model::transfer::{Transfer, TransferStatus};
6
7#[cfg(test)]
8use mockall::{automock, predicate::*};
9
10#[async_trait]
11#[interface]
12#[cfg_attr(test, automock)]
13pub trait TransferRepo {
14 async fn save(&self, transfer: Transfer) -> anyhow::Result<()>;
15 async fn fetch_by_id(&self, transfer_id: &str) -> anyhow::Result<Option<Transfer>>;
16 async fn delete(&self, transfer_id: &str) -> anyhow::Result<()>;
17 async fn query(&self, query: TransferQuery) -> anyhow::Result<Vec<Transfer>>;
18 async fn change_status(
19 &self,
20 transfer_id: String,
21 status: TransferStatus,
22 ) -> anyhow::Result<()>;
23}
24
25#[derive(Builder)]
26pub struct TransferQuery {
27 #[builder(default = 50)]
28 pub limit: i32,
29 #[builder(default = 0)]
30 pub offset: i32,
31 #[builder(into)]
32 pub id: Option<String>,
33}