Files
swift-hvac-toolbox/Sources/Routes/Models/HydronicSystemPressure.swift
Michael Housh a44cc6975d
Some checks failed
CI / ubuntu (push) Failing after 7m22s
CI / macOS (debug, 16.2) (push) Has been cancelled
CI / macOS (release, 16.2) (push) Has been cancelled
feat: Adds psi to feet of head conversion.
2025-03-07 16:27:03 -05:00

84 lines
2.0 KiB
Swift

import CasePaths
import PsychrometricClient
@preconcurrency import URLRouting
public enum HydronicSystemPressure {
public static let description = """
Calculate the required hydronic system pressure based on height of a building.
"""
public struct Request: Codable, Equatable, Hashable, Sendable {
public let height: Double
public let waterTemperature: Double?
public init(height: Double, waterTemperature: Double? = nil) {
self.height = height
self.waterTemperature = waterTemperature
}
public enum FieldKey: String, CaseIterable {
case height
case waterTemperature
}
}
public struct Response: Codable, Equatable, Sendable {
public let pressure: Double
public let waterDensity: DensityOf<Water>
public let warnings: [String]
public init(pressure: Double, waterDensity: DensityOf<Water>, warnings: [String]) {
self.pressure = pressure
self.waterDensity = waterDensity
self.warnings = warnings
}
}
}
// MARK: - Router
public extension SiteRoute.View {
enum HydronicSystemPressure: Equatable, Hashable, Sendable {
case index
case submit(Routes.HydronicSystemPressure.Request)
typealias Key = Routes.HydronicSystemPressure.Request.FieldKey
static let rootPath = "hydronic-system-pressure"
public static let router = OneOf {
Route(.case(Self.index)) {
Path { rootPath }
Method.get
}
Route(.case(Self.submit)) {
Path { rootPath }
Method.post
Body {
FormData {
Field(Key.height) { Double.parser() }
Optionally { Field(Key.waterTemperature) { Double.parser() } }
}
.map(.memberwise(Routes.HydronicSystemPressure.Request.init))
}
}
}
}
}
#if DEBUG
public extension HydronicSystemPressure.Response {
static let mock = Self(
pressure: 15,
waterDensity: 62.37,
warnings: [
"Water density based on 60 water - include water temperature for more accurate result."
]
)
}
#endif