Skip to content

Commit 1c0f6bc

Browse files
committed
More functionality for NFT Repository and dummy impl of mirror node for microprofile
1 parent 27a4cdf commit 1c0f6bc

File tree

8 files changed

+244
-4
lines changed

8 files changed

+244
-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;
@@ -231,4 +232,13 @@ default Optional<AccountInfo> queryAccount(@NonNull String accountId) throws Hie
231232
*/
232233
@NonNull
233234
Optional<NetworkSupplies> queryNetworkSupplies() throws HieroException;
235+
236+
@NonNull
237+
NftMetadata getNftMetadata(TokenId tokenId) throws HieroException;
238+
239+
@NonNull
240+
Page<NftMetadata> findNftTypesByOwner(AccountId ownerId);
241+
242+
@NonNull
243+
Page<NftMetadata> findAllNftTypes();
234244
}

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: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,23 @@
66
import com.openelements.hiero.base.SmartContractClient;
77
import com.openelements.hiero.base.config.HieroConfig;
88
import com.openelements.hiero.base.implementation.AccountClientImpl;
9+
import com.openelements.hiero.base.implementation.AccountRepositoryImpl;
910
import com.openelements.hiero.base.implementation.FileClientImpl;
11+
import com.openelements.hiero.base.implementation.NetworkRepositoryImpl;
12+
import com.openelements.hiero.base.implementation.NftRepositoryImpl;
1013
import com.openelements.hiero.base.implementation.ProtocolLayerClientImpl;
1114
import com.openelements.hiero.base.implementation.SmartContractClientImpl;
15+
import com.openelements.hiero.base.implementation.TransactionRepositoryImpl;
16+
import com.openelements.hiero.base.mirrornode.AccountRepository;
17+
import com.openelements.hiero.base.mirrornode.MirrorNodeClient;
18+
import com.openelements.hiero.base.mirrornode.NetworkRepository;
19+
import com.openelements.hiero.base.mirrornode.NftRepository;
20+
import com.openelements.hiero.base.mirrornode.TransactionRepository;
1221
import com.openelements.hiero.base.protocol.ProtocolLayerClient;
1322
import com.openelements.hiero.base.verification.ContractVerificationClient;
1423
import com.openelements.hiero.microprofile.implementation.ContractVerificationClientImpl;
1524
import com.openelements.hiero.microprofile.implementation.HieroConfigImpl;
25+
import com.openelements.hiero.microprofile.implementation.MirrorNodeClientImpl;
1626
import jakarta.enterprise.context.ApplicationScoped;
1727
import jakarta.enterprise.inject.Produces;
1828
import jakarta.inject.Inject;
@@ -71,4 +81,34 @@ AccountClient createAccountClient(@NonNull final ProtocolLayerClient protocolLay
7181
ContractVerificationClient createContractVerificationClient(@NonNull final HieroConfig hieroConfig) {
7282
return new ContractVerificationClientImpl(hieroConfig.getNetwork());
7383
}
84+
85+
@Produces
86+
@ApplicationScoped
87+
MirrorNodeClient createMirrorNodeClient() {
88+
return new MirrorNodeClientImpl();
89+
}
90+
91+
@Produces
92+
@ApplicationScoped
93+
AccountRepository createAccountRepository(@NonNull final MirrorNodeClient mirrorNodeClient) {
94+
return new AccountRepositoryImpl(mirrorNodeClient);
95+
}
96+
97+
@Produces
98+
@ApplicationScoped
99+
NetworkRepository createNetworkRepository(@NonNull final MirrorNodeClient mirrorNodeClient) {
100+
return new NetworkRepositoryImpl(mirrorNodeClient);
101+
}
102+
103+
@Produces
104+
@ApplicationScoped
105+
NftRepository createNftRepository(@NonNull final MirrorNodeClient mirrorNodeClient) {
106+
return new NftRepositoryImpl(mirrorNodeClient);
107+
}
108+
109+
@Produces
110+
@ApplicationScoped
111+
TransactionRepository createTransactionRepository(@NonNull final MirrorNodeClient mirrorNodeClient) {
112+
return new TransactionRepositoryImpl(mirrorNodeClient);
113+
}
74114
}
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
package com.openelements.hiero.microprofile.implementation;
2+
3+
import com.hedera.hashgraph.sdk.AccountId;
4+
import com.hedera.hashgraph.sdk.TokenId;
5+
import com.openelements.hiero.base.HieroException;
6+
import com.openelements.hiero.base.data.AccountInfo;
7+
import com.openelements.hiero.base.data.ExchangeRates;
8+
import com.openelements.hiero.base.data.NetworkFee;
9+
import com.openelements.hiero.base.data.NetworkStake;
10+
import com.openelements.hiero.base.data.NetworkSupplies;
11+
import com.openelements.hiero.base.data.Nft;
12+
import com.openelements.hiero.base.data.NftMetadata;
13+
import com.openelements.hiero.base.data.Page;
14+
import com.openelements.hiero.base.data.TransactionInfo;
15+
import com.openelements.hiero.base.mirrornode.MirrorNodeClient;
16+
import java.util.List;
17+
import java.util.Optional;
18+
import org.jspecify.annotations.NonNull;
19+
20+
public class MirrorNodeClientImpl implements MirrorNodeClient {
21+
@Override
22+
public @NonNull Page<Nft> queryNftsByAccount(@NonNull AccountId accountId) throws HieroException {
23+
throw new UnsupportedOperationException("Not yet implemented");
24+
}
25+
26+
@Override
27+
public @NonNull Page<Nft> queryNftsByAccountAndTokenId(@NonNull AccountId accountId, @NonNull TokenId tokenId)
28+
throws HieroException {
29+
throw new UnsupportedOperationException("Not yet implemented");
30+
}
31+
32+
@Override
33+
public @NonNull Page<Nft> queryNftsByTokenId(@NonNull TokenId tokenId) throws HieroException {
34+
throw new UnsupportedOperationException("Not yet implemented");
35+
}
36+
37+
@Override
38+
public @NonNull Optional<Nft> queryNftsByTokenIdAndSerial(@NonNull TokenId tokenId, long serialNumber)
39+
throws HieroException {
40+
throw new UnsupportedOperationException("Not yet implemented");
41+
}
42+
43+
@Override
44+
public @NonNull Optional<Nft> queryNftsByAccountAndTokenIdAndSerial(@NonNull AccountId accountId,
45+
@NonNull TokenId tokenId, long serialNumber) throws HieroException {
46+
throw new UnsupportedOperationException("Not yet implemented");
47+
}
48+
49+
@Override
50+
public @NonNull Page<TransactionInfo> queryTransactionsByAccount(@NonNull AccountId accountId)
51+
throws HieroException {
52+
throw new UnsupportedOperationException("Not yet implemented");
53+
}
54+
55+
@Override
56+
public @NonNull Optional<TransactionInfo> queryTransaction(@NonNull String transactionId) throws HieroException {
57+
throw new UnsupportedOperationException("Not yet implemented");
58+
}
59+
60+
@Override
61+
public @NonNull Optional<AccountInfo> queryAccount(@NonNull AccountId accountId) throws HieroException {
62+
throw new UnsupportedOperationException("Not yet implemented");
63+
}
64+
65+
@Override
66+
public @NonNull Optional<ExchangeRates> queryExchangeRates() throws HieroException {
67+
throw new UnsupportedOperationException("Not yet implemented");
68+
}
69+
70+
@Override
71+
public @NonNull List<NetworkFee> queryNetworkFees() throws HieroException {
72+
throw new UnsupportedOperationException("Not yet implemented");
73+
}
74+
75+
@Override
76+
public @NonNull Optional<NetworkStake> queryNetworkStake() throws HieroException {
77+
throw new UnsupportedOperationException("Not yet implemented");
78+
}
79+
80+
@Override
81+
public @NonNull Optional<NetworkSupplies> queryNetworkSupplies() throws HieroException {
82+
throw new UnsupportedOperationException("Not yet implemented");
83+
}
84+
85+
@Override
86+
public @NonNull NftMetadata getNftMetadata(TokenId tokenId) throws HieroException {
87+
throw new UnsupportedOperationException("Not yet implemented");
88+
}
89+
90+
@Override
91+
public @NonNull Page<NftMetadata> findNftTypesByOwner(AccountId ownerId) {
92+
throw new UnsupportedOperationException("Not yet implemented");
93+
}
94+
95+
@Override
96+
public @NonNull Page<NftMetadata> findAllNftTypes() {
97+
throw new UnsupportedOperationException("Not yet implemented");
98+
}
99+
}

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

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,17 @@
66
import com.hedera.hashgraph.sdk.AccountId;
77
import com.hedera.hashgraph.sdk.TokenId;
88
import com.openelements.hiero.base.HieroException;
9-
import com.openelements.hiero.base.data.Nft;
109
import com.openelements.hiero.base.data.AccountInfo;
1110
import com.openelements.hiero.base.data.ExchangeRate;
1211
import com.openelements.hiero.base.data.ExchangeRates;
13-
import com.openelements.hiero.base.mirrornode.MirrorNodeClient;
1412
import com.openelements.hiero.base.data.NetworkFee;
1513
import com.openelements.hiero.base.data.NetworkStake;
1614
import com.openelements.hiero.base.data.NetworkSupplies;
15+
import com.openelements.hiero.base.data.Nft;
16+
import com.openelements.hiero.base.data.NftMetadata;
1717
import com.openelements.hiero.base.data.Page;
1818
import com.openelements.hiero.base.data.TransactionInfo;
19+
import com.openelements.hiero.base.mirrornode.MirrorNodeClient;
1920
import java.io.IOException;
2021
import java.net.URI;
2122
import java.time.Instant;
@@ -415,4 +416,19 @@ private List<TransactionInfo> extractTransactionInfoFromJsonNode(JsonNode jsonNo
415416
}
416417
}).toList();
417418
}
419+
420+
@Override
421+
public @NonNull NftMetadata getNftMetadata(TokenId tokenId) throws HieroException {
422+
throw new UnsupportedOperationException("Not yet implemented");
423+
}
424+
425+
@Override
426+
public @NonNull Page<NftMetadata> findNftTypesByOwner(AccountId ownerId) {
427+
throw new UnsupportedOperationException("Not yet implemented");
428+
}
429+
430+
@Override
431+
public @NonNull Page<NftMetadata> findAllNftTypes() {
432+
throw new UnsupportedOperationException("Not yet implemented");
433+
}
418434
}

0 commit comments

Comments
 (0)