[#1429] Get memos for rawID

- New API for getting the memos by transaction's rawID

[#1429] Get memos for rawID

- Mock regenerated to have unique names

[#1429] Get memos for rawID

- Offlinetest fixed
This commit is contained in:
Lukas Korba 2024-05-28 18:06:31 +02:00
parent d97d19694a
commit 9de9ea5e78
8 changed files with 89 additions and 18 deletions

View File

@ -6,6 +6,9 @@ and this library adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
# Unreleased
## Added
- New API `getMemos(for rawID: Data) -> [Memos]` to load memos for a certain transaction (ZcashTransaction.Overview) defined by its rawID.
# 2.1.7 - 2024-05-16
## Changed

View File

@ -135,15 +135,19 @@ class TransactionSQLDAO: TransactionRepository {
return try await execute(query) { try ZcashTransaction.Overview(row: $0) }
}
func findMemos(for transaction: ZcashTransaction.Overview) async throws -> [Memo] {
func findMemos(for rawID: Data) async throws -> [Memo] {
do {
return try await getTransactionOutputs(for: transaction.rawID)
return try await getTransactionOutputs(for: rawID)
.compactMap { $0.memo }
} catch {
throw ZcashError.transactionRepositoryFindMemos(error)
}
}
func findMemos(for transaction: ZcashTransaction.Overview) async throws -> [Memo] {
try await findMemos(for: transaction.rawID)
}
func getTransactionOutputs(for rawID: Data) async throws -> [ZcashTransaction.Output] {
let query = self.txOutputsView
.filter(ZcashTransaction.Output.Column.rawID == Blob(bytes: rawID.bytes))

View File

@ -19,6 +19,9 @@ protocol TransactionRepository {
func findPendingTransactions(latestHeight: BlockHeight, offset: Int, limit: Int) async throws -> [ZcashTransaction.Overview]
func findReceived(offset: Int, limit: Int) async throws -> [ZcashTransaction.Overview]
func findSent(offset: Int, limit: Int) async throws -> [ZcashTransaction.Overview]
// sourcery: mockedName="findMemosForRawID"
func findMemos(for rawID: Data) async throws -> [Memo]
// sourcery: mockedName="findMemosForZcashTransaction"
func findMemos(for transaction: ZcashTransaction.Overview) async throws -> [Memo]
func getRecipients(for rawID: Data) async throws -> [TransactionRecipient]
func getTransactionOutputs(for rawID: Data) async throws -> [ZcashTransaction.Output]

View File

@ -263,6 +263,11 @@ public protocol Synchronizer: AnyObject {
/// - Parameter kind: Transaction Kind expected from this PaginatedTransactionRepository
func paginatedTransactions(of kind: TransactionKind) -> PaginatedTransactionRepository
/// Get all memos for `transaction.rawID`.
///
// sourcery: mockedName="getMemosForRawID"
func getMemos(for rawID: Data) async throws -> [Memo]
/// Get all memos for `transaction`.
///
// sourcery: mockedName="getMemosForClearedTransaction"

View File

@ -480,8 +480,12 @@ public class SDKSynchronizer: Synchronizer {
PagedTransactionRepositoryBuilder.build(initializer: initializer, kind: .all)
}
public func getMemos(for rawID: Data) async throws -> [Memo] {
return try await transactionRepository.findMemos(for: rawID)
}
public func getMemos(for transaction: ZcashTransaction.Overview) async throws -> [Memo] {
return try await transactionRepository.findMemos(for: transaction)
return try await transactionRepository.findMemos(for: transaction.rawID)
}
public func getRecipients(for transaction: ZcashTransaction.Overview) async -> [TransactionRecipient] {

View File

@ -201,6 +201,10 @@ extension MockTransactionRepository: TransactionRepository {
throw MockTransactionRepositoryError.notImplemented
}
func findMemos(for rawID: Data) throws -> [ZcashLightClientKit.Memo] {
throw MockTransactionRepositoryError.notImplemented
}
func findMemos(for transaction: ZcashLightClientKit.ZcashTransaction.Overview) throws -> [ZcashLightClientKit.Memo] {
throw MockTransactionRepositoryError.notImplemented
}

View File

@ -1,4 +1,4 @@
// Generated using Sourcery 2.2.3 https://github.com/krzysztofzablocki/Sourcery
// Generated using Sourcery 2.2.4 https://github.com/krzysztofzablocki/Sourcery
// DO NOT EDIT
import Combine
@testable import ZcashLightClientKit
@ -1600,6 +1600,30 @@ class SynchronizerMock: Synchronizer {
// MARK: - getMemos
var getMemosForRawIDThrowableError: Error?
var getMemosForRawIDCallsCount = 0
var getMemosForRawIDCalled: Bool {
return getMemosForRawIDCallsCount > 0
}
var getMemosForRawIDReceivedRawID: Data?
var getMemosForRawIDReturnValue: [Memo]!
var getMemosForRawIDClosure: ((Data) async throws -> [Memo])?
func getMemos(for rawID: Data) async throws -> [Memo] {
if let error = getMemosForRawIDThrowableError {
throw error
}
getMemosForRawIDCallsCount += 1
getMemosForRawIDReceivedRawID = rawID
if let closure = getMemosForRawIDClosure {
return try await closure(rawID)
} else {
return getMemosForRawIDReturnValue
}
}
// MARK: - getMemos
var getMemosForClearedTransactionThrowableError: Error?
var getMemosForClearedTransactionCallsCount = 0
var getMemosForClearedTransactionCalled: Bool {
@ -2094,25 +2118,49 @@ class TransactionRepositoryMock: TransactionRepository {
// MARK: - findMemos
var findMemosForThrowableError: Error?
var findMemosForCallsCount = 0
var findMemosForCalled: Bool {
return findMemosForCallsCount > 0
var findMemosForRawIDThrowableError: Error?
var findMemosForRawIDCallsCount = 0
var findMemosForRawIDCalled: Bool {
return findMemosForRawIDCallsCount > 0
}
var findMemosForReceivedTransaction: ZcashTransaction.Overview?
var findMemosForReturnValue: [Memo]!
var findMemosForClosure: ((ZcashTransaction.Overview) async throws -> [Memo])?
var findMemosForRawIDReceivedRawID: Data?
var findMemosForRawIDReturnValue: [Memo]!
var findMemosForRawIDClosure: ((Data) async throws -> [Memo])?
func findMemos(for transaction: ZcashTransaction.Overview) async throws -> [Memo] {
if let error = findMemosForThrowableError {
func findMemos(for rawID: Data) async throws -> [Memo] {
if let error = findMemosForRawIDThrowableError {
throw error
}
findMemosForCallsCount += 1
findMemosForReceivedTransaction = transaction
if let closure = findMemosForClosure {
findMemosForRawIDCallsCount += 1
findMemosForRawIDReceivedRawID = rawID
if let closure = findMemosForRawIDClosure {
return try await closure(rawID)
} else {
return findMemosForRawIDReturnValue
}
}
// MARK: - findMemos
var findMemosForZcashTransactionThrowableError: Error?
var findMemosForZcashTransactionCallsCount = 0
var findMemosForZcashTransactionCalled: Bool {
return findMemosForZcashTransactionCallsCount > 0
}
var findMemosForZcashTransactionReceivedTransaction: ZcashTransaction.Overview?
var findMemosForZcashTransactionReturnValue: [Memo]!
var findMemosForZcashTransactionClosure: ((ZcashTransaction.Overview) async throws -> [Memo])?
func findMemos(for transaction: ZcashTransaction.Overview) async throws -> [Memo] {
if let error = findMemosForZcashTransactionThrowableError {
throw error
}
findMemosForZcashTransactionCallsCount += 1
findMemosForZcashTransactionReceivedTransaction = transaction
if let closure = findMemosForZcashTransactionClosure {
return try await closure(transaction)
} else {
return findMemosForReturnValue
return findMemosForZcashTransactionReturnValue
}
}

View File

@ -3,7 +3,7 @@
scriptDir=${0:a:h}
cd "${scriptDir}"
sourcery_version=2.2.3
sourcery_version=2.2.4
if which sourcery >/dev/null; then
if [[ $(sourcery --version) != $sourcery_version ]]; then