-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: Update logic to get number of asset holder of native script
- Loading branch information
1 parent
ce1f047
commit 40b84db
Showing
6 changed files
with
487 additions
and
478 deletions.
There are no files selected for viewing
23 changes: 0 additions & 23 deletions
23
...n/java/org/cardanofoundation/job/repository/ledgersync/AddressTokenBalanceRepository.java
This file was deleted.
Oops, something went wrong.
34 changes: 34 additions & 0 deletions
34
...in/java/org/cardanofoundation/job/repository/ledgersync/LatestTokenBalanceRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | ||
} |
102 changes: 37 additions & 65 deletions
102
src/main/java/org/cardanofoundation/job/repository/ledgersync/MultiAssetRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | ||
} |
Oops, something went wrong.