Skip to content

Commit

Permalink
create scheduler for checking reserved domain transactions
Browse files Browse the repository at this point in the history
  • Loading branch information
MrFoxogen committed Mar 11, 2024
1 parent ef879b9 commit 07db0a2
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 0 deletions.
11 changes: 11 additions & 0 deletions src/main/java/com/staketab/minanames/config/SchedulerConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.staketab.minanames.config;

import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;

@Configuration
@EnableScheduling
@ConditionalOnProperty(name = "scheduled.enabled", matchIfMissing = true)
public class SchedulerConfig {
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
package com.staketab.minanames.repository;

import com.staketab.minanames.entity.PayableTransactionEntity;
import com.staketab.minanames.entity.dto.TxStatus;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface PayableTransactionRepository extends JpaRepository<PayableTransactionEntity, String> {

List<PayableTransactionEntity> findAllByTxStatus(TxStatus txStatus);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.staketab.minanames.scheduler;

import com.staketab.minanames.service.abstraction.TxService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Slf4j
@Component
@RequiredArgsConstructor
@ConditionalOnProperty(value = "scheduled.checker-tx-reserve.enabled", havingValue = "true")
public class CheckerReservedTransactionScheduler {

private final TxService txService;

@Scheduled(fixedDelayString = "${scheduled.checker-tx-reserve.upload-mills}")
public void updateProjects() {
txService.checkTransactions();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@

public interface TxService {
PayableTransactionEntity getOrCreate(String txHash);
void checkTransactions();
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,46 @@

import com.staketab.minanames.entity.PayableTransactionEntity;
import com.staketab.minanames.entity.dto.TxStatus;
import com.staketab.minanames.minascan.TransactionRepository;
import com.staketab.minanames.repository.PayableTransactionRepository;
import com.staketab.minanames.service.abstraction.TxService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
@RequiredArgsConstructor
@Slf4j
public class TxServiceImpl implements TxService {

private final PayableTransactionRepository payableTransactionRepository;
private final TransactionRepository transactionRepository;

@Override
public PayableTransactionEntity getOrCreate(String txHash) {
return payableTransactionRepository.findById(txHash).orElseGet(() -> createTx(txHash));
}

@Override
public void checkTransactions() {
List<PayableTransactionEntity> resultTxs = payableTransactionRepository
.findAllByTxStatus(TxStatus.PENDING)
.stream()
.filter(this::txStatusPredicate)
.peek(payableTransaction -> payableTransaction.setTxStatus(TxStatus.APPLIED))
.toList();

payableTransactionRepository.saveAll(resultTxs);
}

private boolean txStatusPredicate(PayableTransactionEntity payableTransaction) {
String txHash = payableTransaction.getTxHash();
String txStatusByTxHash = transactionRepository.getTxStatusByTxHash(txHash);
return txStatusByTxHash != null && TxStatus.APPLIED.name().equals(txStatusByTxHash.toUpperCase());
}

private PayableTransactionEntity createTx(String txHash) {
return payableTransactionRepository.save(PayableTransactionEntity.builder()
.txHash(txHash)
Expand Down

0 comments on commit 07db0a2

Please sign in to comment.