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