edc_dataplane_core/core/db/
transfer.rs

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