28 lines
1.1 KiB
Kotlin
28 lines
1.1 KiB
Kotlin
package be.simplenotes.domain.usecases.users.delete
|
|
|
|
import arrow.core.Either
|
|
import arrow.core.extensions.fx
|
|
import arrow.core.rightIfNotNull
|
|
import be.simplenotes.domain.security.PasswordHash
|
|
import be.simplenotes.domain.usecases.repositories.UserRepository
|
|
import be.simplenotes.domain.usecases.search.NoteSearcher
|
|
import be.simplenotes.domain.validation.UserValidations
|
|
|
|
internal class DeleteUseCaseImpl(
|
|
private val userRepository: UserRepository,
|
|
private val passwordHash: PasswordHash,
|
|
private val searcher: NoteSearcher,
|
|
) : DeleteUseCase {
|
|
override fun delete(form: DeleteForm) = Either.fx<DeleteError, Unit> {
|
|
val user = !UserValidations.validateDelete(form)
|
|
val persistedUser = !userRepository.find(user.username).rightIfNotNull { DeleteError.Unregistered }
|
|
!Either.cond(
|
|
passwordHash.verify(user.password, persistedUser.password),
|
|
{ Unit },
|
|
{ DeleteError.WrongPassword }
|
|
)
|
|
!Either.cond(userRepository.delete(persistedUser.id), { Unit }, { DeleteError.Unregistered })
|
|
searcher.dropIndex(persistedUser.id)
|
|
}
|
|
}
|