From 386e4ec6ba5d2c09900e48f497646db823ebf88e Mon Sep 17 00:00:00 2001 From: Brooks Townsend Date: Thu, 14 Dec 2023 11:34:05 -0500 Subject: [PATCH] feat: scaffold repository Signed-off-by: Brooks Townsend --- Justfile | 5 +- aggregate/.cargo/config.toml | 5 - aggregate/.gitignore | 16 - .../.keys/bankaccount_aggregate_module.nk | 1 - aggregate/Cargo.toml | 27 -- aggregate/README.md | 33 --- aggregate/src/commands.rs | 199 ------------- aggregate/src/events.rs | 119 -------- aggregate/src/lib.rs | 136 --------- aggregate/src/state.rs | 69 ----- aggregate/wasmcloud.toml | 7 - eventcatalog/README.md | 4 - eventcatalog/all_events.png | Bin 233310 -> 0 bytes eventcatalog/events/AccountCreated/index.md | 20 -- .../events/AccountCreated/schema.json | 26 -- eventcatalog/events/CommitFunds/index.md | 19 -- eventcatalog/events/CommitFunds/schema.json | 22 -- eventcatalog/events/CreateAccount/index.md | 17 -- eventcatalog/events/CreateAccount/schema.json | 25 -- eventcatalog/events/DepositFunds/index.md | 17 -- eventcatalog/events/DepositFunds/schema.json | 30 -- eventcatalog/events/FundsCommitted/index.md | 20 -- .../events/FundsCommitted/schema.json | 22 -- eventcatalog/events/FundsDeposited/index.md | 20 -- .../events/FundsDeposited/schema.json | 26 -- eventcatalog/events/FundsReleased/index.md | 21 -- eventcatalog/events/FundsReleased/schema.json | 22 -- eventcatalog/events/FundsReserved/index.md | 21 -- eventcatalog/events/FundsReserved/schema.json | 26 -- eventcatalog/events/FundsWithdrawn/index.md | 20 -- .../events/FundsWithdrawn/schema.json | 26 -- eventcatalog/events/ReleaseFunds/index.md | 20 -- eventcatalog/events/ReleaseFunds/schema.json | 23 -- eventcatalog/events/ReserveFunds/index.md | 19 -- eventcatalog/events/ReserveFunds/schema.json | 26 -- eventcatalog/events/WireFunds/index.md | 17 -- eventcatalog/events/WireFunds/schema.json | 44 --- .../events/WireTransferFailed/index.md | 19 -- .../events/WireTransferFailed/schema.json | 33 --- .../events/WireTransferInitiated/index.md | 21 -- .../events/WireTransferInitiated/schema.json | 45 --- .../events/WireTransferSucceeded/index.md | 18 -- .../events/WireTransferSucceeded/schema.json | 30 -- eventcatalog/events/WithdrawFunds/index.md | 20 -- eventcatalog/events/WithdrawFunds/schema.json | 26 -- eventcatalog/package-lock.json | 4 +- eventcatalog/package.json | 2 +- .../services/Bank Account Aggregate/index.md | 11 - .../services/Bank Account Projector/index.md | 11 - .../Wire Transfer Process Manager/index.md | 18 -- process_manager/.cargo/config.toml | 5 - process_manager/.gitignore | 16 - .../bankaccount_processmanager_module.nk | 1 - .../wiretransfer_processmanager_module.nk | 1 - process_manager/Cargo.toml | 27 -- process_manager/README.md | 2 - process_manager/src/lib.rs | 175 ----------- process_manager/wasmcloud.toml | 7 - projector/.cargo/config.toml | 5 - projector/.gitignore | 16 - .../.keys/bankaccount_projector_module.nk | 1 - projector/Cargo.toml | 28 -- projector/README.md | 22 -- projector/src/lib.rs | 38 --- projector/src/store.rs | 275 ------------------ projector/wasmcloud.toml | 7 - wadm.yaml | 68 +---- 67 files changed, 6 insertions(+), 2116 deletions(-) delete mode 100644 aggregate/.cargo/config.toml delete mode 100644 aggregate/.gitignore delete mode 100644 aggregate/.keys/bankaccount_aggregate_module.nk delete mode 100644 aggregate/Cargo.toml delete mode 100644 aggregate/README.md delete mode 100644 aggregate/src/commands.rs delete mode 100644 aggregate/src/events.rs delete mode 100644 aggregate/src/lib.rs delete mode 100644 aggregate/src/state.rs delete mode 100644 aggregate/wasmcloud.toml delete mode 100644 eventcatalog/all_events.png delete mode 100644 eventcatalog/events/AccountCreated/index.md delete mode 100644 eventcatalog/events/AccountCreated/schema.json delete mode 100644 eventcatalog/events/CommitFunds/index.md delete mode 100644 eventcatalog/events/CommitFunds/schema.json delete mode 100644 eventcatalog/events/CreateAccount/index.md delete mode 100644 eventcatalog/events/CreateAccount/schema.json delete mode 100644 eventcatalog/events/DepositFunds/index.md delete mode 100644 eventcatalog/events/DepositFunds/schema.json delete mode 100644 eventcatalog/events/FundsCommitted/index.md delete mode 100644 eventcatalog/events/FundsCommitted/schema.json delete mode 100644 eventcatalog/events/FundsDeposited/index.md delete mode 100644 eventcatalog/events/FundsDeposited/schema.json delete mode 100644 eventcatalog/events/FundsReleased/index.md delete mode 100644 eventcatalog/events/FundsReleased/schema.json delete mode 100644 eventcatalog/events/FundsReserved/index.md delete mode 100644 eventcatalog/events/FundsReserved/schema.json delete mode 100644 eventcatalog/events/FundsWithdrawn/index.md delete mode 100644 eventcatalog/events/FundsWithdrawn/schema.json delete mode 100644 eventcatalog/events/ReleaseFunds/index.md delete mode 100644 eventcatalog/events/ReleaseFunds/schema.json delete mode 100644 eventcatalog/events/ReserveFunds/index.md delete mode 100644 eventcatalog/events/ReserveFunds/schema.json delete mode 100644 eventcatalog/events/WireFunds/index.md delete mode 100644 eventcatalog/events/WireFunds/schema.json delete mode 100644 eventcatalog/events/WireTransferFailed/index.md delete mode 100644 eventcatalog/events/WireTransferFailed/schema.json delete mode 100644 eventcatalog/events/WireTransferInitiated/index.md delete mode 100644 eventcatalog/events/WireTransferInitiated/schema.json delete mode 100644 eventcatalog/events/WireTransferSucceeded/index.md delete mode 100644 eventcatalog/events/WireTransferSucceeded/schema.json delete mode 100644 eventcatalog/events/WithdrawFunds/index.md delete mode 100644 eventcatalog/events/WithdrawFunds/schema.json delete mode 100644 eventcatalog/services/Bank Account Aggregate/index.md delete mode 100644 eventcatalog/services/Bank Account Projector/index.md delete mode 100644 eventcatalog/services/Wire Transfer Process Manager/index.md delete mode 100644 process_manager/.cargo/config.toml delete mode 100644 process_manager/.gitignore delete mode 100644 process_manager/.keys/bankaccount_processmanager_module.nk delete mode 100644 process_manager/.keys/wiretransfer_processmanager_module.nk delete mode 100644 process_manager/Cargo.toml delete mode 100644 process_manager/README.md delete mode 100644 process_manager/src/lib.rs delete mode 100644 process_manager/wasmcloud.toml delete mode 100644 projector/.cargo/config.toml delete mode 100644 projector/.gitignore delete mode 100644 projector/.keys/bankaccount_projector_module.nk delete mode 100644 projector/Cargo.toml delete mode 100644 projector/README.md delete mode 100644 projector/src/lib.rs delete mode 100644 projector/src/store.rs delete mode 100644 projector/wasmcloud.toml diff --git a/Justfile b/Justfile index 314eb3a..e6023c6 100644 --- a/Justfile +++ b/Justfile @@ -10,10 +10,7 @@ build: (cd $dir && wash build); \ done -version := "0.3.0" +version := "0.0.0" push: # Push to GHCR - wash push ghcr.io/cosmonic/cosmonic-gitops/wiretransfer_processmanager:{{version}} process_manager/build/wiretransfer_processmanager_s.wasm - wash push ghcr.io/cosmonic/cosmonic-gitops/bankaccount_projector:{{version}} projector/build/bankaccount_projector_s.wasm - wash push ghcr.io/cosmonic/cosmonic-gitops/bankaccount_aggregate:{{version}} aggregate/build/bankaccount_aggregate_s.wasm wash push ghcr.io/cosmonic/cosmonic-gitops/bankaccount_catalog:{{version}} eventcatalog/actor/build/bankaccountcatalog_s.wasm \ No newline at end of file diff --git a/aggregate/.cargo/config.toml b/aggregate/.cargo/config.toml deleted file mode 100644 index 4905f77..0000000 --- a/aggregate/.cargo/config.toml +++ /dev/null @@ -1,5 +0,0 @@ -[build] -target = "wasm32-unknown-unknown" - -[net] -git-fetch-with-cli = true \ No newline at end of file diff --git a/aggregate/.gitignore b/aggregate/.gitignore deleted file mode 100644 index 262ca9a..0000000 --- a/aggregate/.gitignore +++ /dev/null @@ -1,16 +0,0 @@ -# Generated by Cargo -# will have compiled files and executables -debug/ -target/ - -# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries -# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html -Cargo.lock - -# These are backup files generated by rustfmt -**/*.rs.bk - -# MSVC Windows builds of rustc generate these, which store debugging information -*.pdb - -build/ diff --git a/aggregate/.keys/bankaccount_aggregate_module.nk b/aggregate/.keys/bankaccount_aggregate_module.nk deleted file mode 100644 index 54994b7..0000000 --- a/aggregate/.keys/bankaccount_aggregate_module.nk +++ /dev/null @@ -1 +0,0 @@ -SMANGOYSDZ4P3SG4GDUXECMO2J2GFOIV6NQJWGFOVA3GZBSXMGZT5GWFJ4 \ No newline at end of file diff --git a/aggregate/Cargo.toml b/aggregate/Cargo.toml deleted file mode 100644 index 40909a6..0000000 --- a/aggregate/Cargo.toml +++ /dev/null @@ -1,27 +0,0 @@ -[package] -name = "bankaccount-aggregate" -version = "0.3.0" -authors = ["Cosmonic Team"] -edition = "2021" - -[lib] -crate-type = ["cdylib", "rlib"] -name = "bankaccount_aggregate" - -[dependencies] -anyhow = "1.0.40" -async-trait = "0.1" -futures = { version = "0.3", features = ["executor"] } -serde_bytes = "0.11" -serde_json = "1.0.94" -serde = { version = "1.0", features = ["derive"] } -wasmbus-rpc = "0.14.0" -concordance-gen = { git = "https://github.com/cosmonic/concordance"} -wasmcloud-interface-logging = {version = "0.10.0", features = ["sync_macro"]} -regress = "0.7.1" - -[profile.release] -# Optimize for small code size -lto = true -opt-level = "s" -strip = true \ No newline at end of file diff --git a/aggregate/README.md b/aggregate/README.md deleted file mode 100644 index 4c02bb9..0000000 --- a/aggregate/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# Bank Account Aggregate -This aggregate represents the sum of events on the `bankaccount` stream, which is keyed by the account number on the commands and events in this logical stream. - -# Configuration -The following configuration values should be set for this aggregate to work properly. -* `ROLE` - `aggregate` -* `INTEREST` - `bankaccount` -* `NAME` - `bankaccount` -* `KEY` - `account_number` - -# Manual Testing -You can send the following commands manually to watch the aggregate perform its tasks: - -## Creating an Account -You can use the following `nats req` command (edit the data as you see fit) to create a new account by submitting a new `create_account` command: -``` -nats req cc.commands.bankaccount '{"command_type": "create_account", "key": "ABC123", "data": {"account_number": "ABC123", "initial_balance": 4000, "min_balance": 100, "customer_id": "CUSTBOB"}}' -``` -You should receive a reply that looks something like this: -``` -11:25:05 Sending request on "cc.commands.bankaccount" -11:25:05 Received with rtt 281.083µs -{"stream":"CC_COMMANDS", "seq":2} -``` - -And now you can verify that you have indeed created the `ABC123` account (note the key is account number and not customer ID). -``` -nats kv get CC_STATE agg.bankaccount.ABC123 -CC_STATE > agg.bankaccount.ABC123 created @ 20 Mar 23 15:25 UTC - -{"balance":4000,"min_balance":100,"account_number":"ABC123"} -``` - diff --git a/aggregate/src/commands.rs b/aggregate/src/commands.rs deleted file mode 100644 index a58cba9..0000000 --- a/aggregate/src/commands.rs +++ /dev/null @@ -1,199 +0,0 @@ -use crate::*; - -pub(crate) fn handle_reserve_funds( - input: ReserveFunds, - state: Option, -) -> Result { - let Some(old_state) = state else { - return Err(anyhow::anyhow!( - "Rejected command to reserve funds. Account {} does not exist.", - input.account_number - )); - }; - let avail_balance = old_state.available_balance(); - if input.amount as u32 > avail_balance { - error!( - "Rejecting command to reserve funds, account {} does not have sufficient funds. Available {}", - &input.account_number, avail_balance - ); - Ok(vec![]) - } else { - Ok(vec![Event::new( - FundsReserved::TYPE, - STREAM, - &FundsReserved { - account_number: input.account_number.to_string(), - wire_transfer_id: input.wire_transfer_id, - customer_id: old_state.customer_id.to_string(), - amount: input.amount, - }, - )]) - } -} - -pub(crate) fn handle_release_funds( - input: ReleaseFunds, - state: Option, -) -> Result { - let Some(old_state) = state else { - return Err(anyhow::anyhow!( - "Rejected command to release funds. Account {} does not exist.", - input.account_number - )); - }; - - if old_state - .reserved_funds - .contains_key(&input.wire_transfer_id) - { - Ok(vec![Event::new( - FundsReleased::TYPE, - STREAM, - &FundsReleased { - customer_id: input.customer_id, - account_number: input.account_number.to_string(), - wire_transfer_id: input.wire_transfer_id.to_string(), - }, - )]) - } else { - error!( - "Rejecting command to release funds, account {} does not have a wire transfer hold for {}", - &input.account_number, input.wire_transfer_id - ); - Ok(vec![]) - } -} - -pub(crate) fn handle_commit_funds( - input: CommitFunds, - state: Option, -) -> Result { - let Some(old_state) = state else { - return Err(anyhow::anyhow!( - "Rejected command to commit funds. Account {} does not exist.", - input.account_number - )); - }; - - if old_state - .reserved_funds - .contains_key(&input.wire_transfer_id) - { - Ok(vec![Event::new( - FundsCommitted::TYPE, - STREAM, - &FundsCommitted { - customer_id: input.customer_id, - account_number: input.account_number.to_string(), - wire_transfer_id: input.wire_transfer_id.to_string(), - }, - )]) - } else { - error!( - "Rejecting command to commit funds, account {} does not have a wire transfer hold for {}", - &input.account_number, input.wire_transfer_id - ); - Ok(vec![]) - } -} - -pub(crate) fn handle_create_account(input: CreateAccount) -> Result { - Ok(vec![Event::new( - AccountCreated::TYPE, - STREAM, - &AccountCreated { - initial_balance: input.initial_balance, - account_number: input.account_number.to_string(), - min_balance: input.min_balance, - customer_id: input.customer_id, - }, - )]) -} - -pub(crate) fn handle_withdraw_funds( - input: WithdrawFunds, - state: Option, -) -> Result { - let Some(state) = state else { - return Err(anyhow::anyhow!( - "Rejected command to withdraw funds. Account {} does not exist.", - input.account_number - )); - }; - - if state.available_balance() < input.amount as u32 { - error!( - "Rejecting command to withdraw funds, account {} does not have sufficient funds. Available {}", - &input.account_number, state.available_balance() - ); - Ok(vec![]) - } else { - Ok(vec![Event::new( - FundsWithdrawn::TYPE, - STREAM, - &FundsWithdrawn { - note: input.note, - account_number: input.account_number.to_string(), - amount: input.amount, - customer_id: input.customer_id, - }, - )]) - } -} - -pub(crate) fn handle_wire_funds( - input: WireFunds, - state: Option, -) -> Result { - let Some(state) = state else { - return Err(anyhow::anyhow!( - "Rejected command to wire funds. Account {} does not exist.", - input.account_number - )); - }; - - if state.available_balance() < input.amount as u32 { - error!( - "Rejecting command to wire funds, account {} does not have sufficient funds. Available {}", - &input.account_number, state.available_balance() - ); - Ok(vec![]) - } else { - Ok(vec![Event::new( - WireTransferInitiated::TYPE, - STREAM, - &WireTransferInitiated { - note: input.note, - account_number: input.target_account_number, - target_routing_number: input.target_routing_number, - target_account_number: input.account_number, - amount: input.amount, - customer_id: input.customer_id, - wire_transfer_id: input.wire_transaction_id, - }, - )]) - } -} - -pub(crate) fn handle_deposit_funds( - input: DepositFunds, - state: Option, -) -> Result { - if state.is_none() { - return Err(anyhow::anyhow!( - "Rejected command to deposit funds. Account {} does not exist.", - input.account_number - )); - }; - - Ok(vec![Event::new( - FundsDeposited::TYPE, - STREAM, - &FundsDeposited { - note: input.note, - account_number: input.account_number.to_string(), - amount: input.amount, - customer_id: input.customer_id, - }, - )]) -} diff --git a/aggregate/src/events.rs b/aggregate/src/events.rs deleted file mode 100644 index 95541fa..0000000 --- a/aggregate/src/events.rs +++ /dev/null @@ -1,119 +0,0 @@ -use crate::*; - -impl From for BankAccountAggregateState { - fn from(input: AccountCreated) -> BankAccountAggregateState { - BankAccountAggregateState { - balance: input.initial_balance.unwrap_or(0) as _, - min_balance: input.min_balance.unwrap_or(0) as _, - account_number: input.account_number, - customer_id: input.customer_id, - reserved_funds: HashMap::new(), - } - } -} - -pub(crate) fn apply_account_created(input: AccountCreated) -> Result { - Ok(StateAck::ok(Some(BankAccountAggregateState::from(input)))) -} - -pub(crate) fn apply_funds_deposited( - input: FundsDeposited, - state: Option, -) -> Result { - let Some(state) = state else { - error!( - "Rejecting funds deposited event. Account {} does not exist.", - input.account_number - ); - return Ok(StateAck::error( - "Account does not exist", - None::, - )); - }; - let state = BankAccountAggregateState { - balance: state.balance + input.amount as u32, - ..state - }; - Ok(StateAck::ok(Some(state))) -} - -pub(crate) fn apply_funds_released( - input: FundsReleased, - state: Option, -) -> Result { - let Some(state) = state else { - error!( - "Rejecting funds released event. Account {} does not exist.", - input.account_number - ); - return Ok(StateAck::error( - "Account does not exist", - None::, - )); - }; - let state = state.release_funds(&input.wire_transfer_id); - Ok(StateAck::ok(Some(state))) -} - -pub(crate) fn apply_funds_committed( - input: FundsCommitted, - state: Option, -) -> Result { - let Some(state) = state else { - error!( - "Rejecting funds committed event. Account {} does not exist.", - input.account_number - ); - return Ok(StateAck::error( - "Account does not exist", - None::, - )); - }; - let state = state.commit_funds(&input.wire_transfer_id); - Ok(StateAck::ok(Some(state))) -} - -pub(crate) fn apply_funds_reserved( - input: FundsReserved, - state: Option, -) -> Result { - let Some(state) = state else { - error!( - "Rejecting funds reserved event. Account {} does not exist.", - input.account_number - ); - return Ok(StateAck::error( - "Account does not exist", - None::, - )); - }; - let state = state.reserve_funds(&input.wire_transfer_id, input.amount as u32); - Ok(StateAck::ok(Some(state))) -} - -pub(crate) fn apply_funds_withdrawn( - input: FundsWithdrawn, - state: Option, -) -> Result { - let Some(state) = state else { - error!( - "Rejecting funds withdrawn event. Account {} does not exist.", - input.account_number - ); - return Ok(StateAck::error( - "Account does not exist", - None::, - )); - }; - let state = state.withdraw(input.amount as u32); - Ok(StateAck::ok(Some(state))) -} - -pub(crate) fn apply_wire_transfer_initiated( - _input: WireTransferInitiated, - state: Option, -) -> Result { - // We don't currently change internal state because of this. The first time a wire transfer - // impacts the the account is when funds are reserved (by the process manager) - Ok(StateAck::ok(state)) -} diff --git a/aggregate/src/lib.rs b/aggregate/src/lib.rs deleted file mode 100644 index efbdc1f..0000000 --- a/aggregate/src/lib.rs +++ /dev/null @@ -1,136 +0,0 @@ -use anyhow::Result; -use std::collections::HashMap; - -use serde::{Deserialize, Serialize}; -use wasmcloud_interface_logging::error; - -mod commands; -mod events; -mod state; - -use state::BankAccountAggregateState; - -concordance_gen::generate!({ - path: "../eventcatalog", - role: "aggregate", - entity: "bank account" -}); - -impl BankAccountAggregate for BankAccountAggregateImpl { - // -- Commands -- - fn handle_reserve_funds( - &self, - input: ReserveFunds, - state: Option, - ) -> anyhow::Result { - commands::handle_reserve_funds(input, state) - } - - fn handle_release_funds( - &self, - input: ReleaseFunds, - state: Option, - ) -> anyhow::Result { - commands::handle_release_funds(input, state) - } - - fn handle_commit_funds( - &self, - input: CommitFunds, - state: Option, - ) -> anyhow::Result { - commands::handle_commit_funds(input, state) - } - - fn handle_create_account( - &self, - input: CreateAccount, - _state: Option, - ) -> anyhow::Result { - commands::handle_create_account(input) - } - - fn handle_withdraw_funds( - &self, - input: WithdrawFunds, - state: Option, - ) -> anyhow::Result { - commands::handle_withdraw_funds(input, state) - } - - fn handle_wire_funds( - &self, - input: WireFunds, - state: Option, - ) -> anyhow::Result { - commands::handle_wire_funds(input, state) - } - - fn handle_deposit_funds( - &self, - input: DepositFunds, - state: Option, - ) -> anyhow::Result { - commands::handle_deposit_funds(input, state) - } - - // -- Events -- - - fn apply_account_created( - &self, - input: AccountCreated, - _state: Option, - ) -> anyhow::Result { - events::apply_account_created(input) - } - - fn apply_funds_deposited( - &self, - input: FundsDeposited, - state: Option, - ) -> anyhow::Result { - events::apply_funds_deposited(input, state) - } - - fn apply_funds_released( - &self, - input: FundsReleased, - state: Option, - ) -> anyhow::Result { - events::apply_funds_released(input, state) - } - - fn apply_funds_committed( - &self, - input: FundsCommitted, - state: Option, - ) -> anyhow::Result { - events::apply_funds_committed(input, state) - } - - fn apply_funds_reserved( - &self, - input: FundsReserved, - state: Option, - ) -> anyhow::Result { - events::apply_funds_reserved(input, state) - } - - fn apply_funds_withdrawn( - &self, - input: FundsWithdrawn, - state: Option, - ) -> anyhow::Result { - events::apply_funds_withdrawn(input, state) - } - - fn apply_wire_transfer_initiated( - &self, - input: WireTransferInitiated, - state: Option, - ) -> anyhow::Result { - events::apply_wire_transfer_initiated(input, state) - } -} - -const STREAM: &str = "bankaccount"; diff --git a/aggregate/src/state.rs b/aggregate/src/state.rs deleted file mode 100644 index b3aaa9c..0000000 --- a/aggregate/src/state.rs +++ /dev/null @@ -1,69 +0,0 @@ -use crate::*; - -#[derive(Serialize, Deserialize, Default, Debug, Clone)] -pub struct BankAccountAggregateState { - pub balance: u32, // CENTS - pub min_balance: u32, - pub account_number: String, - pub customer_id: String, - pub reserved_funds: HashMap, // wire_transfer_id -> amount -} - -impl BankAccountAggregateState { - /// Returns the regular balance minus the sum of transfer holds - pub fn available_balance(&self) -> u32 { - self.balance - .checked_sub(self.reserved_funds.values().sum::()) - .unwrap_or(0) - } - - /// Returns the total amount of funds on hold - pub fn total_reserved(&self) -> u32 { - self.reserved_funds.values().sum::() - } - - /// Releases the funds associated with a wire transfer hold. Has no affect on actual balance, only available - pub fn release_funds(self, reservation_id: &str) -> Self { - let mut new_state = self.clone(); - new_state.reserved_funds.remove(reservation_id); - - new_state - } - - /// Adds a reservation hold for a given wire transfer. Has no affect on actual balance, only available - pub fn reserve_funds(self, reservation_id: &str, amount: u32) -> Self { - let mut new_state = self.clone(); - new_state - .reserved_funds - .insert(reservation_id.to_string(), amount); - new_state - } - - /// Commits held funds. Subtracts held funds from balance. Note: A more realistic banking - /// app might emit an overdrawn/overdraft event if the new balance is less than 0. Here we - /// just floor the balance at 0. Also note that overcommits shouldn't happen because we reject - /// attempts to hold beyond available funds - pub fn commit_funds(self, reservation_id: &str) -> Self { - let mut new_state = self.clone(); - let amount = new_state.reserved_funds.remove(reservation_id).unwrap_or(0); - new_state.balance = new_state.balance.checked_sub(amount).unwrap_or(0); - new_state - } - - /// Withdraws a given amount of funds - pub fn withdraw(self, amount: u32) -> Self { - let mut new_state = self.clone(); - new_state.balance = new_state.balance.checked_sub(amount).unwrap_or(0); - new_state - } - - /// Deposits a given amount of funds. Ceilings at u32::MAX - pub fn deposit(self, amount: u32) -> Self { - let mut new_state = self.clone(); - new_state.balance = new_state - .balance - .checked_add(amount) - .unwrap_or(new_state.balance); - new_state - } -} diff --git a/aggregate/wasmcloud.toml b/aggregate/wasmcloud.toml deleted file mode 100644 index ecd3909..0000000 --- a/aggregate/wasmcloud.toml +++ /dev/null @@ -1,7 +0,0 @@ -name = "BankAccountAggregate" -language = "rust" -type = "actor" - -[actor] -key_directory = "./.keys" -claims = ["cosmonic:eventsourcing", "wasmcloud:builtin:logging"] diff --git a/eventcatalog/README.md b/eventcatalog/README.md index c0caa4f..086c479 100644 --- a/eventcatalog/README.md +++ b/eventcatalog/README.md @@ -17,7 +17,3 @@ npm run build cd actor wash build ``` - -## All Events - -![All Bank Account Events](./all_events.png) diff --git a/eventcatalog/all_events.png b/eventcatalog/all_events.png deleted file mode 100644 index dae3e9e9634783626b3ca37e52d0954fb31cf047..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 233310 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Í@G49FMe|pW3rsY2>ZZvI^ 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

