use serde::{Deserialize, Serialize};
use crate::common_types::Signature;
use crate::network::ChainId;
use crate::postgres::{PostgresClient, PostgresError};
use crate::relayer::RelayerId;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RecordSignedTypedDataRequest {
pub relayer_id: RelayerId,
pub domain_data: serde_json::Value,
pub message_data: serde_json::Value,
pub primary_type: String,
pub signature: Signature,
pub chain_id: ChainId,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RecordSignedTextRequest {
pub relayer_id: RelayerId,
pub message: String,
pub signature: Signature,
pub chain_id: ChainId,
}
impl PostgresClient {
pub async fn record_signed_text(
&self,
request: &RecordSignedTextRequest,
) -> Result<(), PostgresError> {
let query = r#"
INSERT INTO signing.text_history (relayer_id, message, signature, chain_id)
VALUES ($1, $2, $3, $4);
"#;
let conn = self.pool.get().await?;
conn.execute(
query,
&[&request.relayer_id, &request.message, &request.signature, &request.chain_id],
)
.await?;
Ok(())
}
pub async fn record_signed_typed_data(
&self,
request: &RecordSignedTypedDataRequest,
) -> Result<(), PostgresError> {
let query = r#"
INSERT INTO signing.typed_data_history (relayer_id, domain_data, message_data, primary_type, signature, chain_id)
VALUES ($1, $2, $3, $4, $5, $6);
"#;
let conn = self.pool.get().await?;
conn.execute(
query,
&[
&request.relayer_id,
&request.domain_data,
&request.message_data,
&request.primary_type,
&request.signature,
&request.chain_id,
],
)
.await?;
Ok(())
}
}