Skip to content

Commit

Permalink
Minting has its own activity
Browse files Browse the repository at this point in the history
  • Loading branch information
steveandroulakis committed Oct 25, 2024
1 parent 9037387 commit cb93bfb
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ private static void runWorkflowWithUpdateWithStart(WorkflowClient client) {
TransactionRequest txRequest =
new TransactionRequest(
"Bob", "Alice",
-1000); // Change this amount to a negative number to have initTransaction fail
1000); // Change this amount to a negative number to have initTransaction fail

WorkflowOptions options = buildWorkflowOptions();
TransactionWorkflow workflow = client.newWorkflowStub(TransactionWorkflow.class, options);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,13 @@
@ActivityInterface
public interface TransactionActivities {
@ActivityMethod
Transaction initTransaction(TransactionRequest txRequest);
Transaction mintTransactionId(TransactionRequest txRequest);

@ActivityMethod
void cancelTransaction(TransactionRequest txRequest);
Transaction initTransaction(Transaction tx);

@ActivityMethod
void cancelTransaction(Transaction tx);

@ActivityMethod
void completeTransaction(Transaction tx);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,29 +24,32 @@
public class TransactionActivitiesImpl implements TransactionActivities {

@Override
public Transaction initTransaction(TransactionRequest txRequest) {
public Transaction mintTransactionId(TransactionRequest request) {
System.out.println("Minting transaction ID");
// Simulate transaction ID generation
String txId = "TXID" + String.format("%010d", (long) (Math.random() * 1_000_000_0000L));
sleep(100);
System.out.println("Transaction ID minted: " + txId);
return new Transaction(
txId, request.getSourceAccount(), request.getTargetAccount(), request.getAmount());
}

@Override
public Transaction initTransaction(Transaction tx) {
System.out.println("Initializing transaction");
sleep(500);
if (txRequest.getAmount() <= 0) {
System.out.println("Invalid amount: " + txRequest.getAmount());
sleep(300);
if (tx.getAmount() <= 0) {
System.out.println("Invalid amount: " + tx.getAmount());
throw ApplicationFailure.newNonRetryableFailure(
"Non-retryable Activity Failure: Invalid Amount", "InvalidAmount");
}
// Simulate transaction ID generation
String txId = "TXID" + String.format("%010d", (long) (Math.random() * 1_000_000_0000L));
Transaction tx =
new Transaction(
txId,
txRequest.getSourceAccount(),
txRequest.getTargetAccount(),
txRequest.getAmount());

sleep(500);
return tx;
}

@Override
public void cancelTransaction(TransactionRequest txRequest) {
public void cancelTransaction(Transaction tx) {
System.out.println("Cancelling transaction");
sleep(300);
System.out.println("Transaction cancelled");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,10 @@ public class TransactionWorkflowImpl implements TransactionWorkflow {

@Override
public TxResult processTransaction(TransactionRequest txRequest) {
this.tx = activities.mintTransactionId(txRequest);

try {
this.tx = activities.initTransaction(txRequest);
this.tx = activities.initTransaction(this.tx);
} catch (Exception e) {
initError = e;
} finally {
Expand All @@ -48,7 +50,7 @@ public TxResult processTransaction(TransactionRequest txRequest) {

if (initError != null) {
// If initialization failed, cancel the transaction
activities.cancelTransaction(txRequest);
activities.cancelTransaction(this.tx);
return new TxResult("", "Transaction cancelled.");
} else {
activities.completeTransaction(this.tx);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,8 @@ public void testUpdateWithStartValidAmount() throws Exception {
TxResult finalResult = WorkflowStub.fromTyped(workflow).getResult(TxResult.class);
assertEquals("Transaction completed successfully.", finalResult.getStatus());

// Verify activities were called
// Verify activities were calledgit
verify(activities).mintTransactionId(any());
verify(activities).initTransaction(any());
verify(activities).completeTransaction(any());
verifyNoMoreInteractions(activities);
Expand Down Expand Up @@ -148,6 +149,7 @@ public void testUpdateWithStartInvalidAmount() throws Exception {
assertEquals("Transaction cancelled.", finalResult.getStatus());

// Verify activities were called in correct order
verify(activities).mintTransactionId(any());
verify(activities).initTransaction(any());
verify(activities).cancelTransaction(any());
verifyNoMoreInteractions(activities);
Expand Down

0 comments on commit cb93bfb

Please sign in to comment.