mirror of
https://git.dirksys.ovh/dirk/bankserver.git
synced 2025-12-20 02:59:20 +01:00
59 lines
1.6 KiB
Rust
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>));
|