Skip to content

Commit 9a6f871

Browse files
committed
fix: set bi-directional relationship on credentials and transaction
1 parent cf09f8a commit 9a6f871

File tree

1 file changed

+20
-6
lines changed

1 file changed

+20
-6
lines changed

packages/projection-typeorm/src/operators/storeTransactions.ts

+20-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ChainSyncEventType } from '@cardano-sdk/core';
2-
import { TransactionEntity } from '../entity';
2+
import { CredentialEntity, TransactionEntity } from '../entity';
33
import { WithTxCredentials } from './storeCredentials';
44
import { typeormOperator } from './util';
55
import { WithBlock } from '@cardano-sdk/projection';
@@ -17,14 +17,25 @@ export const storeTransactions = typeormOperator<WithTxCredentials>(async (evt)
1717
// produced txs will be automatically deleted via block cascade
1818
if (txs.length === 0 || eventType !== ChainSyncEventType.RollForward) return;
1919

20-
const transactionEntities = txs.map(
21-
(tx): TransactionEntity => ({
20+
const credentialEntities = new Set<CredentialEntity>();
21+
const transactionEntities = new Array<TransactionEntity>();
22+
for (const tx of txs) {
23+
const credentials = credentialsByTx[tx.id] || [];
24+
const txEntity: TransactionEntity = {
2225
block: header,
2326
cbor: tx.cbor,
24-
credentials: credentialsByTx[tx.id] || [],
27+
credentials,
2528
txId: tx.id
26-
})
27-
);
29+
};
30+
transactionEntities.push(txEntity);
31+
credentials.forEach((credential) => {
32+
if (!credential.transactions) {
33+
credential.transactions = [];
34+
}
35+
credential.transactions.push(txEntity);
36+
credentialEntities.add(credential); // Collect credentials to be re-saved
37+
});
38+
}
2839

2940
await queryRunner.manager
3041
.createQueryBuilder()
@@ -33,4 +44,7 @@ export const storeTransactions = typeormOperator<WithTxCredentials>(async (evt)
3344
.values(transactionEntities)
3445
.orIgnore()
3546
.execute();
47+
48+
// Re-save credential entities to ensure relationships are persisted
49+
await queryRunner.manager.save(Array.from(credentialEntities));
3650
});

0 commit comments

Comments
 (0)