openzeppelin_relayer/domain/transaction/
util.rs1use actix_web::web::ThinData;
7
8use crate::{
9 domain::get_relayer_by_id,
10 jobs::JobProducerTrait,
11 models::{
12 ApiError, DefaultAppState, NetworkRepoModel, NotificationRepoModel, RelayerRepoModel,
13 SignerRepoModel, ThinDataAppState, TransactionError, TransactionRepoModel,
14 },
15 repositories::{
16 NetworkRepository, PluginRepositoryTrait, RelayerRepository, Repository,
17 TransactionCounterTrait, TransactionRepository,
18 },
19};
20
21use super::{NetworkTransaction, RelayerTransactionFactory};
22
23pub async fn get_transaction_by_id<J, RR, TR, NR, NFR, SR, TCR, PR>(
35 transaction_id: String,
36 state: &ThinDataAppState<J, RR, TR, NR, NFR, SR, TCR, PR>,
37) -> Result<TransactionRepoModel, ApiError>
38where
39 J: JobProducerTrait + Send + Sync + 'static,
40 RR: RelayerRepository + Repository<RelayerRepoModel, String> + Send + Sync + 'static,
41 TR: TransactionRepository + Repository<TransactionRepoModel, String> + Send + Sync + 'static,
42 NR: NetworkRepository + Repository<NetworkRepoModel, String> + Send + Sync + 'static,
43 NFR: Repository<NotificationRepoModel, String> + Send + Sync + 'static,
44 SR: Repository<SignerRepoModel, String> + Send + Sync + 'static,
45 TCR: TransactionCounterTrait + Send + Sync + 'static,
46 PR: PluginRepositoryTrait + Send + Sync + 'static,
47{
48 state
49 .transaction_repository
50 .get_by_id(transaction_id)
51 .await
52 .map_err(|e| e.into())
53}
54
55pub async fn get_relayer_transaction(
66 relayer_id: String,
67 state: &ThinData<DefaultAppState>,
68) -> Result<NetworkTransaction, ApiError> {
69 let relayer_model = get_relayer_by_id(relayer_id, state).await?;
70 let signer_model = state
71 .signer_repository
72 .get_by_id(relayer_model.signer_id.clone())
73 .await?;
74
75 RelayerTransactionFactory::create_transaction(
76 relayer_model,
77 signer_model,
78 state.relayer_repository(),
79 state.network_repository(),
80 state.transaction_repository(),
81 state.transaction_counter_store(),
82 state.job_producer(),
83 )
84 .await
85 .map_err(|e| e.into())
86}
87
88pub async fn get_relayer_transaction_by_model(
99 relayer_model: RelayerRepoModel,
100 state: &ThinData<DefaultAppState>,
101) -> Result<NetworkTransaction, ApiError> {
102 let signer_model = state
103 .signer_repository
104 .get_by_id(relayer_model.signer_id.clone())
105 .await?;
106
107 RelayerTransactionFactory::create_transaction(
108 relayer_model,
109 signer_model,
110 state.relayer_repository(),
111 state.network_repository(),
112 state.transaction_repository(),
113 state.transaction_counter_store(),
114 state.job_producer(),
115 )
116 .await
117 .map_err(|e| e.into())
118}
119
120pub fn solana_not_supported_transaction<T>() -> Result<T, TransactionError> {
126 Err(TransactionError::NotSupported(
127 "Endpoint is not supported for Solana relayers".to_string(),
128 ))
129}