Skip to content

Commit

Permalink
feat: RA-78 Refactor PostgresLedgerDataProviderService and extract to…
Browse files Browse the repository at this point in the history
… LedgerBlockService (#131)

* feat: RA-78 Refactor PostgresLedgerDataProviderService and extract block* methods to LedgerBlockService

* feat: RA-78 fix compile

* feat: RA-78 add findBlock_Test_OK

* feat: RA-78 added Int tests

* feat: RA-78 Refactor LedgerBlockServiceImpl

* feat: RA-78 verify delegations

* feat: RA-78 verify PoolRegistration

* feat: RA-78 refactor findLastBlock

* feat: RA-78 add pool_*_tests

* feat: RA-78 add check for empty

* feat: RA-78 rem fromEntity

* feat: RA-78 refactor to modelMapper.typeMap

* feat: RA-78 resolve merge conflicts
  • Loading branch information
shleger committed Apr 29, 2024
1 parent 032881d commit 8d8bf1c
Show file tree
Hide file tree
Showing 40 changed files with 661 additions and 407 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

import org.cardanofoundation.rosetta.common.util.CardanoAddressUtils;
import org.cardanofoundation.rosetta.common.util.ValidationUtil;
import org.springframework.stereotype.Service;
import org.openapitools.client.model.AccountBalanceRequest;
import org.openapitools.client.model.AccountBalanceResponse;
Expand All @@ -21,9 +19,12 @@
import org.cardanofoundation.rosetta.api.account.service.AccountService;
import org.cardanofoundation.rosetta.api.block.model.domain.Block;
import org.cardanofoundation.rosetta.api.block.model.domain.StakeAddressBalance;
import org.cardanofoundation.rosetta.api.block.service.LedgerBlockService;
import org.cardanofoundation.rosetta.common.exception.ExceptionFactory;
import org.cardanofoundation.rosetta.common.mapper.DataMapper;
import org.cardanofoundation.rosetta.common.services.LedgerDataProviderService;
import org.cardanofoundation.rosetta.common.util.CardanoAddressUtils;
import org.cardanofoundation.rosetta.common.util.ValidationUtil;


@Service
Expand All @@ -32,6 +33,7 @@
public class AccountServiceImpl implements AccountService {

private final LedgerDataProviderService ledgerDataProviderService;
private final LedgerBlockService ledgerBlockService;

@Override
public AccountBalanceResponse getAccountBalance(AccountBalanceRequest accountBalanceRequest) {
Expand Down Expand Up @@ -70,7 +72,7 @@ public AccountCoinsResponse getAccountCoins(AccountCoinsRequest accountCoinsRequ
}
List<Currency> currenciesRequested = ValidationUtil.filterRequestedCurrencies(currencies);
log.debug("[accountCoins] Filter currency is {}", currenciesRequested);
Block latestBlock = ledgerDataProviderService.findLatestBlock();
Block latestBlock = ledgerBlockService.findLatestBlock();
log.debug("[accountCoins] Latest block is {}", latestBlock);
List<Utxo> utxos = ledgerDataProviderService.findUtxoByAddressAndCurrency(accountAddress,
currenciesRequested);
Expand All @@ -82,9 +84,9 @@ private AccountBalanceResponse findBalanceDataByAddressAndBlock(String address,
String hash) {
Block blockDto;
if (number != null || hash != null) {
blockDto = ledgerDataProviderService.findBlock(number, hash);
blockDto = ledgerBlockService.findBlock(number, hash);
} else {
blockDto = ledgerDataProviderService.findLatestBlock();
blockDto = ledgerBlockService.findLatestBlock();
}

if (Objects.isNull(blockDto)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

import lombok.AllArgsConstructor;

Expand Down Expand Up @@ -31,10 +30,7 @@ public class BlockToBlockResponse {
* @return The Rosetta compatible BlockResponse
*/
public BlockResponse toDto(Block model) {

return Optional
.ofNullable(modelMapper.getTypeMap(Block.class, BlockResponse.class))
.orElseGet(() -> modelMapper.createTypeMap(Block.class, BlockResponse.class))
return modelMapper.typeMap(Block.class, BlockResponse.class)
.addMappings(mapper -> {
mapper.<String>map(Block::getHash, (dest, v) -> currentId(dest).setHash(v));
mapper.<Long>map(Block::getNumber, (dest, v) -> currentId(dest).setIndex(v));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,7 @@ public class BlockToEntity {

public Block fromEntity(BlockEntity entity) {

return ofNullable(modelMapper.getTypeMap(BlockEntity.class, Block.class))
.orElseGet(() -> modelMapper.createTypeMap(BlockEntity.class, Block.class))
return modelMapper.typeMap(BlockEntity.class, Block.class)
.addMappings(mapper -> {

mapper.map(BlockEntity::getSlotLeader, Block::setCreatedBy);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package org.cardanofoundation.rosetta.api.block.mapper;

import java.util.Optional;

import lombok.AllArgsConstructor;

import org.modelmapper.ModelMapper;
Expand All @@ -20,9 +18,7 @@ public class BlockTxToBlockTxResponse {


public BlockTransactionResponse toDto(BlockTx model) {
return Optional
.ofNullable(modelMapper.getTypeMap(BlockTx.class, BlockTransactionResponse.class))
.orElseGet(() -> modelMapper.createTypeMap(BlockTx.class, BlockTransactionResponse.class))
return modelMapper.typeMap(BlockTx.class, BlockTransactionResponse.class)
.setPostConverter(ctx -> {
ctx.getDestination().setTransaction(blockTxToRosettaTx.toDto(model));
return ctx.getDestination();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,25 +12,20 @@
import org.cardanofoundation.rosetta.api.block.model.entity.TxnEntity;
import org.cardanofoundation.rosetta.common.annotation.PersistenceMapper;

import static java.util.Optional.ofNullable;

@PersistenceMapper
@AllArgsConstructor
public class BlockTxToEntity {

final ModelMapper modelMapper;

public BlockTx fromEntity(TxnEntity model) {
return ofNullable(modelMapper.getTypeMap(TxnEntity.class, BlockTx.class))
.orElseGet(() -> modelMapper.createTypeMap(TxnEntity.class, BlockTx.class))
return modelMapper.typeMap(TxnEntity.class, BlockTx.class)
.addMappings(mapper -> {

mapper.map(TxnEntity::getTxHash, BlockTx::setHash);
mapper.map(tx -> tx.getBlock().getHash(), BlockTx::setBlockHash);
mapper.map(tx -> tx.getBlock().getNumber(), BlockTx::setBlockNo);
mapper.map(tx -> 0L, BlockTx::setSize); // will be calcualted, within the population method
mapper.map(tx -> 0L, BlockTx::setScriptSize); // TODO Needs to be calulated if needed

})
.setPostConverter(ctx -> {
TxnEntity source = ctx.getSource();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package org.cardanofoundation.rosetta.api.block.mapper;

import java.util.List;
import java.util.Optional;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;

Expand Down Expand Up @@ -44,17 +43,13 @@ public class BlockTxToRosettaTransaction {
* @return The Rosetta compatible Transaction
*/
public Transaction toDto(BlockTx model) {
return Optional
.ofNullable(modelMapper.getTypeMap(BlockTx.class, Transaction.class))
.orElseGet(() -> modelMapper.createTypeMap(BlockTx.class, Transaction.class))
return modelMapper.typeMap(BlockTx.class, Transaction.class)
.addMappings(mapper -> {
mapper.<String>map(BlockTx::getHash,
(dest, v) -> dest.getTransactionIdentifier().setHash(v));

mapper.<Long>map(BlockTx::getSize, (dest, v) -> dest.getMetadata().setSize(v));
mapper.<Long>map(BlockTx::getScriptSize,
(dest, v) -> dest.getMetadata().setScriptSize(v));

})

.setPostConverter(ctx -> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
package org.cardanofoundation.rosetta.api.block.mapper;

import java.util.Optional;

import lombok.AllArgsConstructor;

import org.modelmapper.ModelMapper;
import org.modelmapper.spi.MappingContext;
import org.openapitools.client.model.Amount;
import org.openapitools.client.model.Operation;
import org.openapitools.client.model.OperationStatus;

Expand All @@ -22,16 +19,13 @@ public class DelegationToOperation extends AbstractToOperation<Delegation> {

@Override
public Operation toDto(Delegation model, OperationStatus status, int index) {
return Optional
.ofNullable(modelMapper.getTypeMap(Delegation.class, Operation.class))
.orElseGet(() -> modelMapper.createTypeMap(Delegation.class, Operation.class))
return modelMapper.typeMap(Delegation.class, Operation.class)
.addMappings(mp -> {
mp.map(f -> status.getStatus(), Operation::setStatus);
mp.map(f-> OperationType.STAKE_DELEGATION.getValue(), Operation::setType);
mp.<Long>map(f -> index, (d,v) -> d.getOperationIdentifier().setIndex(v));
mp.<String>map(Delegation::getAddress, (d, v) -> d.getAccount().setAddress(v));
mp.<String>map(Delegation::getPoolId, (d, v) -> d.getMetadata().setPoolKeyHash(v));

})
.setPostConverter(MappingContext::getDestination)
.map(model);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package org.cardanofoundation.rosetta.api.block.mapper;

import java.util.Optional;

import lombok.AllArgsConstructor;

import org.modelmapper.ModelMapper;
Expand All @@ -21,9 +19,7 @@ public class InputToOperation extends AbstractToOperation<Utxo> {

@Override
public Operation toDto(Utxo model, OperationStatus status, int index) {
return Optional
.ofNullable(modelMapper.getTypeMap(Utxo.class, Operation.class))
.orElseGet(() -> modelMapper.createTypeMap(Utxo.class, Operation.class))
return modelMapper.typeMap(Utxo.class, Operation.class)
.addMappings(mp -> {
mp.map(f -> Constants.INPUT, Operation::setType);
mp.<CoinAction>map(f -> CoinAction.SPENT, (d, v) -> d.getCoinChange().setCoinAction(v));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package org.cardanofoundation.rosetta.api.block.mapper;

import java.util.Optional;

import lombok.AllArgsConstructor;

import org.modelmapper.ModelMapper;
Expand All @@ -21,9 +19,7 @@ public class OutputToOperation extends AbstractToOperation<Utxo> {

@Override
public Operation toDto(Utxo model, OperationStatus status, int index) {
return Optional
.ofNullable(modelMapper.getTypeMap(Utxo.class, Operation.class))
.orElseGet(() -> modelMapper.createTypeMap(Utxo.class, Operation.class))
return modelMapper.typeMap(Utxo.class, Operation.class)
.addMappings(mp -> {
mp.map(f -> Constants.OUTPUT, Operation::setType);
mp.<CoinAction>map(f -> CoinAction.CREATED, (d, v) -> d.getCoinChange().setCoinAction(v));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package org.cardanofoundation.rosetta.api.block.mapper;

import java.util.Optional;

import lombok.AllArgsConstructor;

import org.modelmapper.ModelMapper;
Expand All @@ -22,22 +20,16 @@ public class PoolRegistrationToOperation extends AbstractToOperation<PoolRegistr

@Override
public Operation toDto(PoolRegistration model, OperationStatus status, int index) {
return Optional
.ofNullable(modelMapper.getTypeMap(PoolRegistration.class, Operation.class))
.orElseGet(() -> modelMapper.createTypeMap(PoolRegistration.class, Operation.class))
return modelMapper.typeMap(PoolRegistration.class, Operation.class)
.addMappings(mp -> {
mp.skip(Operation::setMetadata);

mp.<Long>map(f -> index, (d, v) -> d.getOperationIdentifier().setIndex(v));
mp.map(f -> status.getStatus(), Operation::setStatus);
mp.map(f -> OperationType.POOL_REGISTRATION.getValue(), Operation::setType);
mp.<String>map(PoolRegistration::getPoolId, (d, v) -> d.getAccount().setAddress(v));


})

.setPostConverter(ctx -> {
Operation d = ctx.getDestination();
var d = ctx.getDestination();
d.setMetadata(new OperationMetadata());

ctx.getDestination().getMetadata().setDepositAmount(getDepositAmount());
Expand All @@ -51,7 +43,6 @@ public Operation toDto(PoolRegistration model, OperationStatus status, int index
params.setRelays(ctx.getSource().getRelays());
params.setVrfKeyHash(ctx.getSource().getVrfKeyHash());
params.setRewardAddress(ctx.getSource().getRewardAccount());

return d;
})
.map(model);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package org.cardanofoundation.rosetta.api.block.mapper;

import java.util.Optional;

import lombok.AllArgsConstructor;

import org.modelmapper.ModelMapper;
Expand All @@ -22,23 +20,16 @@ public class PoolRetirementToOperation extends AbstractToOperation<PoolRetiremen

@Override
public Operation toDto(PoolRetirement model, OperationStatus status, int index) {
return Optional
.ofNullable(modelMapper.getTypeMap(PoolRetirement.class, Operation.class))
.orElseGet(() -> modelMapper.createTypeMap(PoolRetirement.class, Operation.class))
return modelMapper.typeMap(PoolRetirement.class, Operation.class)
.addMappings(mp -> {

mp.map(f -> status.getStatus(), Operation::setStatus);
mp.map(f -> OperationType.POOL_RETIREMENT.getValue(), Operation::setType);
mp.<String>map(PoolRetirement::getPoolId, (d, v) -> d.getAccount().setAddress(v));
mp.map(f -> OperationMetadata.builder().epoch(model.getEpoch()).build(),
Operation::setMetadata);
mp.<Long>map(f -> index, (d, v) -> d.getOperationIdentifier().setIndex(v));


})
.setPostConverter(MappingContext::getDestination)
.map(model);
}


}
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
package org.cardanofoundation.rosetta.api.block.mapper;

import java.util.Optional;

import lombok.AllArgsConstructor;

import com.bloxbean.cardano.yaci.core.model.certs.CertificateType;
import org.cardanofoundation.rosetta.common.services.ProtocolParamService;
import org.modelmapper.ModelMapper;
import org.modelmapper.spi.MappingContext;
import org.openapitools.client.model.Amount;
Expand All @@ -23,9 +20,7 @@ public class StakeRegistrationToOperation extends AbstractToOperation<StakeRegis
final ModelMapper modelMapper;
@Override
public Operation toDto(StakeRegistration model, OperationStatus status, int index) {
return Optional
.ofNullable(modelMapper.getTypeMap(StakeRegistration.class, Operation.class))
.orElseGet(() -> modelMapper.createTypeMap(StakeRegistration.class, Operation.class))
return modelMapper.typeMap(StakeRegistration.class, Operation.class)
.addMappings(mp -> {

mp.map(f -> status.getStatus(), Operation::setStatus);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package org.cardanofoundation.rosetta.api.block.mapper;

import java.util.Optional;
import lombok.AllArgsConstructor;

import org.modelmapper.ModelMapper;

import org.cardanofoundation.rosetta.api.block.model.domain.Withdrawal;
import org.cardanofoundation.rosetta.api.block.model.entity.WithdrawalEntity;
import org.cardanofoundation.rosetta.common.annotation.OpenApiMapper;
import org.modelmapper.ModelMapper;

@OpenApiMapper
@AllArgsConstructor
Expand All @@ -14,12 +15,8 @@ public class WithdrawalEntityToWithdrawal {
private final ModelMapper modelMapper;

public Withdrawal fromEntity(WithdrawalEntity model) {
return Optional
.ofNullable(modelMapper.getTypeMap(WithdrawalEntity.class, Withdrawal.class))
.orElseGet(() -> modelMapper.createTypeMap(WithdrawalEntity.class, Withdrawal.class))
.addMappings(mp -> {
mp.map(WithdrawalEntity::getAddress, Withdrawal::setStakeAddress);
})
return modelMapper.typeMap(WithdrawalEntity.class, Withdrawal.class)
.addMappings(mp -> mp.map(WithdrawalEntity::getAddress, Withdrawal::setStakeAddress))
.map(model);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,7 @@ public class WithdrawalToOperation extends AbstractToOperation<Withdrawal>{

@Override
public Operation toDto(Withdrawal model, OperationStatus status, int index) {
return Optional
.ofNullable(modelMapper.getTypeMap(Withdrawal.class, Operation.class))
.orElseGet(() -> modelMapper.createTypeMap(Withdrawal.class, Operation.class))
return modelMapper.typeMap(Withdrawal.class, Operation.class)
.addMappings(mp -> {
mp.map(f -> status.getStatus(), Operation::setStatus);
mp.map(f -> OperationType.WITHDRAWAL.getValue(), Operation::setType);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
package org.cardanofoundation.rosetta.api.block.model.domain;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import org.cardanofoundation.rosetta.api.block.model.entity.DelegationEntity;

@Data
@Builder
@Builder //TODO saa: refactor tests and remove builder and *argConstructor annotations
@NoArgsConstructor
@AllArgsConstructor
public class Delegation {

private String txHash;
Expand All @@ -17,12 +21,4 @@ public class Delegation {

private String address;

public static Delegation fromEntity(DelegationEntity entity) {
return Delegation.builder()
.txHash(entity.getTxHash())
.certIndex(entity.getCertIndex())
.poolId(entity.getPoolId())
.address(entity.getAddress())
.build();
}
}

0 comments on commit 8d8bf1c

Please sign in to comment.