Skip to content

Commit

Permalink
feat: Update logic to get number of asset holder of native script
Browse files Browse the repository at this point in the history
  • Loading branch information
Sotatek-DucPhung committed May 3, 2024
1 parent ce1f047 commit 40b84db
Show file tree
Hide file tree
Showing 6 changed files with 487 additions and 478 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package org.cardanofoundation.job.repository.ledgersync;

import java.util.Collection;
import java.util.List;

import jakarta.transaction.Transactional;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import org.cardanofoundation.explorer.common.entity.compositeKey.AddressBalanceId;
import org.cardanofoundation.explorer.common.entity.ledgersync.LatestTokenBalance;
import org.cardanofoundation.job.projection.ScriptNumberHolderProjection;

public interface LatestTokenBalanceRepository extends JpaRepository<LatestTokenBalance, AddressBalanceId> {


@Query("""
SELECT multiAsset.policy as scriptHash, COALESCE(COUNT(latestTokenBalance), 0) as numberOfHolders
FROM MultiAsset multiAsset
LEFT JOIN LatestTokenBalance latestTokenBalance ON multiAsset.unit = latestTokenBalance.unit
WHERE multiAsset.policy IN :policies
GROUP BY multiAsset.policy
""")
List<ScriptNumberHolderProjection> countHolderByPolicyIn(
@Param("policies") Collection<String> policies);

@Modifying(clearAutomatically = true)
@Transactional
@Query(value = "REFRESH MATERIALIZED VIEW latest_token_balance", nativeQuery = true)
void refreshMaterializedView();
}
Original file line number Diff line number Diff line change
@@ -1,65 +1,37 @@
//package org.cardanofoundation.job.repository.ledgersync;
//
//import java.sql.Timestamp;
//import java.util.Collection;
//import java.util.List;
//import java.util.Set;
//
//import org.springframework.data.jpa.repository.JpaRepository;
//import org.springframework.data.jpa.repository.Query;
//import org.springframework.data.repository.query.Param;
//import org.springframework.stereotype.Repository;
//
//import org.cardanofoundation.explorer.common.entity.enumeration.ScriptType;
//import org.cardanofoundation.explorer.common.entity.ledgersync.MultiAsset;
//import org.cardanofoundation.job.projection.ScriptNumberTokenProjection;
//
//@Repository
//public interface MultiAssetRepository extends JpaRepository<MultiAsset, Long> {
// @Query(
// "select distinct multiAsset "
// + " from MultiAsset multiAsset join AddressToken addressToken"
// + " on multiAsset.id = addressToken.multiAssetId"
// + " join Tx tx on tx.id = addressToken.txId"
// + " join Block block on block.id = tx.blockId"
// + " where block.blockNo > :fromBlockNo and block.blockNo <= :toBlockNo ")
// List<MultiAsset> getTokensInTransactionInBlockRange(
// @Param("fromBlockNo") Long fromBlockNo, @Param("toBlockNo") Long toBlockNo);
//
// @Query(
// "select multiAsset from MultiAsset multiAsset where multiAsset.time >= :time"
// + " and multiAsset.txCount = 0")
// List<MultiAsset> getTokensWithZeroTxCountAndAfterTime(@Param("time") Timestamp afterTime);
//
// @Query(
// "select distinct multiAsset "
// + " from MultiAsset multiAsset join AddressToken addressToken"
// + " on multiAsset.id = addressToken.multiAssetId"
// + " join Tx tx on tx.id = addressToken.txId"
// + " join Block block on block.id = tx.blockId"
// + " where block.time >= :fromTime and block.time <= :toTime")
// List<MultiAsset> getTokensInTransactionInTimeRange(
// @Param("fromTime") Timestamp fromTime, @Param("toTime") Timestamp toTime);
//
// @Query("SELECT max(multiAsset.id) FROM MultiAsset multiAsset")
// Long getCurrentMaxIdent();
//
// @Query(
// "SELECT count(multiAsset) as numberOfTokens, multiAsset.policy as scriptHash"
// + " FROM MultiAsset multiAsset"
// + " WHERE multiAsset.policy IN :policyIds"
// + " GROUP BY multiAsset.policy")
// List<ScriptNumberTokenProjection> countByPolicyIn(
// @Param("policyIds") Collection<String> policyIds);
//
// @Query(
// "SELECT multiAsset.policy as scriptHash"
// + " FROM MultiAsset multiAsset"
// + " INNER JOIN Script script ON script.hash = multiAsset.policy AND script.type IN :types"
// + " INNER JOIN AddressToken addressToken ON addressToken.multiAssetId = multiAsset.id"
// + " WHERE addressToken.txId BETWEEN :fromTxId AND :toTxId")
// Set<String> findPolicyByTxIn(
// @Param("fromTxId") Long fromTxId,
// @Param("toTxId") Long toTxId,
// @Param("types") Collection<ScriptType> types);
//}
package org.cardanofoundation.job.repository.ledgersync;

import java.util.Collection;
import java.util.List;
import java.util.Set;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import org.cardanofoundation.explorer.common.entity.enumeration.ScriptType;
import org.cardanofoundation.explorer.common.entity.ledgersync.MultiAsset;
import org.cardanofoundation.job.projection.ScriptNumberTokenProjection;

@Repository
public interface MultiAssetRepository extends JpaRepository<MultiAsset, Long> {
@Query(
"SELECT count(multiAsset) as numberOfTokens, multiAsset.policy as scriptHash"
+ " FROM MultiAsset multiAsset"
+ " WHERE multiAsset.policy IN :policyIds"
+ " GROUP BY multiAsset.policy")
List<ScriptNumberTokenProjection> countByPolicyIn(
@Param("policyIds") Collection<String> policyIds);

@Query(
"SELECT multiAsset.policy as scriptHash"
+ " FROM MultiAsset multiAsset"
+ " INNER JOIN Script script ON script.hash = multiAsset.policy AND script.type IN :types"
+ " INNER JOIN AddressTxAmount addressTxAmount ON addressTxAmount.unit = multiAsset.unit"
+ " INNER JOIN Tx tx ON tx.hash = addressTxAmount.txHash"
+ " WHERE tx.id BETWEEN :fromTxId AND :toTxId")
Set<String> findPolicyByTxIn(
@Param("fromTxId") Long fromTxId,
@Param("toTxId") Long toTxId,
@Param("types") Collection<ScriptType> types);
}

0 comments on commit 40b84db

Please sign in to comment.