Files
swift-hvac-toolbox/Sources/ApiController/Extensions/HydronicSystemPressure.swift
Michael Housh 159031a023
Some checks are pending
CI / macOS (debug, 16.2) (push) Waiting to run
CI / macOS (release, 16.2) (push) Waiting to run
CI / ubuntu (push) Successful in 6m58s
feat: Adds hydronic system pressure calculator.
2025-03-07 15:15:28 -05:00

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.")
}
}
}
}