clean up error handling

extract remote service error handling
- use helper in AccountRegistryService
- use helper in DeviceRegistryService
- add responseErrorHandler in Helper.kt
- add hlaejaErrorHandler in Helper.kt

change NoChangeException to extend HlaejaException

change NotFoundException to extend HlaejaException
This commit is contained in:
2025-04-04 16:09:27 +02:00
parent 1525702f07
commit fc981b0039
5 changed files with 30 additions and 45 deletions

View File

@@ -1,8 +1,6 @@
package ltd.hlaeja.service
import java.util.UUID
import ltd.hlaeja.exception.DeviceRegistryException
import ltd.hlaeja.exception.HlaejaException
import ltd.hlaeja.library.deviceRegistry.Type
import ltd.hlaeja.library.deviceRegistry.Types
import ltd.hlaeja.property.DeviceRegistryProperty
@@ -10,10 +8,10 @@ import ltd.hlaeja.util.deviceRegistryType
import ltd.hlaeja.util.deviceRegistryTypes
import ltd.hlaeja.util.deviceRegistryTypesCreate
import ltd.hlaeja.util.deviceRegistryTypesUpdate
import org.springframework.http.HttpStatus.BAD_REQUEST
import ltd.hlaeja.util.hlaejaErrorHandler
import ltd.hlaeja.util.responseErrorHandler
import org.springframework.stereotype.Service
import org.springframework.web.reactive.function.client.WebClient
import org.springframework.web.server.ResponseStatusException
import reactor.core.publisher.Flux
import reactor.core.publisher.Mono
@@ -31,33 +29,16 @@ class DeviceRegistryService(
fun createType(
request: Type.Request,
): Mono<Type.Response> = webClient.deviceRegistryTypesCreate(request, property)
.onErrorResume { error ->
when (error) {
is DeviceRegistryException -> Mono.error(error)
else -> Mono.error(ResponseStatusException(BAD_REQUEST, error.message))
}
}
.onErrorResume(::hlaejaErrorHandler)
fun getType(
type: UUID,
): Mono<Type.Response> = webClient.deviceRegistryType(type, property)
.onErrorResume { error ->
when (error) {
is ResponseStatusException -> Mono.error(error)
else -> Mono.error(ResponseStatusException(BAD_REQUEST, error.message))
}
}
.onErrorResume(::responseErrorHandler)
fun updateType(
type: UUID,
request: Type.Request,
): Mono<Type.Response> = webClient.deviceRegistryTypesUpdate(type, request, property)
.onErrorResume(::errorHandler)
private fun errorHandler(
error: Throwable,
): Mono<out Type.Response> = when (error) {
is HlaejaException -> Mono.error(error)
else -> Mono.error(ResponseStatusException(BAD_REQUEST, error.message))
}
.onErrorResume(::hlaejaErrorHandler)
}