Skip to content

Commit e8b433b

Browse files
committed
Merge branch 'OP-170-improve-getting-events' into 'sprint'
OP-170 add hash to transaction See merge request open-platform/api!169
2 parents 5f9b60d + d1a9cec commit e8b433b

11 files changed

Lines changed: 32 additions & 17 deletions

File tree

frontend/src/actions/scaffold-transactions.js

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,24 +35,24 @@ export const fetchScaffoldTransactionsFromChain = scaffold => async () => {
3535
let isSubscribed = false;
3636

3737
const updateTransactions = address => async dispatch => {
38-
setTimeout(async () => {
39-
console.log('>> start update');
40-
const transactions = await dispatch(apiGet(updateScaffoldTransactions(address)));
41-
console.log('>> updates: ', transactions);
42-
if (transactions.totalCount) {
43-
dispatch({ type: UPDATE_SCAFFOLD_TRANSACTIONS, payload: { address, transactions } });
44-
}
45-
if (isSubscribed) {
46-
dispatch(updateTransactions(address));
47-
}
48-
}, 1000);
38+
console.timeEnd('>> start update');
39+
const transactions = await dispatch(apiGet(updateScaffoldTransactions(address)));
40+
console.log('>> updates: ', transactions);
41+
if (isSubscribed) {
42+
console.time('>> start update');
43+
dispatch(updateTransactions(address));
44+
}
45+
if (transactions.totalCount) {
46+
dispatch({ type: UPDATE_SCAFFOLD_TRANSACTIONS, payload: { address, transactions } });
47+
}
4948
};
5049

5150
export const subscribeTransactionsByApi = address => async dispatch => {
5251
if (isSubscribed) {
5352
return;
5453
}
5554
isSubscribed = true;
55+
console.time('>> start update');
5656
dispatch(updateTransactions(address));
5757
};
5858

src/main/kotlin/io/openfuture/api/component/web3/TransactionHandler.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,10 @@ class TransactionHandler(
2929
@Transactional
3030
fun handle(transactionLog: Log) {
3131
val contract = repository.findByAddressIgnoreCase(transactionLog.address) ?: return
32+
if (null != service.find(transactionLog.transactionHash)) return
33+
val transaction = service.save(Transaction.of(contract, transactionLog))
3234

3335
try {
34-
val transaction = service.save(Transaction.of(contract, transactionLog))
3536
val event = eventDecoder.getEvent(contract.address, transaction.data)
3637
val transactionDto = TransactionDto(transaction, event)
3738
contract.webHook?.let { RestTemplate().postForLocation(it, transactionDto) }

src/main/kotlin/io/openfuture/api/entity/scaffold/Transaction.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ import javax.persistence.*
99
@Table(name = "transactions")
1010
class Transaction(
1111

12+
@Column(name = "hash", nullable = false, unique = true)
13+
val hash: String,
14+
1215
@ManyToOne
1316
@JoinColumn(name = "scaffold_id", nullable = false)
1417
val scaffold: Scaffold,
@@ -22,7 +25,7 @@ class Transaction(
2225
) : BaseModel() {
2326

2427
companion object {
25-
fun of(scaffold: Scaffold, log: Log): Transaction = Transaction(scaffold, log.data)
28+
fun of(scaffold: Scaffold, log: Log): Transaction = Transaction(log.transactionHash, scaffold, log.data)
2629
}
2730

2831
}

src/main/kotlin/io/openfuture/api/repository/Repository.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ interface TransactionRepository : BaseRepository<Transaction> {
5151

5252
fun findAllByScaffoldOrderByDateDesc(scaffold: Scaffold, pageable: Pageable): Page<Transaction>
5353

54+
fun findByHash(hash: String): Transaction?
55+
5456
}
5557

5658
@Repository

src/main/kotlin/io/openfuture/api/service/DefaultTransactionService.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ class DefaultTransactionService(
1717
override fun getAll(scaffold: Scaffold, pageRequest: Pageable): Page<Transaction> =
1818
repository.findAllByScaffoldOrderByDateDesc(scaffold, pageRequest)
1919

20+
@Transactional(readOnly = true)
21+
override fun find(hash: String): Transaction? = repository.findByHash(hash)
22+
2023
@Transactional
2124
override fun save(transaction: Transaction): Transaction = repository.save(transaction)
2225

src/main/kotlin/io/openfuture/api/service/Service.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ interface TransactionService {
8383

8484
fun getAll(scaffold: Scaffold, pageRequest: Pageable): Page<Transaction>
8585

86+
fun find(hash: String): Transaction?
87+
8688
fun save(transaction: Transaction): Transaction
8789

8890
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
TRUNCATE transactions;
2+
3+
ALTER TABLE transactions ADD COLUMN hash VARCHAR NOT NULL UNIQUE;

src/test/kotlin/io/openfuture/api/component/web3/TransactionHandlerTests.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,5 +57,6 @@ internal class TransactionHandlerTests : UnitTest() {
5757
verify(transactionService, never()).save(any(Transaction::class.java))
5858
}
5959

60-
private fun createLog(): Log = Log().apply { address = "0xba37163625b3f2e96112562858c12b75963af138"; data = "data" ; type = "type"}
60+
private fun createLog(): Log = Log().apply { transactionHash = "hash";
61+
address = "0xba37163625b3f2e96112562858c12b75963af138"; data = "data" ; type = "type"}
6162
}

src/test/kotlin/io/openfuture/api/controller/api/TransactionApiControllerTests.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class TransactionApiControllerTests : ControllerTests() {
4040
val openKey = createOpenKey(setOf(Role("ROLE_MASTER")))
4141
val scaffold = createScaffold(openKey)
4242
val pageRequest = PageRequest()
43-
val transaction = Transaction(scaffold, "data", Date(1531128228590))
43+
val transaction = Transaction("hash", scaffold, "data", Date(1531128228590))
4444

4545
given(keyService.find(openKey.value)).willReturn(openKey)
4646
given(scaffoldService.get(scaffold.address, openKey.user)).willReturn(scaffold)

src/test/kotlin/io/openfuture/api/repository/TransactionRepositoryTests.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ internal class TransactionRepositoryTests : RepositoryTests() {
2929
"conversionAmount", "webHook", Collections.emptyList())
3030
entityManager.persist(scaffold)
3131

32-
val transaction = Transaction(scaffold, "data binary")
32+
val transaction = Transaction("hash", scaffold, "data binary")
3333
entityManager.persist(transaction)
3434

3535
val actualOpenKeys = repository.findAllByScaffoldOrderByDateDesc(scaffold, PageRequest())

0 commit comments

Comments
 (0)