use uuid::Uuid;
use crate::repositories::{CreditBalanceEntity, CreditTransactionEntity};
#[derive(Debug)]
pub struct CreditBalance {
pub balance_lamports: i64,
pub held_lamports: i64,
pub available_lamports: i64,
pub currency: String,
pub display: String,
}
impl CreditBalance {
pub(crate) fn from_entity(entity: CreditBalanceEntity) -> Self {
let available = entity.available();
let sol_amount = available as f64 / 1_000_000_000.0;
Self {
balance_lamports: entity.balance,
held_lamports: entity.held_balance,
available_lamports: available,
currency: entity.currency,
display: format!("{:.4} SOL", sol_amount),
}
}
}
#[derive(Debug)]
pub struct CreditHistoryItem {
pub id: Uuid,
pub amount_lamports: i64,
pub currency: String,
pub tx_type: String,
pub deposit_session_id: Option<Uuid>,
pub created_at: chrono::DateTime<chrono::Utc>,
}
impl From<CreditTransactionEntity> for CreditHistoryItem {
fn from(entity: CreditTransactionEntity) -> Self {
Self {
id: entity.id,
amount_lamports: entity.amount,
currency: entity.currency,
tx_type: entity.tx_type.as_str().to_string(),
deposit_session_id: entity.deposit_session_id,
created_at: entity.created_at,
}
}
}
pub struct CreditHistory {
pub items: Vec<CreditHistoryItem>,
pub total: u64,
pub limit: u32,
pub offset: u32,
}
#[derive(Debug)]
pub struct SpendResult {
pub transaction_id: Uuid,
pub new_balance_lamports: i64,
pub amount_lamports: i64,
}
#[derive(Debug)]
pub struct HoldResult {
pub hold_id: Uuid,
pub is_new: bool,
pub amount_lamports: i64,
pub expires_at: chrono::DateTime<chrono::Utc>,
}
#[derive(Debug)]
pub struct AdjustResult {
pub transaction_id: Uuid,
pub new_balance_lamports: i64,
pub amount_lamports: i64,
}