9HE2_6XBceoz3g)_Mo3vM}b;+ddk>{ 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%0AIZRVP6wbD@H*EP!EQ;;Zw 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 uu;Jg_Vgei90VL+-BcT5-BH+2w%-KZ(R - -## Schema - \ No newline at end of file diff --git a/eventcatalog/events/AccountCreated/schema.json b/eventcatalog/events/AccountCreated/schema.json deleted file mode 100644 index 32d1bd2..0000000 --- a/eventcatalog/events/AccountCreated/schema.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "$id": "https://cosmonic.com/concordance/bankaccount/AccountCreated.json", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "title": "AccountCreated", - "type": "object", - "properties": { - "accountNumber": { - "type": "string", - "description": "The account number of the new account" - }, - "minBalance": { - "type": "integer", - "description": "The minimum required maintenance balance for the account" - }, - "initialBalance": { - "type": "integer", - "description": "Initial deposit amount for the account" - }, - "customerId": { - "type": "string", - "description": "The ID of the customer" - } - }, - "required": ["accountNumber", "customerId"] - } - \ No newline at end of file diff --git a/eventcatalog/events/CommitFunds/index.md b/eventcatalog/events/CommitFunds/index.md deleted file mode 100644 index ec7caa0..0000000 --- a/eventcatalog/events/CommitFunds/index.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -name: CommitFunds -summary: "A request to commit funds under hold to a wire transfer" -version: 0.0.1 -consumers: - - 'Bank Account Aggregate' -producers: - - 'Wire Transfer Process Manager' -tags: - - label: 'command' -externalLinks: [] -badges: [] ---- -A request to commit the funds currently on hold for a given wire transfer. - - - -## Schema - \ No newline at end of file diff --git a/eventcatalog/events/CommitFunds/schema.json b/eventcatalog/events/CommitFunds/schema.json deleted file mode 100644 index dc6a4db..0000000 --- a/eventcatalog/events/CommitFunds/schema.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "$id": "https://cosmonic.com/concordance/bankaccount/CommitFunds.json", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "title": "CommitFunds", - "type": "object", - "properties": { - "accountNumber": { - "type": "string", - "description": "The account number" - }, - "customerId": { - "type": "string", - "description": "The ID of the customer performing the withdrawal" - }, - "wireTransferId": { - "type": "string", - "description": "A unique ID identifying the wire transfer transaction" - } - }, - "required": ["accountNumber", "customerId", "wireTransferId"] - } - \ No newline at end of file diff --git a/eventcatalog/events/CreateAccount/index.md b/eventcatalog/events/CreateAccount/index.md deleted file mode 100644 index ba54d68..0000000 --- a/eventcatalog/events/CreateAccount/index.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -name: CreateAccount -summary: "Requests the creation of a new bank account" -version: 0.0.1 -consumers: - - 'Bank Account Aggregate' -tags: - - label: 'command' -externalLinks: [] -badges: [] ---- -Requests the creation of a new bank account. This command can fail to process if the parameters are invalid or if the account already exists. - - - -## Schema - \ No newline at end of file diff --git a/eventcatalog/events/CreateAccount/schema.json b/eventcatalog/events/CreateAccount/schema.json deleted file mode 100644 index 8dabe27..0000000 --- a/eventcatalog/events/CreateAccount/schema.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "$id": "https://cosmonic.com/concordance/bankaccount/CreateAccount.json", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "title": "CreateAccount", - "type": "object", - "properties": { - "accountNumber": { - "type": "string", - "description": "The account number to be created" - }, - "minBalance": { - "type": "integer", - "description": "The minimum required maintenance balance for the account" - }, - "initialBalance": { - "type": "integer", - "description": "Initial deposit amount for the account" - }, - "customerId": { - "type": "string", - "description": "The ID of the customer" - } - }, - "required": ["accountNumber", "customerId"] -} diff --git a/eventcatalog/events/DepositFunds/index.md b/eventcatalog/events/DepositFunds/index.md deleted file mode 100644 index c744127..0000000 --- a/eventcatalog/events/DepositFunds/index.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -name: DepositFunds -summary: "A request to deposit funds into an account" -version: 0.0.1 -consumers: - - 'Bank Account Aggregate' -tags: - - label: 'command' -externalLinks: [] -badges: [] ---- -Requests the deposit of a specified amount into the account. This command can fail to process if the parameters are invalid. - - - -## Schema - \ No newline at end of file diff --git a/eventcatalog/events/DepositFunds/schema.json b/eventcatalog/events/DepositFunds/schema.json deleted file mode 100644 index ad2a2cc..0000000 --- a/eventcatalog/events/DepositFunds/schema.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "$id": "https://cosmonic.com/concordance/bankaccount/DepositFunds.json", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "title": "DepositFunds", - "type": "object", - "properties": { - "accountNumber": { - "type": "string", - "description": "The account number" - }, - "amount": { - "type": "integer", - "description": "The amount to deposit" - }, - "note": { - "type": "string", - "description": "An optional note to be associated with the deposit" - }, - "customerId": { - "type": "string", - "description": "The ID of the customer performing the deposit" - }, - "transferId": { - "type": "string", - "description": "A unique ID identifying the transfer transaction if applicable" - } - }, - "required": ["accountNumber", "amount", "customerId"] - } - \ No newline at end of file diff --git a/eventcatalog/events/FundsCommitted/index.md b/eventcatalog/events/FundsCommitted/index.md deleted file mode 100644 index dfa1b00..0000000 --- a/eventcatalog/events/FundsCommitted/index.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: FundsCommitted -summary: "Indicates that reserved funds were committed and withdrawn" -version: 0.0.1 -consumers: - - 'Bank Account Aggregate' - - 'Wire Transfer Process Manager' -producers: - - 'Bank Account Aggregate' -tags: - - label: 'event' -externalLinks: [] -badges: [] ---- -Indicates that previously held funds were withdrawn from the account. In the interest of simplicity, this example doesn't support partially committed funds or funds that are required to clear in increments of some small value. - - - -## Schema - \ No newline at end of file diff --git a/eventcatalog/events/FundsCommitted/schema.json b/eventcatalog/events/FundsCommitted/schema.json deleted file mode 100644 index 06eb023..0000000 --- a/eventcatalog/events/FundsCommitted/schema.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "$id": "https://cosmonic.com/concordance/bankaccount/FundsCommitted.json", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "title": "FundsCommitted", - "type": "object", - "properties": { - "accountNumber": { - "type": "string", - "description": "The account number" - }, - "customerId": { - "type": "string", - "description": "The ID of the customer" - }, - "wireTransferId": { - "type": "string", - "description": "A unique ID identifying the wire transfer transaction" - } - }, - "required": ["accountNumber", "customerId", "wireTransferId"] - } - \ No newline at end of file diff --git a/eventcatalog/events/FundsDeposited/index.md b/eventcatalog/events/FundsDeposited/index.md deleted file mode 100644 index 5093f99..0000000 --- a/eventcatalog/events/FundsDeposited/index.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: FundsDeposited -summary: "Indicates funds have been deposited into an account" -version: 0.0.1 -consumers: - - 'Bank Account Aggregate' - - 'Bank Account Projector' -producers: - - 'Bank Account Aggregate' -tags: - - label: 'event' -externalLinks: [] -badges: [] ---- -Indicates that funds have been deposited into an account. - - - -## Schema - \ No newline at end of file diff --git a/eventcatalog/events/FundsDeposited/schema.json b/eventcatalog/events/FundsDeposited/schema.json deleted file mode 100644 index e3a8211..0000000 --- a/eventcatalog/events/FundsDeposited/schema.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "$id": "https://cosmonic.com/concordance/bankaccount/FundsDeposited.json", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "title": "FundsDeposited", - "type": "object", - "properties": { - "accountNumber": { - "type": "string", - "description": "The account number" - }, - "amount": { - "type": "integer", - "description": "The amount deposited" - }, - "note": { - "type": "string", - "description": "An optional note to associated with the deposit" - }, - "customerId": { - "type": "string", - "description": "The ID of the customer that performed the deposit" - } - }, - "required": ["accountNumber", "amount", "customerId"] - } - \ No newline at end of file diff --git a/eventcatalog/events/FundsReleased/index.md b/eventcatalog/events/FundsReleased/index.md deleted file mode 100644 index af8ed44..0000000 --- a/eventcatalog/events/FundsReleased/index.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -name: FundsReleased -summary: "Indicates that reserved funds were released" -version: 0.0.1 -consumers: - - 'Bank Account Aggregate' - - 'Wire Transfer Process Manager' - - 'Bank Account Projector' -producers: - - 'Bank Account Aggregate' -tags: - - label: 'event' -externalLinks: [] -badges: [] ---- -Indicates that held funds were released as part of a failed or canceled transfer. - - - -## Schema - \ No newline at end of file diff --git a/eventcatalog/events/FundsReleased/schema.json b/eventcatalog/events/FundsReleased/schema.json deleted file mode 100644 index f23c698..0000000 --- a/eventcatalog/events/FundsReleased/schema.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "$id": "https://cosmonic.com/concordance/bankaccount/FundsReleased.json", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "title": "FundsReleased", - "type": "object", - "properties": { - "accountNumber": { - "type": "string", - "description": "The account number" - }, - "customerId": { - "type": "string", - "description": "The ID of the customer" - }, - "wireTransferId": { - "type": "string", - "description": "A unique ID identifying the wire transfer transaction" - } - }, - "required": ["accountNumber", "customerId", "wireTransferId"] - } - \ No newline at end of file diff --git a/eventcatalog/events/FundsReserved/index.md b/eventcatalog/events/FundsReserved/index.md deleted file mode 100644 index cc6378d..0000000 --- a/eventcatalog/events/FundsReserved/index.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -name: FundsReserved -summary: "Indicates funds have been placed on hold for a wire transfer" -version: 0.0.1 -consumers: - - 'Bank Account Aggregate' - - 'Wire Transfer Process Manager' - - 'Bank Account Projector' -producers: - - 'Bank Account Aggregate' -tags: - - label: 'event' -externalLinks: [] -badges: [] ---- -Indicates that the funds to be used in a wire transfer have been reserved/placed on hold. - - - -## Schema - \ No newline at end of file diff --git a/eventcatalog/events/FundsReserved/schema.json b/eventcatalog/events/FundsReserved/schema.json deleted file mode 100644 index 5c28d49..0000000 --- a/eventcatalog/events/FundsReserved/schema.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "$id": "https://cosmonic.com/concordance/bankaccount/FundsReserved.json", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "title": "FundsReserved", - "type": "object", - "properties": { - "accountNumber": { - "type": "string", - "description": "The account number" - }, - "amount": { - "type": "integer", - "description": "The amount reserved" - }, - "customerId": { - "type": "string", - "description": "The ID of the customer" - }, - "wireTransferId": { - "type": "string", - "description": "A unique ID identifying the wire transfer transaction" - } - }, - "required": ["accountNumber", "amount", "customerId", "wireTransferId"] - } - \ No newline at end of file diff --git a/eventcatalog/events/FundsWithdrawn/index.md b/eventcatalog/events/FundsWithdrawn/index.md deleted file mode 100644 index b1dbc81..0000000 --- a/eventcatalog/events/FundsWithdrawn/index.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: FundsWithdrawn -summary: "Indicates a successful withdrawal of funds" -version: 0.0.1 -consumers: - - 'Bank Account Aggregate' - - 'Bank Account Projector' -producers: - - 'Bank Account Aggregate' -tags: - - label: 'event' -externalLinks: [] -badges: [] ---- -Indicates funds have been withdrawn from the account - - - -## Schema - \ No newline at end of file diff --git a/eventcatalog/events/FundsWithdrawn/schema.json b/eventcatalog/events/FundsWithdrawn/schema.json deleted file mode 100644 index 8f6f7ec..0000000 --- a/eventcatalog/events/FundsWithdrawn/schema.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "$id": "https://cosmonic.com/concordance/bankaccount/FundsWithdrawn.json", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "title": "FundsWithdrawn", - "type": "object", - "properties": { - "accountNumber": { - "type": "string", - "description": "The account number" - }, - "amount": { - "type": "integer", - "description": "The amount withdrawn" - }, - "note": { - "type": "string", - "description": "An optional note associated with the withdrawal" - }, - "customerId": { - "type": "string", - "description": "The ID of the customer that performed the withdrawal" - } - }, - "required": ["accountNumber", "amount", "customerId"] - } - \ No newline at end of file diff --git a/eventcatalog/events/ReleaseFunds/index.md b/eventcatalog/events/ReleaseFunds/index.md deleted file mode 100644 index 3c39437..0000000 --- a/eventcatalog/events/ReleaseFunds/index.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: ReleaseFunds -summary: "A request to release funds from a wire transfer" -version: 0.0.1 -consumers: - - 'Bank Account Aggregate' -producers: - - 'Wire Transfer Process Manager' -tags: - - label: 'command' -externalLinks: [] -badges: [] ---- -Requests that funds held for a given wire transfer are to be released. Note that this command can be rejected if no such -wire transfer is known to the aggregate. - - - -## Schema - \ No newline at end of file diff --git a/eventcatalog/events/ReleaseFunds/schema.json b/eventcatalog/events/ReleaseFunds/schema.json deleted file mode 100644 index 3c7d79b..0000000 --- a/eventcatalog/events/ReleaseFunds/schema.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "$id": "https://cosmonic.com/concordance/bankaccount/ReleaseFunds.json", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "title": "ReleaseFunds", - "type": "object", - "description": "A request to release funds from a wire transfer", - "properties": { - "accountNumber": { - "type": "string", - "description": "The account number" - }, - "customerId": { - "type": "string", - "description": "The ID of the customer" - }, - "wireTransferId": { - "type": "string", - "description": "A unique ID identifying the wire transfer transaction" - } - }, - "required": ["accountNumber", "customerId", "wireTransferId"] - } - \ No newline at end of file diff --git a/eventcatalog/events/ReserveFunds/index.md b/eventcatalog/events/ReserveFunds/index.md deleted file mode 100644 index bb71ec4..0000000 --- a/eventcatalog/events/ReserveFunds/index.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -name: ReserveFunds -summary: "A request to place wire transfer funds on hold" -version: 0.0.1 -consumers: - - 'Bank Account Aggregate' -producers: - - 'Wire Transfer Process Manager' -tags: - - label: 'command' -externalLinks: [] -badges: [] ---- -A request to place on hold the funds to be involved in a given wire transfer - - - -## Schema - \ No newline at end of file diff --git a/eventcatalog/events/ReserveFunds/schema.json b/eventcatalog/events/ReserveFunds/schema.json deleted file mode 100644 index 14ec612..0000000 --- a/eventcatalog/events/ReserveFunds/schema.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "$id": "https://cosmonic.com/concordance/bankaccount/ReserveFunds.json", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "title": "ReserveFunds", - "type": "object", - "properties": { - "accountNumber": { - "type": "string", - "description": "The account number" - }, - "amount": { - "type": "integer", - "description": "The amount to reserve" - }, - "customerId": { - "type": "string", - "description": "The ID of the customer performing the withdrawal" - }, - "wireTransferId": { - "type": "string", - "description": "A unique ID identifying the wire transfer transaction" - } - }, - "required": ["accountNumber", "amount", "customerId", "wireTransferId"] - } - \ No newline at end of file diff --git a/eventcatalog/events/WireFunds/index.md b/eventcatalog/events/WireFunds/index.md deleted file mode 100644 index 42423cd..0000000 --- a/eventcatalog/events/WireFunds/index.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -name: WireFunds -summary: "A request to wire funds to another account at another bank" -version: 0.0.1 -consumers: - - 'Bank Account Aggregate' -tags: - - label: 'command' -externalLinks: [] -badges: [] ---- -Requests the wiring of a specified amount to another account at another bank. This command can fail to process if the parameters are invalid or if the source account does not have sufficient funds. This will result in the _holding_ of the funds until the wire is completed or cancelled. - - - -## Schema - \ No newline at end of file diff --git a/eventcatalog/events/WireFunds/schema.json b/eventcatalog/events/WireFunds/schema.json deleted file mode 100644 index 7838c57..0000000 --- a/eventcatalog/events/WireFunds/schema.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "$id": "https://cosmonic.com/concordance/bankaccount/WireFunds.json", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "title": "WireFunds", - "type": "object", - "properties": { - "accountNumber": { - "type": "string", - "description": "The source account number" - }, - "amount": { - "type": "integer", - "description": "The amount to be transferred to the target account" - }, - "note": { - "type": "string", - "description": "An optional note to be associated with the wire transfer" - }, - "customerId": { - "type": "string", - "description": "The ID of the customer performing the transfer" - }, - "wireTransactionId": { - "type": "string", - "description": "A unique ID identifying the wire transfer transaction" - }, - "targetRoutingNumber": { - "type": "string", - "description": "The routing number of the target bank" - }, - "targetAccountNumber": { - "type": "string", - "description": "The account number of the target account" - } - }, - "required": [ - "accountNumber", - "amount", - "customerId", - "wireTransactionId", - "targetRoutingNumber", - "targetAccountNumber" - ] -} diff --git a/eventcatalog/events/WireTransferFailed/index.md b/eventcatalog/events/WireTransferFailed/index.md deleted file mode 100644 index 6ddb412..0000000 --- a/eventcatalog/events/WireTransferFailed/index.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -name: WireTransferFailed -summary: "Indicates that a wire transfer process failed" -version: 0.0.1 -consumers: - - 'Wire Transfer Process Manager' -tags: - - label: 'event' - - label: 'external' -externalLinks: [] -badges: [] ---- -This event is published from an external source to indicate that the wire transfer process failed. -Note that this event doesn't have any internal information like customer ID because it originates from outside the system. - - - -## Schema - \ No newline at end of file diff --git a/eventcatalog/events/WireTransferFailed/schema.json b/eventcatalog/events/WireTransferFailed/schema.json deleted file mode 100644 index 6252642..0000000 --- a/eventcatalog/events/WireTransferFailed/schema.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "$id": "https://cosmonic.com/concordance/bankaccount/WireTransferFailed.json", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "title": "WireTransferFailed", - "type": "object", - "properties": { - "note": { - "type": "string", - "description": "An optional note describing the reason for failure" - }, - "wireTransferId": { - "type": "string", - "description": "A unique ID identifying the wire transfer transaction" - }, - "targetRoutingNumber": { - "type": "string", - "description": "The routing number of the target bank" - }, - "targetAccountNumber": { - "type": "string", - "description": "The account number of the target account" - } - }, - "required": [ - "accountNumber", - "amount", - "customerId", - "wireTransferId", - "targetRoutingNumber", - "targetAccountNumber" - ] - } - \ No newline at end of file diff --git a/eventcatalog/events/WireTransferInitiated/index.md b/eventcatalog/events/WireTransferInitiated/index.md deleted file mode 100644 index 5f128e9..0000000 --- a/eventcatalog/events/WireTransferInitiated/index.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -name: WireTransferInitiated -summary: "Indicates that a wire transfer process has begun" -version: 0.0.1 -consumers: - - 'Bank Account Projector' - - 'Wire Transfer Process Manager' - - 'Bank Account Aggregate' -producers: - - 'Bank Account Aggregate' -tags: - - label: 'event' -externalLinks: [] -badges: [] ---- -Indicates that the **process** of a wire transfer has been initiated. External stimuli from a gateway can then emit events to indicate the completion (successful or otherwise) of this process. Funds involved in the transfer are _reserved_ from the account, but not yet _withdrawn_. The funds will either be released or fully withdrawn pending the outcome of the transfer. - - - -## Schema - \ No newline at end of file diff --git a/eventcatalog/events/WireTransferInitiated/schema.json b/eventcatalog/events/WireTransferInitiated/schema.json deleted file mode 100644 index e7ee980..0000000 --- a/eventcatalog/events/WireTransferInitiated/schema.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "$id": "https://cosmonic.com/concordance/bankaccount/WireTransferInitiated.json", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "title": "WireTransferInitiated", - "type": "object", - "properties": { - "accountNumber": { - "type": "string", - "description": "The source account number" - }, - "amount": { - "type": "integer", - "description": "The amount to be transferred to the target account" - }, - "note": { - "type": "string", - "description": "An optional note to be associated with the wire transfer" - }, - "customerId": { - "type": "string", - "description": "The ID of the customer performing the transfer" - }, - "wireTransferId": { - "type": "string", - "description": "A unique ID identifying the wire transfer transaction" - }, - "targetRoutingNumber": { - "type": "string", - "description": "The routing number of the target bank" - }, - "targetAccountNumber": { - "type": "string", - "description": "The account number of the target account" - } - }, - "required": [ - "accountNumber", - "amount", - "customerId", - "wireTransferId", - "targetRoutingNumber", - "targetAccountNumber" - ] - } - \ No newline at end of file diff --git a/eventcatalog/events/WireTransferSucceeded/index.md b/eventcatalog/events/WireTransferSucceeded/index.md deleted file mode 100644 index e5406e0..0000000 --- a/eventcatalog/events/WireTransferSucceeded/index.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -name: WireTransferSucceeded -summary: "Indicates that a wire transfer process completed successfully" -version: 0.0.1 -consumers: - - 'Wire Transfer Process Manager' -tags: - - label: 'event' - - label: 'external' -externalLinks: [] -badges: [] ---- -Indicates that the given wire transfer succeeded. This event has no internal information because it originates from outside the system. - - - -## Schema - \ No newline at end of file diff --git a/eventcatalog/events/WireTransferSucceeded/schema.json b/eventcatalog/events/WireTransferSucceeded/schema.json deleted file mode 100644 index d8e88b7..0000000 --- a/eventcatalog/events/WireTransferSucceeded/schema.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "$id": "https://cosmonic.com/concordance/bankaccount/WireTransferSucceeded.json", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "title": "WireTransferSucceeded", - "type": "object", - "properties": { - "note": { - "type": "string", - "description": "An optional note" - }, - "wireTransferId": { - "type": "string", - "description": "A unique ID identifying the wire transfer transaction" - }, - "targetRoutingNumber": { - "type": "string", - "description": "The routing number of the target bank" - }, - "targetAccountNumber": { - "type": "string", - "description": "The account number of the target account" - } - }, - "required": [ - "wireTransferId", - "targetRoutingNumber", - "targetAccountNumber" - ] - } - \ No newline at end of file diff --git a/eventcatalog/events/WithdrawFunds/index.md b/eventcatalog/events/WithdrawFunds/index.md deleted file mode 100644 index 7234da9..0000000 --- a/eventcatalog/events/WithdrawFunds/index.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: WithdrawFunds -summary: "A request to withdraw funds from an account" -version: 0.0.1 -consumers: - - 'Bank Account Aggregate' -tags: - - label: 'command' -externalLinks: [] -badges: [] ---- -Requests the withdrawal of a specified amount from the account. This command can fail to process if the parameters are invalid or if the account does not have sufficient funds. - -Note that there is a design decision here. You can allow the withdrawal to go through even if there is insufficient funds, and then also emit an overdraft event. Or all commands attempting to withdraw below the minimum (or 0 if omitted) are rejected. This is a domain/application decision and -not really something that can be decided by the framework. - - - -## Schema - \ No newline at end of file diff --git a/eventcatalog/events/WithdrawFunds/schema.json b/eventcatalog/events/WithdrawFunds/schema.json deleted file mode 100644 index dc25fbf..0000000 --- a/eventcatalog/events/WithdrawFunds/schema.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "$id": "https://cosmonic.com/concordance/bankaccount/WithdrawFunds.json", - "$schema": "https://json-schema.org/draft/2020-12/schema", - "title": "WithdrawFunds", - "type": "object", - "properties": { - "accountNumber": { - "type": "string", - "description": "The account number" - }, - "amount": { - "type": "integer", - "description": "The amount to withdraw" - }, - "note": { - "type": "string", - "description": "An optional note to be associated with the withdrawal" - }, - "customerId": { - "type": "string", - "description": "The ID of the customer performing the withdrawal" - } - }, - "required": ["accountNumber", "amount", "customerId"] - } - \ No newline at end of file diff --git a/eventcatalog/package-lock.json b/eventcatalog/package-lock.json index 1529e99..12eeef8 100644 --- a/eventcatalog/package-lock.json +++ b/eventcatalog/package-lock.json @@ -1,12 +1,12 @@ { "name": "eventcatalog", - "version": "0.0.1", + "version": "0.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "eventcatalog", - "version": "0.0.1", + "version": "0.0.0", "dependencies": { "@eventcatalog/core": "1.0.1" }, diff --git a/eventcatalog/package.json b/eventcatalog/package.json index 710367d..bc46ce7 100644 --- a/eventcatalog/package.json +++ b/eventcatalog/package.json @@ -1,6 +1,6 @@ { "name": "eventcatalog", - "version": "0.3.0", + "version": "0.0.0", "private": true, "scripts": { "start": "eventcatalog start", diff --git a/eventcatalog/services/Bank Account Aggregate/index.md b/eventcatalog/services/Bank Account Aggregate/index.md deleted file mode 100644 index d032b60..0000000 --- a/eventcatalog/services/Bank Account Aggregate/index.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -name: Bank Account Aggregate -summary: | - The aggregate for managing individual bank accounts -tags: - - label: 'aggregate' ---- - -The bank account aggregate is responsible for validating incoming commands and emitting the appropriate events. - - \ No newline at end of file diff --git a/eventcatalog/services/Bank Account Projector/index.md b/eventcatalog/services/Bank Account Projector/index.md deleted file mode 100644 index 96ce287..0000000 --- a/eventcatalog/services/Bank Account Projector/index.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -name: Bank Account Projector -summary: | - The projector responsible for creating bank account read model -tags: - - label: 'projector' ---- - -This projector monitors bank account events and projects the corresponding read model. - - \ No newline at end of file diff --git a/eventcatalog/services/Wire Transfer Process Manager/index.md b/eventcatalog/services/Wire Transfer Process Manager/index.md deleted file mode 100644 index 5cbc020..0000000 --- a/eventcatalog/services/Wire Transfer Process Manager/index.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -name: Wire Transfer Process Manager -summary: | - The process manager for managing wire transfer processes -tags: - - label: 'procman' ---- - -This process manager is responsible for managing the process of wire transfers. It listens for the `WireTransferInitiated` event and then emits the appropriate commands to continue the process - - - -## Interest -The following indicates the sequential flow of the process manager's interest, which is required for defining link definitions. It's important to note that the process doesn't complete when it receives the fail/succeed events from the outside world. The process is only considered completed when the funds held by the wire transfer are released or committed. - -* `start` - [WireTransferInitiated](../../events/WireTransferInitiated) -* `advance` - [FundsReserved](../../events/FundsReserved), [WireTransferSucceeded](../../events/WireTransferSucceeded), [WireTransferFailed](../../events/WireTransferFailed) -* `end` - [FundsCommitted](../../events/FundsCommitted), [FundsReleased](../../events/FundsReleased) \ No newline at end of file diff --git a/process_manager/.cargo/config.toml b/process_manager/.cargo/config.toml deleted file mode 100644 index 4905f77..0000000 --- a/process_manager/.cargo/config.toml +++ /dev/null @@ -1,5 +0,0 @@ -[build] -target = "wasm32-unknown-unknown" - -[net] -git-fetch-with-cli = true \ No newline at end of file diff --git a/process_manager/.gitignore b/process_manager/.gitignore deleted file mode 100644 index 262ca9a..0000000 --- a/process_manager/.gitignore +++ /dev/null @@ -1,16 +0,0 @@ -# Generated by Cargo -# will have compiled files and executables -debug/ -target/ - -# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries -# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html -Cargo.lock - -# These are backup files generated by rustfmt -**/*.rs.bk - -# MSVC Windows builds of rustc generate these, which store debugging information -*.pdb - -build/ diff --git a/process_manager/.keys/bankaccount_processmanager_module.nk b/process_manager/.keys/bankaccount_processmanager_module.nk deleted file mode 100644 index 923faca..0000000 --- a/process_manager/.keys/bankaccount_processmanager_module.nk +++ /dev/null @@ -1 +0,0 @@ -SMAMWST3KY5Q422MRVTCLPO32YRXODME3VFF5XKGFAHBFJPSFDBU6TQYJY \ No newline at end of file diff --git a/process_manager/.keys/wiretransfer_processmanager_module.nk b/process_manager/.keys/wiretransfer_processmanager_module.nk deleted file mode 100644 index 3bbe95a..0000000 --- a/process_manager/.keys/wiretransfer_processmanager_module.nk +++ /dev/null @@ -1 +0,0 @@ -SMACMFH6REQAXNM4VOQLXOBSFTEG6XVY5QMRXEZIC423RQRUPOLOPFW5WM \ No newline at end of file diff --git a/process_manager/Cargo.toml b/process_manager/Cargo.toml deleted file mode 100644 index 30f4861..0000000 --- a/process_manager/Cargo.toml +++ /dev/null @@ -1,27 +0,0 @@ -[package] -name = "bankaccount-processmanager" -version = "0.3.0" -authors = ["Cosmonic Team"] -edition = "2021" - -[lib] -crate-type = ["cdylib", "rlib"] -name = "wiretransfer_processmanager" - -[dependencies] -anyhow = "1.0.40" -async-trait = "0.1" -futures = { version = "0.3", features = ["executor"] } -serde_bytes = "0.11" -serde_json = "1.0.94" -serde = { version = "1.0", features = ["derive"] } -wasmbus-rpc = "0.14.0" -concordance-gen = { git = "https://github.com/cosmonic/concordance"} -wasmcloud-interface-logging = {version = "0.10.0", features = ["sync_macro"]} -regress = "0.6.0" - -[profile.release] -# Optimize for small code size -lto = true -opt-level = "s" -strip = true diff --git a/process_manager/README.md b/process_manager/README.md deleted file mode 100644 index 8a3c82d..0000000 --- a/process_manager/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# Bank Account Sample - Interbank Transfer Process Manager -TBD \ No newline at end of file diff --git a/process_manager/src/lib.rs b/process_manager/src/lib.rs deleted file mode 100644 index 2364e29..0000000 --- a/process_manager/src/lib.rs +++ /dev/null @@ -1,175 +0,0 @@ -use serde::{Deserialize, Serialize}; - -concordance_gen::generate!({ - path: "../eventcatalog", - role: "process_manager", - entity: "wire transfer" -}); - -#[async_trait] -impl WireTransferProcessManager for WireTransferProcessManagerImpl { - async fn handle_funds_released( - &self, - _input: FundsReleased, - _state: Option, - ) -> RpcResult { - // release of funds is the termination of a transfer process - Ok(ProcessManagerAck::ok( - None::, - vec![], - )) - } - - async fn handle_funds_committed( - &self, - _input: FundsCommitted, - _state: Option, - ) -> RpcResult { - // commitment of funds is the termination of a transfer process - Ok(ProcessManagerAck::ok( - None::, - vec![], - )) - } - - async fn handle_funds_reserved( - &self, - _input: FundsReserved, - state: Option, - ) -> RpcResult { - let Some(mut state) = state else { - return Ok(ProcessManagerAck::ok( - None::, - vec![], - )); - }; - state.status = TransferStatus::FundsReserved; - Ok(ProcessManagerAck::ok(Some(state), vec![])) - } - - async fn handle_wire_transfer_succeeded( - &self, - input: WireTransferSucceeded, - state: Option, - ) -> RpcResult { - let Some(mut state) = state else { - return Ok(ProcessManagerAck::ok( - None::, - vec![], - )); - }; - state.status = TransferStatus::TransferCompleted; - let cmd = CommitFunds { - account_number: state.account_number.to_string(), - customer_id: state.customer_id.to_string(), - wire_transfer_id: input.wire_transfer_id.to_string(), - }; - - Ok(ProcessManagerAck::ok( - Some(state), - vec![OutputCommand::new( - CommitFunds::TYPE, - &cmd, - STREAM, - &cmd.account_number, - )], - )) - } - - async fn handle_wire_transfer_initiated( - &self, - input: WireTransferInitiated, - _state: Option, - ) -> RpcResult { - let state = WireTransferProcessManagerState::new(&input); - - let cmd = ReserveFunds { - customer_id: input.customer_id, - account_number: input.account_number, - amount: input.amount, - wire_transfer_id: input.wire_transfer_id.to_string(), - }; - - Ok(ProcessManagerAck::ok( - Some(state), - vec![OutputCommand::new( - ReserveFunds::TYPE, - &cmd, - STREAM, - &cmd.account_number, - )], - )) - } - - async fn handle_wire_transfer_failed( - &self, - input: WireTransferFailed, - state: Option, - ) -> RpcResult { - let Some(state) = state else { - return Ok(ProcessManagerAck::ok( - None::, - vec![], - )); - }; - let cmd = ReleaseFunds { - account_number: state.account_number.to_string(), - customer_id: state.customer_id.to_string(), - wire_transfer_id: input.wire_transfer_id.to_string(), - }; - Ok(ProcessManagerAck::ok( - Some(state), - vec![OutputCommand::new( - ReleaseFunds::TYPE, - &cmd, - STREAM, - &cmd.account_number, - )], - )) - } -} - -#[derive(Debug, Clone, Serialize, Deserialize, Default)] -pub struct WireTransferProcessManagerState { - pub wire_transfer_id: String, - pub account_number: String, - pub customer_id: String, - pub amount: u32, - pub target_routing_number: String, - pub target_account_number: String, - pub status: TransferStatus, -} - -#[derive(Clone, Serialize, Deserialize, Debug, Default)] -pub enum TransferStatus { - Requested, - FundsReserved, - TransferInitiated, - TransferCompleted, - TransferFailed, - #[default] - Unknown, -} - -impl WireTransferProcessManagerState { - pub fn to_bytes(self) -> Vec { - serde_json::to_vec(&self).unwrap_or_default() - } -} - -impl WireTransferProcessManagerState { - pub fn new(event: &WireTransferInitiated) -> WireTransferProcessManagerState { - let event = event.clone(); - WireTransferProcessManagerState { - wire_transfer_id: event.wire_transfer_id, - account_number: event.account_number, - customer_id: event.customer_id, - amount: event.amount as u32, - target_routing_number: event.target_routing_number, - target_account_number: event.target_account_number, - status: TransferStatus::Requested, - } - } -} - -const STREAM: &str = "bankaccount"; diff --git a/process_manager/wasmcloud.toml b/process_manager/wasmcloud.toml deleted file mode 100644 index 34aa0f4..0000000 --- a/process_manager/wasmcloud.toml +++ /dev/null @@ -1,7 +0,0 @@ -name = "WireTransferProcessManager" -language = "rust" -type = "actor" - -[actor] -key_directory = "./.keys" -claims = ["cosmonic:eventsourcing", "wasmcloud:builtin:logging"] diff --git a/projector/.cargo/config.toml b/projector/.cargo/config.toml deleted file mode 100644 index 4905f77..0000000 --- a/projector/.cargo/config.toml +++ /dev/null @@ -1,5 +0,0 @@ -[build] -target = "wasm32-unknown-unknown" - -[net] -git-fetch-with-cli = true \ No newline at end of file diff --git a/projector/.gitignore b/projector/.gitignore deleted file mode 100644 index 262ca9a..0000000 --- a/projector/.gitignore +++ /dev/null @@ -1,16 +0,0 @@ -# Generated by Cargo -# will have compiled files and executables -debug/ -target/ - -# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries -# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html -Cargo.lock - -# These are backup files generated by rustfmt -**/*.rs.bk - -# MSVC Windows builds of rustc generate these, which store debugging information -*.pdb - -build/ diff --git a/projector/.keys/bankaccount_projector_module.nk b/projector/.keys/bankaccount_projector_module.nk deleted file mode 100644 index 24f7801..0000000 --- a/projector/.keys/bankaccount_projector_module.nk +++ /dev/null @@ -1 +0,0 @@ -SMADQF4DVD4AUK2WAR5RKDW4G2S4TRNS4MS5ADERYQ6STLK7MANGYNQCPA \ No newline at end of file diff --git a/projector/Cargo.toml b/projector/Cargo.toml deleted file mode 100644 index d78a08b..0000000 --- a/projector/Cargo.toml +++ /dev/null @@ -1,28 +0,0 @@ -[package] -name = "bankaccount-projector" -version = "0.3.0" -authors = ["Cosmonic Team"] -edition = "2021" - -[lib] -crate-type = ["cdylib", "rlib"] -name = "bankaccount_projector" - -[dependencies] -anyhow = "1.0.40" -async-trait = "0.1" -futures = { version = "0.3", features = ["executor"] } -serde_bytes = "0.11" -serde_json = "1.0.94" -serde = { version = "1.0", features = ["derive"] } -wasmbus-rpc = "0.14.0" -concordance-gen = { git = "https://github.com/cosmonic/concordance"} -wasmcloud-interface-logging = {version = "0.10.0", features = ["sync_macro"]} -wasmcloud-interface-keyvalue = "0.11.0" -regress = "0.7.1" - -[profile.release] -# Optimize for small code size -lto = true -opt-level = "s" -strip = true \ No newline at end of file diff --git a/projector/README.md b/projector/README.md deleted file mode 100644 index 07e2314..0000000 --- a/projector/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# Bank Account Projector -This projector is responsible for storing read-optimized view data for bank accounts as a function application over the stream of inbound bank account events. - -This projector maintains the following projections: -* **balances** - The current balance of any account can be looked up immediately by querying the key `balance.{account_number}` -* **ledger** - The ledger (chronological transaction history) of any account can be received as a JSON string via the key `ledger.{account_number}` - -⚠️ NOTE: for testing purposes please don't use non-alphanumeric characters for the fake account numbers as it could potentially mess up key value storage depending on the chosen provider's support for complex keys. - -# Configuration -This actor needs to be linked (bound) to two capability providers. One must support the `cosmonic:eventsourcing` contract. The Concordance provider for this contract requires the following configuration: - -* `ROLE` - `projector` -* `INTEREST` - `account_created,funds_deposited,funds_withdrawn,wire_funds_reserved,wire_funds_released` -* `NAME` - `bankaccount_projector` - -Note that stateless event handlers (whether you're using them as projectors, notifiers, gateways, etc) must declare their interest in events _explicitly_ in a comma-delimited list. Because of the use of commas in this data, it's probably easier and more reliable to use `wash ctl put link` rather than using the graphical wasmCloud dashboard. - -This actor will also need to be linked to a `wasmcloud:keyvalue` capability provider, the implementation of which is entirely up to the developer and the configuration is likely specific to the implementation chosen (e.g. Redis vs NATS, etc). - -# Manual Testing -You can start a wasmCloud host, start all of the bank account actors, and then start both the Concordance provider and your key-value provider of choice. Set the link definitions accordingly and then run the `scenario_1.sh` script in the [scripts](../scripts/) directory. You should then see the aggregate state stored in the `CC_STATE` bucket, the resulting events in the `CC_EVENTS` stream, and, assuming you used Redis, you'll see a balance projection in `balance.ABC123` and the ledger JSON structure in `ledger.ABC123`. diff --git a/projector/src/lib.rs b/projector/src/lib.rs deleted file mode 100644 index 322a2b9..0000000 --- a/projector/src/lib.rs +++ /dev/null @@ -1,38 +0,0 @@ -use anyhow::Result; -use serde::{Deserialize, Serialize}; - -concordance_gen::generate!({ - path: "../eventcatalog", - role: "projector", - entity: "bank account" -}); - -mod store; - -#[async_trait] -impl BankAccountProjector for BankAccountProjectorImpl { - async fn handle_account_created(&self, input: AccountCreated) -> Result<()> { - store::initialize_account(input).await - } - - async fn handle_funds_deposited(&self, input: FundsDeposited) -> Result<()> { - store::record_funds_deposited(input).await - } - - async fn handle_funds_reserved(&self, input: FundsReserved) -> Result<()> { - store::record_funds_reserved(input).await - } - - async fn handle_funds_withdrawn(&self, input: FundsWithdrawn) -> Result<()> { - store::record_funds_withdrawn(input).await - } - - async fn handle_funds_released(&self, input: FundsReleased) -> Result<()> { - store::record_funds_released(input).await - } - - async fn handle_wire_transfer_initiated(&self, _input: WireTransferInitiated) -> Result<()> { - Ok(()) - } -} - diff --git a/projector/src/store.rs b/projector/src/store.rs deleted file mode 100644 index 8acbe59..0000000 --- a/projector/src/store.rs +++ /dev/null @@ -1,275 +0,0 @@ -use std::collections::HashMap; - -use crate::*; - -use serde::{Deserialize, Serialize}; -use wasmbus_rpc::actor::prelude::*; -use wasmcloud_interface_keyvalue::{GetResponse, KeyValue, KeyValueSender, SetRequest}; -use wasmcloud_interface_logging::{debug, error}; - -// Note an invariant: the last() element in a ledger's effective_balance field is -// always the same as the balance stored in the balance.{account} key. - -/// Creates a new AccountLedger instance with an initial transaction as a deposit, -/// sets the current balance to the initial amount -pub async fn initialize_account(event: AccountCreated) -> Result<()> { - debug!("Initializing account {}", event.account_number); - let kv = KeyValueSender::new(); - - let account_number = event.account_number.to_string(); - let ctx = Context::default(); - - let initial_balance = event.initial_balance.unwrap_or_default() as u32; - - // Set up the initial ledger - let ledger_key = format!("ledger.{account_number}"); - let ledger = AccountLedger::new(event.account_number, initial_balance); - let ledger_json = serde_json::to_string(&ledger).unwrap(); // we know this won't fail - - // set the current balance - let balance_key = format!("balance.{account_number}"); - - set(&ctx, &kv, ledger_key, ledger_json).await; - set(&ctx, &kv, balance_key, initial_balance.to_string()).await; - - Ok(()) -} - -/// Records a deposit by adding a `LedgerLine` to the end of the previously stored -/// ledger and recording the new balance. -pub async fn record_funds_deposited(event: FundsDeposited) -> Result<()> { - debug!("Recording deposit in account {}", event.account_number); - let account_number = event.account_number.to_string(); - let ctx = Context::default(); - - let kv = KeyValueSender::new(); - let ledger_key = format!("ledger.{account_number}"); - - let new_ledger = get(&ctx, &kv, &ledger_key).await.map(|ledger_raw| { - serde_json::from_str::(&ledger_raw).map(|mut ledger| { - let last_balance = ledger.ledger_lines.last().unwrap().effective_balance; - ledger.ledger_lines.push(LedgerLine { - amount: event.amount as u32, - tx_type: TransactionType::Deposit, - effective_balance: last_balance + event.amount as u32, - }); - ledger - }) - }); - if let Some(Ok(ledger)) = new_ledger { - let new_balance = ledger - .ledger_lines - .last() - .map(|l| l.effective_balance) - .unwrap_or(0); - set_ledger(&ctx, &kv, ledger_key, ledger).await; - let balance_key = format!("balance.{account_number}"); - set(&ctx, &kv, balance_key, new_balance.to_string()).await; - } else { - error!("Unable to save projection for deposit on account {account_number}"); - } - - Ok(()) -} - -/// Records a reservation of funds by adding a funds reserved transaction to the end of the -/// ledger and recording the newly adjusted balance -pub async fn record_funds_reserved(event: FundsReserved) -> Result<()> { - debug!( - "Recording funds reservation (interbank) in account {}", - event.account_number - ); - let account_number = event.account_number.to_string(); - let ctx = Context::default(); - - let kv = KeyValueSender::new(); - let ledger_key = format!("ledger.{account_number}"); - - let new_ledger = get(&ctx, &kv, &ledger_key).await.map(|ledger_raw| { - serde_json::from_str::(&ledger_raw).map(|mut ledger| { - let last_balance = ledger.ledger_lines.last().unwrap().effective_balance; - ledger - .holds - .insert(event.wire_transfer_id, event.amount as u32); - ledger.ledger_lines.push(LedgerLine { - amount: event.amount as u32, - tx_type: TransactionType::FundsReserve, - effective_balance: last_balance - event.amount as u32, - }); - ledger - }) - }); - if let Some(Ok(ledger)) = new_ledger { - let new_balance = ledger - .ledger_lines - .last() - .map(|l| l.effective_balance) - .unwrap_or(0); - set_ledger(&ctx, &kv, ledger_key, ledger).await; - let balance_key = format!("balance.{account_number}"); - set(&ctx, &kv, balance_key, new_balance.to_string()).await; - } else { - error!("Unable to save projection for withdrawal on account {account_number}"); - } - - Ok(()) -} - -// Releases previously reserved funds by adding a funds released transaction to the end -/// of the ledger and recording the updated balance -pub async fn record_funds_released(event: FundsReleased) -> Result<()> { - debug!( - "Recording funds release (interbank) in account {}", - event.account_number - ); - let account_number = event.account_number.to_string(); - - let kv = KeyValueSender::new(); - let ledger_key = format!("ledger.{account_number}"); - let ctx = Context::default(); - - let new_ledger = get(&ctx, &kv, &ledger_key).await.map(|ledger_raw| { - serde_json::from_str::(&ledger_raw).map(|mut ledger| { - let last_balance = ledger.ledger_lines.last().unwrap().effective_balance; - let orig_hold = ledger.holds.remove(&event.wire_transfer_id); - ledger.ledger_lines.push(LedgerLine { - amount: orig_hold.unwrap_or_default(), - tx_type: TransactionType::FundsRelease, - effective_balance: last_balance + orig_hold.unwrap_or_default(), - }); - ledger - }) - }); - if let Some(Ok(ledger)) = new_ledger { - let new_balance = ledger - .ledger_lines - .last() - .map(|l| l.effective_balance) - .unwrap_or(0); - set_ledger(&ctx, &kv, ledger_key, ledger).await; - let balance_key = format!("balance.{account_number}"); - set(&ctx, &kv, balance_key, new_balance.to_string()).await; - } else { - error!("Unable to save projection for withdrawal on account {account_number}"); - } - - Ok(()) -} - -/// Records a withdrawal from an account by adding a withdrawal ledger item to the -/// ledger and recording the new balance -pub async fn record_funds_withdrawn(event: FundsWithdrawn) -> Result<()> { - debug!("Recording withdrawal in account {}", event.account_number); - let account_number = event.account_number.to_string(); - - let kv = KeyValueSender::new(); - let ledger_key = format!("ledger.{account_number}"); - - let ctx = Context::default(); - - // Note:the aggregate would prevent the creation of an event that would violate - // business rules, so we can safely do the subtraction here without any guards - - let new_ledger = get(&ctx, &kv, &ledger_key).await.map(|ledger_raw| { - serde_json::from_str::(&ledger_raw).map(|mut ledger| { - let last_balance = ledger.ledger_lines.last().unwrap().effective_balance; - ledger.ledger_lines.push(LedgerLine { - amount: event.amount as u32, - tx_type: TransactionType::Withdrawal, - effective_balance: last_balance - event.amount as u32, - }); - ledger - }) - }); - if let Some(Ok(ledger)) = new_ledger { - let new_balance = ledger - .ledger_lines - .last() - .map(|l| l.effective_balance) - .unwrap_or(0); - set_ledger(&ctx, &kv, ledger_key, ledger).await; - let balance_key = format!("balance.{account_number}"); - set(&ctx, &kv, balance_key, new_balance.to_string()).await; - } else { - error!("Unable to save projection for withdrawal on account {account_number}"); - } - - Ok(()) -} - -async fn set(ctx: &Context, kv: &KeyValueSender, key: String, value: String) { - if let Err(e) = kv - .set( - ctx, - &SetRequest { - key: key.clone(), - value, - expires: 0, - }, - ) - .await - { - error!("Failed to set {key} in store: {e}"); - } -} - -async fn set_ledger( - ctx: &Context, - kv: &KeyValueSender, - key: String, - ledger: AccountLedger, -) { - set(ctx, kv, key, serde_json::to_string(&ledger).unwrap()).await -} - -async fn get(ctx: &Context, kv: &KeyValueSender, key: &str) -> Option { - match kv.get(ctx, key).await { - Ok(GetResponse { - value: v, - exists: true, - }) => Some(v), - Ok(GetResponse { exists: false, .. }) => None, - Err(e) => { - error!("Failed to get {key} from store: {e}"); - None - } - } -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -struct AccountLedger { - pub account_number: String, - pub ledger_lines: Vec, - pub holds: HashMap, -} - -impl AccountLedger { - fn new(account_number: String, initial_balance: u32) -> AccountLedger { - AccountLedger { - account_number, - holds: HashMap::new(), - ledger_lines: vec![LedgerLine { - amount: initial_balance, - tx_type: TransactionType::Deposit, - effective_balance: initial_balance, - }], - } - } -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -struct LedgerLine { - pub amount: u32, - pub tx_type: TransactionType, - pub effective_balance: u32, -} - -#[derive(Debug, Clone, Deserialize, Serialize)] -enum TransactionType { - Withdrawal, - Deposit, - Transfer, - FundsReserve, - FundsRelease, - Unknown, -} diff --git a/projector/wasmcloud.toml b/projector/wasmcloud.toml deleted file mode 100644 index 48b8c46..0000000 --- a/projector/wasmcloud.toml +++ /dev/null @@ -1,7 +0,0 @@ -name = "BankAccountProjector" -language = "rust" -type = "actor" - -[actor] -key_directory = "./.keys" -claims = ["cosmonic:eventsourcing", "wasmcloud:keyvalue", "wasmcloud:builtin:logging"] diff --git a/wadm.yaml b/wadm.yaml index 641300c..3897375 100644 --- a/wadm.yaml +++ b/wadm.yaml @@ -3,14 +3,14 @@ kind: Application metadata: name: bank-account annotations: - version: v0.3.0 + version: v0.0.0 description: "The concordance bank account example" spec: components: - name: catalog type: actor properties: - image: ghcr.io/cosmonic/cosmonic-gitops/bankaccount_catalog:0.3.0 + image: ghcr.io/cosmonic/cosmonic-gitops/bankaccount_catalog:0.0.0 traits: - type: spreadscaler properties: @@ -18,70 +18,6 @@ spec: - type: linkdef properties: target: httpserver - - name: projector - type: actor - properties: - image: ghcr.io/cosmonic/cosmonic-gitops/bankaccount_projector:0.3.0 - traits: - - type: spreadscaler - properties: - replicas: 3 - - type: linkdef - properties: - target: concordance - values: - NAME: bankaccount_projector - ROLE: projector - INTEREST: account_created,funds_deposited,funds_released,funds_reserved,funds_withdrawn,wire_transfer_initiated - - type: linkdef - properties: - target: keyvalue - - - name: aggregate - type: actor - properties: - image: ghcr.io/cosmonic/cosmonic-gitops/bankaccount_aggregate:0.3.0 - traits: - - type: spreadscaler - properties: - replicas: 3 - - type: linkdef - properties: - target: concordance - values: - ROLE: aggregate - INTEREST: bankaccount - NAME: bankaccount - KEY: accountNumber - - - name: processmanager - type: actor - properties: - image: ghcr.io/cosmonic/cosmonic-gitops/wiretransfer_processmanager:0.3.0 - traits: - - type: spreadscaler - properties: - replicas: 3 - - type: linkdef - properties: - target: concordance - values: - ROLE: process_manager - KEY: wireTransferId - NAME: interbankxfer - INTEREST: '{"start":"wire_transfer_initiated","advance":["funds_reserved","wire_transfer_succeeded","wire_transfer_failed"],"stop":["funds_committed","funds_released"]}' - - - name: concordance - type: capability - properties: - contract: cosmonic:eventsourcing - image: registry.hub.docker.com/cosmonic/concordance:0.1.0 - link_name: default - - name: keyvalue - type: capability - properties: - image: cosmonic.azurecr.io/builtin_keyvalue:0.2.5 - contract: wasmcloud:keyvalue - name: httpserver type: capability properties: