bankserver_rust/bank_core/src/transaction.rs
2025-03-16 16:21:45 +01:00

59 lines
1.6 KiB
Rust

use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use uuid::Uuid;
use crate::{
account::ReducedAccountInfo,
make_schemas,
pagination::{Pagination, PaginationType, RequestPagination},
user::User,
};
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq)]
#[cfg_attr(feature = "schemas", derive(schemars::JsonSchema))]
pub struct Transaction {
pub from: Uuid,
pub to: Uuid,
pub amount: u64,
pub timestamp: DateTime<Utc>,
pub message: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq)]
#[cfg_attr(feature = "schemas", derive(schemars::JsonSchema))]
pub struct FullTransaction {
pub from: Participant,
pub to: Participant,
pub amount: u64,
pub timestamp: DateTime<Utc>,
pub message: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq)]
#[cfg_attr(feature = "schemas", derive(schemars::JsonSchema))]
#[serde(rename_all = "lowercase")]
pub enum Direction {
Received,
Sent,
}
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq)]
#[cfg_attr(feature = "schemas", derive(schemars::JsonSchema))]
pub struct Participant {
pub user: User,
pub account: ReducedAccountInfo,
}
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq)]
pub struct TransactionQuery {
#[serde(flatten)]
pub pagination: RequestPagination,
pub direction: Option<Direction>,
}
impl PaginationType for FullTransaction {
const NAME: &str = "Transactions";
}
make_schemas!((Direction); (Transaction, FullTransaction, Pagination<FullTransaction>));