Tower Guidev2
09/21/2022, 1:15 PMTower Guidev2
09/21/2022, 1:16 PMprivate suspend fun actualWork(): Either<Any, Any> = either {
val networkData = repository.pharmaDocumentsSearch(options = mapOf("text" to "*", "limitation.count" to "100")).tapLeft { networkError -> consumeNetworkError(workerName, networkError) }.bind()
Either.catch { repository.database.documentSearchItemDAO().insertAsync(manufacture(networkData)) }.tapLeft { databaseError -> consumeDatabaseError(workerName, databaseError) }.bind()
}
Tower Guidev2
09/21/2022, 1:17 PMfun consumeNetworkError(caller: String, exception: CallError) {
when (exception) {
is HttpError -> doLogging { "$caller Network Http error :: ${exception.code} ${exception.message} ${exception.body}" }
is IOError -> doLogging(exception.cause) { "$caller Network IO error" }
is UnexpectedCallError -> doLogging(exception.cause) { "$caller Unexpected Network error" }
}
}
which all works really nicelyTower Guidev2
09/21/2022, 1:18 PMactualWork
function fails silentlyTower Guidev2
09/21/2022, 1:19 PMoverride suspend fun pharmaDocumentsSearch(headers: Map<String, String>, options: Map<String, String>): Either<CallError, DocumentsSearch> =
withContext(NETWORK) { service.pharmaDocumentsSearch(headers = HEADERS, options) }
Tower Guidev2
09/21/2022, 1:20 PMEither.catch { }