fix upsert logic for users

Co-authored-by: Álvaro Brey <alvaro.brey@nextcloud.com>
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
This commit is contained in:
Andy Scherzinger 2022-06-27 17:13:20 +02:00
parent dc83403606
commit f1dff03188
No known key found for this signature in database
GPG Key ID: 6CADC7E3523C308B

View File

@ -119,9 +119,9 @@ class UserManager internal constructor(private val userRepository: UsersReposito
fun createOrUpdateUser(
username: String?,
userAttributes: UserAttributes,
): Maybe<User?> {
): Maybe<User> {
val userObservable: Maybe<User> = if (userAttributes.id != null) {
val userMaybe: Maybe<User> = if (userAttributes.id != null) {
userRepository.getUserWithId(userAttributes.id)
} else if (username != null && userAttributes.serverUrl != null) {
userRepository.getUserWithUsernameAndServer(username, userAttributes.serverUrl)
@ -129,9 +129,9 @@ class UserManager internal constructor(private val userRepository: UsersReposito
Maybe.empty()
}
return userObservable
return userMaybe
.map { user: User? ->
val userModel = when (user) {
when (user) {
null -> createUser(
username,
userAttributes
@ -144,9 +144,12 @@ class UserManager internal constructor(private val userRepository: UsersReposito
user
}
}
val id = userRepository.insertUser(userModel)
id
}.flatMap { id ->
}
.switchIfEmpty(Maybe.just(createUser(username, userAttributes)))
.map { user ->
userRepository.insertUser(user)
}
.flatMap { id ->
userRepository.getUserWithId(id)
}
}