cala_server/graphql/
transaction.rs

1use async_graphql::*;
2
3use super::{convert::ToGlobalId, primitives::*};
4
5#[derive(InputObject)]
6pub struct TransactionInput {
7    pub transaction_id: UUID,
8    pub tx_template_code: String,
9    pub params: Option<JSON>,
10}
11
12#[derive(Clone, SimpleObject)]
13pub struct Transaction {
14    id: ID,
15    transaction_id: UUID,
16    version: u32,
17    tx_template_id: UUID,
18    journal_id: UUID,
19    effective: Date,
20    correlation_id: String,
21    external_id: Option<String>,
22    description: Option<String>,
23    metadata: Option<JSON>,
24    created_at: Timestamp,
25    modified_at: Timestamp,
26}
27
28#[derive(SimpleObject)]
29pub struct TransactionPostPayload {
30    pub transaction: Transaction,
31}
32
33impl ToGlobalId for cala_ledger::TransactionId {
34    fn to_global_id(&self) -> async_graphql::types::ID {
35        use base64::{engine::general_purpose, Engine as _};
36        let id = format!(
37            "transaction:{}",
38            general_purpose::STANDARD_NO_PAD.encode(self.to_string())
39        );
40        async_graphql::types::ID::from(id)
41    }
42}
43
44impl From<cala_ledger::transaction::Transaction> for Transaction {
45    fn from(entity: cala_ledger::transaction::Transaction) -> Self {
46        let created_at = entity.created_at();
47        let modified_at = entity.modified_at();
48        let values = entity.into_values();
49        Self {
50            id: values.id.to_global_id(),
51            transaction_id: UUID::from(values.id),
52            version: values.version,
53            tx_template_id: UUID::from(values.tx_template_id),
54            journal_id: UUID::from(values.journal_id),
55            effective: Date::from(values.effective),
56            correlation_id: values.correlation_id,
57            external_id: values.external_id,
58            description: values.description,
59            metadata: values.metadata.map(JSON::from),
60            created_at: Timestamp::from(created_at),
61            modified_at: Timestamp::from(modified_at),
62        }
63    }
64}
65
66impl From<cala_ledger::transaction::Transaction> for TransactionPostPayload {
67    fn from(value: cala_ledger::transaction::Transaction) -> Self {
68        Self {
69            transaction: Transaction::from(value),
70        }
71    }
72}