use chrono::{DateTime, Utc};
use stateset_core::Result;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct HttpIdempotencyRecord {
pub tenant: String,
pub idempotency_key: String,
pub request_fingerprint: String,
pub response_status: u16,
pub content_type: Option<String>,
pub response_body: Vec<u8>,
pub created_at: DateTime<Utc>,
}
pub trait HttpIdempotencyRepository: Send + Sync {
fn get(
&self,
tenant: &str,
key: &str,
expired_before: DateTime<Utc>,
) -> Result<Option<HttpIdempotencyRecord>>;
fn put(&self, record: &HttpIdempotencyRecord) -> Result<bool>;
fn purge_expired(&self, expired_before: DateTime<Utc>) -> Result<u64>;
}