Skip to content

Commit 6f7cda2

Browse files
Merge pull request #121 from OpenElements/mirror-node-support
More functionality for NFT Repository and dummy impl of mirror node f…
2 parents a898b04 + 357862d commit 6f7cda2

File tree

9 files changed

+123
-4
lines changed

9 files changed

+123
-4
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.openelements.hiero.base.data;
2+
3+
import com.hedera.hashgraph.sdk.AccountId;
4+
import com.hedera.hashgraph.sdk.TokenId;
5+
import java.util.Objects;
6+
7+
public record NftMetadata(TokenId tokenId, String name, String symbol, AccountId treasuryAccountId) implements
8+
TokenMetadata {
9+
10+
public NftMetadata {
11+
Objects.requireNonNull(tokenId, "tokenId must not be null");
12+
Objects.requireNonNull(name, "name must not be null");
13+
Objects.requireNonNull(symbol, "symbol must not be null");
14+
Objects.requireNonNull(treasuryAccountId, "treasuryAccountId must not be null");
15+
}
16+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.openelements.hiero.base.data;
2+
3+
import com.hedera.hashgraph.sdk.AccountId;
4+
import com.hedera.hashgraph.sdk.TokenId;
5+
6+
public interface TokenMetadata {
7+
8+
TokenId tokenId();
9+
10+
String name();
11+
12+
String symbol();
13+
14+
AccountId treasuryAccountId();
15+
}

hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/NftRepositoryImpl.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44
import com.hedera.hashgraph.sdk.TokenId;
55
import com.openelements.hiero.base.HieroException;
66
import com.openelements.hiero.base.data.Nft;
7-
import com.openelements.hiero.base.mirrornode.NftRepository;
8-
import com.openelements.hiero.base.mirrornode.MirrorNodeClient;
7+
import com.openelements.hiero.base.data.NftMetadata;
98
import com.openelements.hiero.base.data.Page;
9+
import com.openelements.hiero.base.mirrornode.MirrorNodeClient;
10+
import com.openelements.hiero.base.mirrornode.NftRepository;
1011
import java.util.Objects;
1112
import java.util.Optional;
1213
import org.jspecify.annotations.NonNull;
@@ -51,4 +52,21 @@ public Optional<Nft> findByOwnerAndTypeAndSerial(@NonNull final AccountId owner,
5152
final long serialNumber) throws HieroException {
5253
return mirrorNodeClient.queryNftsByAccountAndTokenIdAndSerial(owner, tokenId, serialNumber);
5354
}
55+
56+
@NonNull
57+
@Override
58+
public NftMetadata getNftMetadata(TokenId tokenId) throws HieroException {
59+
return mirrorNodeClient.getNftMetadata(tokenId);
60+
}
61+
62+
@NonNull
63+
@Override
64+
public Page<NftMetadata> findTypesByOwner(@NonNull AccountId ownerId) throws HieroException {
65+
return mirrorNodeClient.findNftTypesByOwner(ownerId);
66+
}
67+
68+
@Override
69+
public Page<NftMetadata> findAllTypes() throws HieroException {
70+
return mirrorNodeClient.findAllNftTypes();
71+
}
5472
}

hiero-enterprise-base/src/main/java/com/openelements/hiero/base/mirrornode/MirrorNodeClient.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.openelements.hiero.base.data.NetworkStake;
1010
import com.openelements.hiero.base.data.NetworkSupplies;
1111
import com.openelements.hiero.base.data.Nft;
12+
import com.openelements.hiero.base.data.NftMetadata;
1213
import com.openelements.hiero.base.data.Page;
1314
import com.openelements.hiero.base.data.TransactionInfo;
1415
import java.util.List;
@@ -235,4 +236,13 @@ default Optional<AccountInfo> queryAccount(@NonNull String accountId) throws Hie
235236
*/
236237
@NonNull
237238
Optional<NetworkSupplies> queryNetworkSupplies() throws HieroException;
239+
240+
@NonNull
241+
NftMetadata getNftMetadata(TokenId tokenId) throws HieroException;
242+
243+
@NonNull
244+
Page<NftMetadata> findNftTypesByOwner(AccountId ownerId);
245+
246+
@NonNull
247+
Page<NftMetadata> findAllNftTypes();
238248
}

