Я пытаюсь написать массовое сохранение или обновить функциональность. Если записи считываются из файла CSV и преобразуются в соответствующий класс, а затем для этой записи выполняется сохранение или обновление.
Ниже приведены шаги для сохранения или обновления
- Получить из БД по emailId. (Возможно, возвращается)
Если пользователь существует, сохраните его, чтобы обновить.
В случае успешной работы БД, вернуть Single типа Report.
Здесь Report является пользовательским классом.
Flowable.fromPublisher(userRepository.findByEmail(user.emailId)).firstElement()
Этот код возвращает MayBe, по этому я хочу вызвать Save / Update, который возвращает Single или error. В любом случае я хочу вернуть Single типа Report
Ниже приведен пример кода, который я пытался заблокировать, но я хочу сделать это неблокирующим образом
@Override
Single<BulkUploadReport> processData(String nextLine) {
List<Object> errors = new ArrayList<>()
Single.create({ emitter ->
def parsedString = parseCsv(nextLine, readFirstLine: true, columnNames: columnNames)
for (record in parsedString) {
try {
User user = parseRecord(record)
List<String> roles = parseRoles(record[14])
User dbUser = Flowable.fromPublisher(userRepository.findByEmail(user.emailId)).firstElement().blockingGet()
if(dbUser == null){
userService.save(user, user.emailId, roles, saveUserkey).blockingGet()
}else{
user.userkey = dbUser.userkey
Single.fromPublisher(userRepository.updateUser(saveUserkey, user)).blockingGet()
}
emitter.onSuccess(new BulkUploadReport(record[0] as int, true, null))
} catch (Exception e) {
log.error("Error in bulk update.Handled grac8efully: ${e.getMessage()}")
ArrayList<String> err = e.getMessage().tokenize(",") as ArrayList<String>
errors.addAll(err)
emitter.onSuccess(new BulkUploadReport(record[0] as int, false,errors))
}
}
}) as Single<BulkUploadReport>
}
UserRepository:
Publisher<User> updateUser(String saveUserKey, User user)
Publisher<User> findByEmail(String emailId)
Publisher<Success> insertUser(User user)
Я новичок в RxJava и не понимаю, как связать эти события.