use chrono::NaiveDateTime;
use serde::{Deserialize, Serialize};
use sqlx::FromRow;
use crate::status::TransactionStatus;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, FromRow)]
#[serde(rename_all = "camelCase")]
#[sqlx(rename_all = "camelCase")]
pub struct Transaction {
#[sqlx(rename = "created_at")]
#[serde(
rename = "created_at",
alias = "createdAt",
with = "crate::serde_datetime"
)]
pub created_at: NaiveDateTime,
#[sqlx(rename = "updated_at")]
#[serde(
rename = "updated_at",
alias = "updatedAt",
with = "crate::serde_datetime"
)]
pub updated_at: NaiveDateTime,
pub transaction_id: i64,
pub user_id: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub proven_tx_id: Option<i64>,
pub status: TransactionStatus,
pub reference: String,
pub is_outgoing: bool,
pub satoshis: i64,
pub description: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub version: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub lock_time: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub txid: Option<String>,
#[serde(rename = "inputBEEF", skip_serializing_if = "Option::is_none")]
#[sqlx(rename = "inputBEEF")]
pub input_beef: Option<Vec<u8>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub raw_tx: Option<Vec<u8>>,
}