cala_server/graphql/
transaction.rs1use 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}