41 lines
1.1 KiB
Swift
41 lines
1.1 KiB
Swift
import Dependencies
|
|
import Logging
|
|
import PsychrometricClient
|
|
import Routes
|
|
|
|
public extension HydronicSystemPressure.Request {
|
|
|
|
func respond(logger: Logger) async throws -> HydronicSystemPressure.Response {
|
|
@Dependency(\.psychrometricClient) var psychrometricClient
|
|
|
|
try validate()
|
|
|
|
let waterTemperature = DryBulb.fahrenheit(self.waterTemperature ?? 60)
|
|
|
|
let density = try await psychrometricClient.density.water(waterTemperature)
|
|
let pressure = height * (density.value / 144) + 5
|
|
var warnings = [String]()
|
|
|
|
if self.waterTemperature == nil {
|
|
warnings.append(
|
|
"""
|
|
Calculations based on default water temperature of 60°F.
|
|
"""
|
|
)
|
|
}
|
|
|
|
return .init(pressure: pressure, waterDensity: density, warnings: warnings)
|
|
}
|
|
|
|
private func validate() throws {
|
|
guard height > 0 else {
|
|
throw ValidationError(message: "Height should be greater than 0.")
|
|
}
|
|
if let waterTemperature {
|
|
guard waterTemperature > 32 else {
|
|
throw ValidationError(message: "Water temperature should be above freezing.")
|
|
}
|
|
}
|
|
}
|
|
}
|