hiero-enterprise-base/src/main/java/com/openelements/hiero/base/mirrornode/NftRepository.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.hedera.hashgraph.sdk.TokenId;
55
import com.openelements.hiero.base.HieroException;
66
import com.openelements.hiero.base.data.Nft;
7+
import com.openelements.hiero.base.data.NftMetadata;
78
import com.openelements.hiero.base.data.Page;
89
import java.util.Objects;
910
import java.util.Optional;
@@ -14,6 +15,19 @@
1415
*/
1516
public interface NftRepository {
1617

18+
Page<NftMetadata> findAllTypes() throws HieroException;
19+
20+
21+
@NonNull
22+
Page<NftMetadata> findTypesByOwner(@NonNull AccountId ownerId) throws HieroException;
23+
24+
@NonNull
25+
default Page<NftMetadata> findTypesByOwner(@NonNull String ownerId) throws HieroException {
26+
Objects.requireNonNull(ownerId, "ownerId must not be null");
27+
return findTypesByOwner(AccountId.fromString(ownerId));
28+
}
29+
30+
1731
/**
1832
* Return all NFTs that are owned by the given owner.
1933
*
@@ -140,4 +154,16 @@ default Optional<Nft> findByOwnerAndTypeAndSerial(@NonNull String owner, @NonNul
140154
Objects.requireNonNull(tokenId, "tokenId must not be null");
141155
return findByOwnerAndTypeAndSerial(AccountId.fromString(owner), TokenId.fromString(tokenId), serialNumber);
142156
}
157+
158+
default NftMetadata getNftMetadata(String tokenId) throws HieroException {
159+
Objects.requireNonNull(tokenId, "tokenId must not be null");
160+
return getNftMetadata(TokenId.fromString(tokenId));
161+
}
162+
163+
NftMetadata getNftMetadata(TokenId tokenId) throws HieroException;
164+
165+
default NftMetadata getNftMetadata(Nft nft) throws HieroException {
166+
Objects.requireNonNull(nft, "nft must not be null");
167+
return getNftMetadata(nft.tokenId());
168+
}
143169
}

hiero-enterprise-microprofile/src/main/java/com/openelements/hiero/microprofile/ClientProvider.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
import com.openelements.hiero.base.implementation.FileClientImpl;
1212
import com.openelements.hiero.base.implementation.HieroNetwork;
1313
import com.openelements.hiero.base.implementation.NetworkRepositoryImpl;
14+
import com.openelements.hiero.base.implementation.NetworkRepositoryImpl;
15+
import com.openelements.hiero.base.implementation.NftRepositoryImpl;
1416
import com.openelements.hiero.base.implementation.NftClientImpl;
1517
import com.openelements.hiero.base.implementation.NftRepositoryImpl;
1618
import com.openelements.hiero.base.implementation.ProtocolLayerClientImpl;
@@ -28,6 +30,7 @@
2830
import com.openelements.hiero.microprofile.implementation.MirrorNodeClientImpl;
2931
import com.openelements.hiero.microprofile.implementation.MirrorNodeJsonConverterImpl;
3032
import com.openelements.hiero.microprofile.implementation.MirrorNodeRestClientImpl;
33+
import com.openelements.hiero.microprofile.implementation.MirrorNodeClientImpl;
3134
import jakarta.enterprise.context.ApplicationScoped;
3235
import jakarta.enterprise.inject.Produces;
3336
import jakarta.inject.Inject;

hiero-enterprise-microprofile/src/main/java/com/openelements/hiero/microprofile/implementation/MirrorNodeClientImpl.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.hedera.hashgraph.sdk.TokenId;
55
import com.openelements.hiero.base.HieroException;
66
import com.openelements.hiero.base.data.Nft;
7+
import com.openelements.hiero.base.data.NftMetadata;
78
import com.openelements.hiero.base.data.Page;
89
import com.openelements.hiero.base.data.TransactionInfo;
910
import com.openelements.hiero.base.implementation.AbstractMirrorNodeClient;
@@ -62,4 +63,19 @@ public MirrorNodeClientImpl(MirrorNodeRestClient<JsonObject> restClient,
6263
public @NonNull Optional<TransactionInfo> queryTransaction(@NonNull String transactionId) throws HieroException {
6364
throw new RuntimeException("Not implemented");
6465
}
66+
67+
@Override
68+
public @NonNull NftMetadata getNftMetadata(TokenId tokenId) throws HieroException {
69+
throw new RuntimeException("Not implemented");
70+
}
71+
72+
@Override
73+
public @NonNull Page<NftMetadata> findNftTypesByOwner(AccountId ownerId) {
74+
throw new RuntimeException("Not implemented");
75+
}
76+
77+
@Override
78+
public @NonNull Page<NftMetadata> findAllNftTypes() {
79+
throw new RuntimeException("Not implemented");
80+
}
6581
}

hiero-enterprise-microprofile/src/test/java/com/openelements/hiero/microprofile/test/AccountRepositoryTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ void findById() throws Exception {
4141
final Account account = accountClient.createAccount();
4242
final AccountId newOwner = account.accountId();
4343
//TODO: fix sleep
44-
Thread.sleep(5_000);
45-
44+
Thread.sleep(10_000);
45+
4646
//when
4747
final Optional<AccountInfo> result = accountRepository.findById(newOwner);
4848

hiero-enterprise-spring/src/main/java/com/openelements/hiero/spring/implementation/MirrorNodeClientImpl.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.hedera.hashgraph.sdk.TokenId;
77
import com.openelements.hiero.base.HieroException;
88
import com.openelements.hiero.base.data.Nft;
9+
import com.openelements.hiero.base.data.NftMetadata;
910
import com.openelements.hiero.base.data.Page;
1011
import com.openelements.hiero.base.data.TransactionInfo;
1112
import com.openelements.hiero.base.implementation.AbstractMirrorNodeClient;
@@ -94,4 +95,18 @@ public Optional<TransactionInfo> queryTransaction(@NonNull final String transact
9495
return Optional.of(new TransactionInfo(transactionId));
9596
}
9697

98+
@Override
99+
public @NonNull NftMetadata getNftMetadata(TokenId tokenId) throws HieroException {
100+
throw new UnsupportedOperationException("Not yet implemented");
101+
}
102+
103+
@Override
104+
public @NonNull Page<NftMetadata> findNftTypesByOwner(AccountId ownerId) {
105+
throw new UnsupportedOperationException("Not yet implemented");
106+
}
107+
108+
@Override
109+
public @NonNull Page<NftMetadata> findAllNftTypes() {
110+
throw new UnsupportedOperationException("Not yet implemented");
111+
}
97112
}

0 commit comments

Comments
 (0)