Skip to content
This repository has been archived by the owner on Dec 10, 2024. It is now read-only.

Commit

Permalink
Merge pull request #1349 from cardano-foundation/fix/update-AddressTx…
Browse files Browse the repository at this point in the history
…Amount-to-use-slot-index

chore: updated query to use index slot index instead
  • Loading branch information
nemo83 authored Aug 29, 2024
2 parents c3b17a9 + 766fd88 commit da7b40c
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -198,8 +198,9 @@ List<AddressTxAmount> findAllByStakeAddressAndTxHashIn(
@Query(
value =
"""
SELECT max(atm.blockTime) FROM AddressTxAmount atm
WHERE atm.unit = :unit
SELECT MAX(slot)
FROM AddressTxAmount
WHERE unit = :unit
""")
Long getLastActivityTimeOfToken(@Param("unit") String unit);
Long getLastActivitySlotOfToken(@Param("unit") String unit);
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,6 @@
import org.cardanofoundation.explorer.api.repository.ledgersync.MaTxMintRepository;
import org.cardanofoundation.explorer.api.repository.ledgersync.MultiAssetRepository;
import org.cardanofoundation.explorer.api.repository.ledgersync.ScriptRepository;
import org.cardanofoundation.explorer.api.repository.ledgersync.StakeAddressRepository;
import org.cardanofoundation.explorer.api.repository.ledgersyncagg.AddressRepository;
import org.cardanofoundation.explorer.api.repository.ledgersyncagg.AddressTxAmountRepository;
import org.cardanofoundation.explorer.api.repository.ledgersyncagg.AggregateAddressTokenRepository;
import org.cardanofoundation.explorer.api.repository.ledgersyncagg.LatestTokenBalanceRepository;
Expand Down Expand Up @@ -77,9 +75,7 @@ public class TokenServiceImpl implements TokenService {
private final MaTxMintRepository maTxMintRepository;
private final AssetMetadataRepository assetMetadataRepository;
private final LatestTokenBalanceRepository latestTokenBalanceRepository;
private final AddressRepository addressRepository;
private final AddressTxAmountRepository addressTxAmountRepository;
private final StakeAddressRepository stakeAddressRepository;
private final ScriptRepository scriptRepository;

private final TokenMapper tokenMapper;
Expand Down Expand Up @@ -224,11 +220,11 @@ public TokenResponse getTokenDetail(String tokenId) {

tokenResponse.setMetadata(assetMetadataMapper.fromAssetMetadata(assetMetadata));

Long latestEpochTime =
addressTxAmountRepository.getLastActivityTimeOfToken(multiAsset.getUnit());
tokenResponse.setTokenLastActivity(
Timestamp.valueOf(
LocalDateTime.ofInstant(Instant.ofEpochSecond(latestEpochTime), ZoneOffset.UTC)));
Long latestSlot = addressTxAmountRepository.getLastActivitySlotOfToken(multiAsset.getUnit());

var latestEpochTime = cardanoConverters.slot().slotToTime(latestSlot);

tokenResponse.setTokenLastActivity(Timestamp.valueOf(latestEpochTime));
setTxMetadataJson(tokenResponse, multiAsset);
return tokenResponse;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -243,12 +243,16 @@ void testGetTokenDetail_WhenTokenFoundAndMetadataJsonIsNullAndTokenTypeIsFT() {
when(assetMetadataMapper.fromAssetMetadata(metadata)).thenReturn(tokenMetadataResponse);

// Configure MultiAssetRepository.getLastActivityTimeOfToken(...).
CardanoConverters cardanoConverters =
ClasspathConversionsFactory.createConverters(NetworkType.MAINNET);
ReflectionTestUtils.setField(tokenService, "cardanoConverters", cardanoConverters);

final long latestEpochTime = 1715133010;
final Timestamp latestTimestamp =
Timestamp.valueOf(
LocalDateTime.ofInstant(Instant.ofEpochSecond(latestEpochTime), ZoneOffset.UTC));
when(addressTxAmountRepository.getLastActivityTimeOfToken(multiAsset.getUnit()))
.thenReturn(latestEpochTime);
final LocalDateTime latestEpochDateTime =
LocalDateTime.ofInstant(Instant.ofEpochSecond(latestEpochTime), ZoneOffset.UTC);
final Timestamp latestTimestamp = Timestamp.valueOf(latestEpochDateTime);
when(addressTxAmountRepository.getLastActivitySlotOfToken(multiAsset.getUnit()))
.thenReturn(cardanoConverters.time().toSlot(latestEpochDateTime));

when(maTxMintRepository.getTxMetadataToken(anyString(), any())).thenReturn(null);

Expand Down Expand Up @@ -312,12 +316,16 @@ void testGetTokenDetail_WhenTokenFoundAndMetadataJsonNotContainVersionKeyAndToke
when(assetMetadataMapper.fromAssetMetadata(metadata)).thenReturn(tokenMetadataResponse);

// Configure MultiAssetRepository.getLastActivityTimeOfToken(...).
CardanoConverters cardanoConverters =
ClasspathConversionsFactory.createConverters(NetworkType.MAINNET);
ReflectionTestUtils.setField(tokenService, "cardanoConverters", cardanoConverters);

final long latestEpochTime = 1715133010;
final Timestamp latestTimestamp =
Timestamp.valueOf(
LocalDateTime.ofInstant(Instant.ofEpochSecond(latestEpochTime), ZoneOffset.UTC));
when(addressTxAmountRepository.getLastActivityTimeOfToken(multiAsset.getUnit()))
.thenReturn(latestEpochTime);
final LocalDateTime latestEpochDateTime =
LocalDateTime.ofInstant(Instant.ofEpochSecond(latestEpochTime), ZoneOffset.UTC);
final Timestamp latestTimestamp = Timestamp.valueOf(latestEpochDateTime);
when(addressTxAmountRepository.getLastActivitySlotOfToken(multiAsset.getUnit()))
.thenReturn(cardanoConverters.time().toSlot(latestEpochDateTime));

when(maTxMintRepository.getTxMetadataToken(anyString(), any()))
.thenReturn(
Expand Down Expand Up @@ -382,12 +390,16 @@ void testGetTokenDetail_WhenTokenFoundAndMetadataJsonContainsVersionKeyAndTokenT
when(assetMetadataMapper.fromAssetMetadata(metadata)).thenReturn(tokenMetadataResponse);

// Configure MultiAssetRepository.getLastActivityTimeOfToken(...).
CardanoConverters cardanoConverters =
ClasspathConversionsFactory.createConverters(NetworkType.MAINNET);
ReflectionTestUtils.setField(tokenService, "cardanoConverters", cardanoConverters);

final long latestEpochTime = 1715133010;
final Timestamp latestTimestamp =
Timestamp.valueOf(
LocalDateTime.ofInstant(Instant.ofEpochSecond(latestEpochTime), ZoneOffset.UTC));
when(addressTxAmountRepository.getLastActivityTimeOfToken(multiAsset.getUnit()))
.thenReturn(latestEpochTime);
final LocalDateTime latestEpochDateTime =
LocalDateTime.ofInstant(Instant.ofEpochSecond(latestEpochTime), ZoneOffset.UTC);
final Timestamp latestTimestamp = Timestamp.valueOf(latestEpochDateTime);
when(addressTxAmountRepository.getLastActivitySlotOfToken(multiAsset.getUnit()))
.thenReturn(cardanoConverters.time().toSlot(latestEpochDateTime));

when(maTxMintRepository.getTxMetadataToken(anyString(), any()))
.thenReturn(
Expand Down

0 comments on commit da7b40c

Please sign in to comment.