Skip to content

Commit

Permalink
perform nft query only once when fetching transactions with operations (
Browse files Browse the repository at this point in the history
  • Loading branch information
tanghel authored Jul 2, 2024
1 parent 2432ea9 commit 623916f
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 17 deletions.
17 changes: 0 additions & 17 deletions src/endpoints/tokens/token.transfer.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,6 @@ import { TransactionDetailed } from "../transactions/entities/transaction.detail
import { BinaryUtils } from "@multiversx/sdk-nestjs-common";
import { CacheService } from "@multiversx/sdk-nestjs-cache";
import { OriginLogger } from "@multiversx/sdk-nestjs-common";
import { QueryPagination } from "src/common/entities/query.pagination";
import { NftFilter } from "../nfts/entities/nft.filter";
import { IndexerService } from "src/common/indexer/indexer.service";
import { TokenAccount } from "src/common/indexer/entities";

@Injectable()
export class TokenTransferService {
Expand All @@ -28,7 +24,6 @@ export class TokenTransferService {
@Inject(forwardRef(() => EsdtService))
private readonly esdtService: EsdtService,
private readonly assetsService: AssetsService,
private readonly indexerService: IndexerService,
) { }

getTokenTransfer(elasticTransaction: any): { tokenIdentifier: string, tokenAmount: string } | undefined {
Expand Down Expand Up @@ -157,18 +152,6 @@ export class TokenTransferService {
}
}

const distinctNftIdentifiers = operations.filter(x => x.type === TransactionOperationType.nft).map(x => x.identifier).distinct();
if (distinctNftIdentifiers.length > 0) {
const elasticNfts = await this.indexerService.getNfts(new QueryPagination({ from: 0, size: distinctNftIdentifiers.length }), new NftFilter({ identifiers: distinctNftIdentifiers }));
const elasticNftsDict = elasticNfts.toRecord<TokenAccount>(x => x.identifier);

for (const operation of operations) {
if (elasticNftsDict[operation.identifier]) {
operation.name = elasticNftsDict[operation.identifier].data?.name ?? operation.name;
}
}
}

return operations;
}

Expand Down
21 changes: 21 additions & 0 deletions src/endpoints/transactions/transaction.get.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ import { MiniBlockType } from "../miniblocks/entities/mini.block.type";
import { TransactionStatus } from "./entities/transaction.status";
import { UsernameUtils } from "../usernames/username.utils";
import { TransactionLogEvent } from "./entities/transaction.log.event";
import { TransactionOperationType } from "./entities/transaction.operation.type";
import { QueryPagination } from "src/common/entities/query.pagination";
import { NftFilter } from "../nfts/entities/nft.filter";
import { TokenAccount } from "src/common/indexer/entities";

@Injectable()
export class TransactionGetService {
Expand Down Expand Up @@ -123,6 +127,7 @@ export class TransactionGetService {
}

this.applyUsernamesToDetailedTransaction(transaction, transactionDetailed);
await this.applyNftNameOnTransactionOperations([transactionDetailed]);

return ApiUtils.mergeObjects(new TransactionDetailed(), transactionDetailed);
} catch (error) {
Expand Down Expand Up @@ -248,4 +253,20 @@ export class TransactionGetService {
return null;
}
}

async applyNftNameOnTransactionOperations(transactions: TransactionDetailed[]): Promise<void> {
const operations = transactions.selectMany(x => x.operations ?? []);

const distinctNftIdentifiers = operations.filter(x => x.type === TransactionOperationType.nft).map(x => x.identifier).distinct();
if (distinctNftIdentifiers.length > 0) {
const elasticNfts = await this.indexerService.getNfts(new QueryPagination({ from: 0, size: distinctNftIdentifiers.length }), new NftFilter({ identifiers: distinctNftIdentifiers }));
const elasticNftsDict = elasticNfts.toRecord<TokenAccount>(x => x.identifier);

for (const operation of operations) {
if (elasticNftsDict[operation.identifier]) {
operation.name = elasticNftsDict[operation.identifier].data?.name ?? operation.name;
}
}
}
}
}
4 changes: 4 additions & 0 deletions src/endpoints/transactions/transaction.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -424,6 +424,8 @@ export class TransactionService {
detailedTransactions.push(transactionDetailed);
}

await this.transactionGetService.applyNftNameOnTransactionOperations(detailedTransactions);

return detailedTransactions;
}

Expand Down Expand Up @@ -489,6 +491,8 @@ export class TransactionService {
}
}

await this.transactionGetService.applyNftNameOnTransactionOperations(transactions);

return operations;
}

Expand Down

0 comments on commit 623916f

Please sign in to comment.