我目前正在学习使用 ArrowKT,并且我有以下代码用于验证输入。我试图一次收集所有错误并并行执行验证,因为它们中的大多数都是针对数据库完成的。
return Validated.applicativeNel<ValidationError>()
.tupledN(
validateA(input).toValidatedNel(),
validateB(input).toValidatedNel(),
validateC(input).toValidatedNel(),
validateSlotIsFree(input).toValidatedNel(),
)
.fix()
.map { (a, b, c, _) ->
...
}
private suspend fun validateSlotIsFree(input: CreateDto): Validated<ValidationError.SlotUnavailable, Boolean> {
val exists = appointmentRepository.existsBy...()
return if (exists) true.valid() else ValidationError.SlotUnavailable.invalid()
}
有没有更好的方法来处理内部验证validateSlotIsFree
?如果有效,我似乎被迫在右侧返回一些东西,但我不想这样做。我一直在寻找类似的东西,Option
其中值将是错误,而为空则意味着验证已通过。这样做的问题是,它Validated.fromOption(...)
会取值并将其应用于右侧,而我需要相反的情况。