diff --git a/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/data/NftMetadata.java b/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/data/NftMetadata.java new file mode 100644 index 00000000..0e90993d --- /dev/null +++ b/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/data/NftMetadata.java @@ -0,0 +1,16 @@ +package com.openelements.hiero.base.data; + +import com.hedera.hashgraph.sdk.AccountId; +import com.hedera.hashgraph.sdk.TokenId; +import java.util.Objects; + +public record NftMetadata(TokenId tokenId, String name, String symbol, AccountId treasuryAccountId) implements + TokenMetadata { + + public NftMetadata { + Objects.requireNonNull(tokenId, "tokenId must not be null"); + Objects.requireNonNull(name, "name must not be null"); + Objects.requireNonNull(symbol, "symbol must not be null"); + Objects.requireNonNull(treasuryAccountId, "treasuryAccountId must not be null"); + } +} diff --git a/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/data/TokenMetadata.java b/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/data/TokenMetadata.java new file mode 100644 index 00000000..2a7f5ada --- /dev/null +++ b/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/data/TokenMetadata.java @@ -0,0 +1,15 @@ +package com.openelements.hiero.base.data; + +import com.hedera.hashgraph.sdk.AccountId; +import com.hedera.hashgraph.sdk.TokenId; + +public interface TokenMetadata { + + TokenId tokenId(); + + String name(); + + String symbol(); + + AccountId treasuryAccountId(); +} diff --git a/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/NftRepositoryImpl.java b/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/NftRepositoryImpl.java index 8e2fee95..b47561a6 100644 --- a/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/NftRepositoryImpl.java +++ b/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/NftRepositoryImpl.java @@ -4,9 +4,10 @@ import com.hedera.hashgraph.sdk.TokenId; import com.openelements.hiero.base.HieroException; import com.openelements.hiero.base.data.Nft; -import com.openelements.hiero.base.mirrornode.NftRepository; -import com.openelements.hiero.base.mirrornode.MirrorNodeClient; +import com.openelements.hiero.base.data.NftMetadata; import com.openelements.hiero.base.data.Page; +import com.openelements.hiero.base.mirrornode.MirrorNodeClient; +import com.openelements.hiero.base.mirrornode.NftRepository; import java.util.Objects; import java.util.Optional; import org.jspecify.annotations.NonNull; @@ -51,4 +52,21 @@ public Optional findByOwnerAndTypeAndSerial(@NonNull final AccountId owner, final long serialNumber) throws HieroException { return mirrorNodeClient.queryNftsByAccountAndTokenIdAndSerial(owner, tokenId, serialNumber); } + + @NonNull + @Override + public NftMetadata getNftMetadata(TokenId tokenId) throws HieroException { + return mirrorNodeClient.getNftMetadata(tokenId); + } + + @NonNull + @Override + public Page findTypesByOwner(@NonNull AccountId ownerId) throws HieroException { + return mirrorNodeClient.findNftTypesByOwner(ownerId); + } + + @Override + public Page findAllTypes() throws HieroException { + return mirrorNodeClient.findAllNftTypes(); + } } diff --git a/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/mirrornode/MirrorNodeClient.java b/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/mirrornode/MirrorNodeClient.java index 42ce5685..0bf74e9f 100644 --- a/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/mirrornode/MirrorNodeClient.java +++ b/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/mirrornode/MirrorNodeClient.java @@ -9,6 +9,7 @@ import com.openelements.hiero.base.data.NetworkStake; import com.openelements.hiero.base.data.NetworkSupplies; import com.openelements.hiero.base.data.Nft; +import com.openelements.hiero.base.data.NftMetadata; import com.openelements.hiero.base.data.Page; import com.openelements.hiero.base.data.TransactionInfo; import java.util.List; @@ -235,4 +236,13 @@ default Optional queryAccount(@NonNull String accountId) throws Hie */ @NonNull Optional queryNetworkSupplies() throws HieroException; + + @NonNull + NftMetadata getNftMetadata(TokenId tokenId) throws HieroException; + + @NonNull + Page findNftTypesByOwner(AccountId ownerId); + + @NonNull + Page findAllNftTypes(); } diff --git a/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/mirrornode/NftRepository.java b/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/mirrornode/NftRepository.java index b3c8d2d8..3f278a62 100644 --- a/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/mirrornode/NftRepository.java +++ b/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/mirrornode/NftRepository.java @@ -4,6 +4,7 @@ import com.hedera.hashgraph.sdk.TokenId; import com.openelements.hiero.base.HieroException; import com.openelements.hiero.base.data.Nft; +import com.openelements.hiero.base.data.NftMetadata; import com.openelements.hiero.base.data.Page; import java.util.Objects; import java.util.Optional; @@ -14,6 +15,19 @@ */ public interface NftRepository { + Page findAllTypes() throws HieroException; + + + @NonNull + Page findTypesByOwner(@NonNull AccountId ownerId) throws HieroException; + + @NonNull + default Page findTypesByOwner(@NonNull String ownerId) throws HieroException { + Objects.requireNonNull(ownerId, "ownerId must not be null"); + return findTypesByOwner(AccountId.fromString(ownerId)); + } + + /** * Return all NFTs that are owned by the given owner. * @@ -140,4 +154,16 @@ default Optional findByOwnerAndTypeAndSerial(@NonNull String owner, @NonNul Objects.requireNonNull(tokenId, "tokenId must not be null"); return findByOwnerAndTypeAndSerial(AccountId.fromString(owner), TokenId.fromString(tokenId), serialNumber); } + + default NftMetadata getNftMetadata(String tokenId) throws HieroException { + Objects.requireNonNull(tokenId, "tokenId must not be null"); + return getNftMetadata(TokenId.fromString(tokenId)); + } + + NftMetadata getNftMetadata(TokenId tokenId) throws HieroException; + + default NftMetadata getNftMetadata(Nft nft) throws HieroException { + Objects.requireNonNull(nft, "nft must not be null"); + return getNftMetadata(nft.tokenId()); + } } diff --git a/hiero-enterprise-microprofile/src/main/java/com/openelements/hiero/microprofile/ClientProvider.java b/hiero-enterprise-microprofile/src/main/java/com/openelements/hiero/microprofile/ClientProvider.java index 56b94eb2..0a2459d9 100644 --- a/hiero-enterprise-microprofile/src/main/java/com/openelements/hiero/microprofile/ClientProvider.java +++ b/hiero-enterprise-microprofile/src/main/java/com/openelements/hiero/microprofile/ClientProvider.java @@ -11,6 +11,8 @@ import com.openelements.hiero.base.implementation.FileClientImpl; import com.openelements.hiero.base.implementation.HieroNetwork; import com.openelements.hiero.base.implementation.NetworkRepositoryImpl; +import com.openelements.hiero.base.implementation.NetworkRepositoryImpl; +import com.openelements.hiero.base.implementation.NftRepositoryImpl; import com.openelements.hiero.base.implementation.NftClientImpl; import com.openelements.hiero.base.implementation.NftRepositoryImpl; import com.openelements.hiero.base.implementation.ProtocolLayerClientImpl; @@ -28,6 +30,7 @@ import com.openelements.hiero.microprofile.implementation.MirrorNodeClientImpl; import com.openelements.hiero.microprofile.implementation.MirrorNodeJsonConverterImpl; import com.openelements.hiero.microprofile.implementation.MirrorNodeRestClientImpl; +import com.openelements.hiero.microprofile.implementation.MirrorNodeClientImpl; import jakarta.enterprise.context.ApplicationScoped; import jakarta.enterprise.inject.Produces; import jakarta.inject.Inject; diff --git a/hiero-enterprise-microprofile/src/main/java/com/openelements/hiero/microprofile/implementation/MirrorNodeClientImpl.java b/hiero-enterprise-microprofile/src/main/java/com/openelements/hiero/microprofile/implementation/MirrorNodeClientImpl.java index a6e1ae16..9d880f8b 100644 --- a/hiero-enterprise-microprofile/src/main/java/com/openelements/hiero/microprofile/implementation/MirrorNodeClientImpl.java +++ b/hiero-enterprise-microprofile/src/main/java/com/openelements/hiero/microprofile/implementation/MirrorNodeClientImpl.java @@ -4,6 +4,7 @@ import com.hedera.hashgraph.sdk.TokenId; import com.openelements.hiero.base.HieroException; import com.openelements.hiero.base.data.Nft; +import com.openelements.hiero.base.data.NftMetadata; import com.openelements.hiero.base.data.Page; import com.openelements.hiero.base.data.TransactionInfo; import com.openelements.hiero.base.implementation.AbstractMirrorNodeClient; @@ -62,4 +63,19 @@ public MirrorNodeClientImpl(MirrorNodeRestClient restClient, public @NonNull Optional queryTransaction(@NonNull String transactionId) throws HieroException { throw new RuntimeException("Not implemented"); } + + @Override + public @NonNull NftMetadata getNftMetadata(TokenId tokenId) throws HieroException { + throw new RuntimeException("Not implemented"); + } + + @Override + public @NonNull Page findNftTypesByOwner(AccountId ownerId) { + throw new RuntimeException("Not implemented"); + } + + @Override + public @NonNull Page findAllNftTypes() { + throw new RuntimeException("Not implemented"); + } } diff --git a/hiero-enterprise-microprofile/src/test/java/com/openelements/hiero/microprofile/test/AccountRepositoryTest.java b/hiero-enterprise-microprofile/src/test/java/com/openelements/hiero/microprofile/test/AccountRepositoryTest.java index a191ee0f..f34ce5dc 100644 --- a/hiero-enterprise-microprofile/src/test/java/com/openelements/hiero/microprofile/test/AccountRepositoryTest.java +++ b/hiero-enterprise-microprofile/src/test/java/com/openelements/hiero/microprofile/test/AccountRepositoryTest.java @@ -41,8 +41,8 @@ void findById() throws Exception { final Account account = accountClient.createAccount(); final AccountId newOwner = account.accountId(); //TODO: fix sleep - Thread.sleep(5_000); - + Thread.sleep(10_000); + //when final Optional result = accountRepository.findById(newOwner); diff --git a/hiero-enterprise-spring/src/main/java/com/openelements/hiero/spring/implementation/MirrorNodeClientImpl.java b/hiero-enterprise-spring/src/main/java/com/openelements/hiero/spring/implementation/MirrorNodeClientImpl.java index bcc93e59..51f6e399 100644 --- a/hiero-enterprise-spring/src/main/java/com/openelements/hiero/spring/implementation/MirrorNodeClientImpl.java +++ b/hiero-enterprise-spring/src/main/java/com/openelements/hiero/spring/implementation/MirrorNodeClientImpl.java @@ -6,6 +6,7 @@ import com.hedera.hashgraph.sdk.TokenId; import com.openelements.hiero.base.HieroException; import com.openelements.hiero.base.data.Nft; +import com.openelements.hiero.base.data.NftMetadata; import com.openelements.hiero.base.data.Page; import com.openelements.hiero.base.data.TransactionInfo; import com.openelements.hiero.base.implementation.AbstractMirrorNodeClient; @@ -94,4 +95,18 @@ public Optional queryTransaction(@NonNull final String transact return Optional.of(new TransactionInfo(transactionId)); } + @Override + public @NonNull NftMetadata getNftMetadata(TokenId tokenId) throws HieroException { + throw new UnsupportedOperationException("Not yet implemented"); + } + + @Override + public @NonNull Page findNftTypesByOwner(AccountId ownerId) { + throw new UnsupportedOperationException("Not yet implemented"); + } + + @Override + public @NonNull Page findAllNftTypes() { + throw new UnsupportedOperationException("Not yet implemented"); + } }