@Service
public class WaterLevelSensorService {
private final static String WATER_SENSOR_CB_NAME = "waterSensorCb";
private final static String WATER_SENSOR_TL_NAME = "waterSensorTl";
private final Esp32ApiClient esp32ApiClient;
public WaterLevelSensorService(Esp32ApiClient esp32ApiClient) {
this.esp32ApiClient = esp32ApiClient;
}
@CircuitBreaker(name = WATER_SENSOR_CB_NAME, fallbackMethod = "getWaterLevelFallback")
@TimeLimiter(name = WATER_SENSOR_TL_NAME, fallbackMethod = "getWaterLevelFallback")
public CompletableFuture<WaterSensorDataDto> getWaterLevel() {
return CompletableFuture.supplyAsync(() -> {
Map<String, Integer> waterLevel = esp32ApiClient.getWaterLevel();
return new WaterSensorDataDto(waterLevel.get("water_level"));
});
}
private CompletableFuture<WaterSensorDataDto> getWaterLevelFallback(Throwable throwable) {
throw new SensorApiException("Lost connection to water sensor API");
}
}