//! 事务处理
use std::fmt::Debug;
use crate::tina::data::AppResult;
/// 事务接口
#[async_trait]
pub trait ITransactionService: Debug + Send + Sync + 'static {
/// 事务客户端
type Client: Send + 'static;
/// 开启新事务, 返回新事务的客户端
async fn new_transaction(&self) -> AppResult<Self::Client>;
/// 请求事务, 如果已开启事务, 则不作处理
async fn require_transaction(&self) -> AppResult<()>;
/// 挂起当前事务, 并返回一个新的客户端
async fn pend_transaction(&self) -> AppResult<Self::Client>;
/// 提交当前的数据库事务
async fn commit_transaction(&self) -> AppResult<()>;
/// 回滚当前的数据库事务
async fn rollback_transaction(&self) -> AppResult<()>;
/// 判断是否存在事务
async fn is_in_transaction(&self) -> AppResult<bool>;
}