feat: Begins hvac system performance
This commit is contained in:
@@ -42,3 +42,15 @@ public enum DehumidifierSize {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
|
||||
public extension DehumidifierSize.Response {
|
||||
|
||||
static var mock: Self {
|
||||
.init(requiredCapacity: 100, pintsPerDay: 100, recommendedSize: 100, recommendedUrl: "#", warnings: [
|
||||
"A warning.", "B warning"
|
||||
])
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
87
Sources/Routes/HVACSystemPerformance.swift
Normal file
87
Sources/Routes/HVACSystemPerformance.swift
Normal file
@@ -0,0 +1,87 @@
|
||||
import PsychrometricClient
|
||||
|
||||
public enum HVACSystemPerformance {
|
||||
|
||||
public struct Request: Codable, Equatable, Sendable {
|
||||
|
||||
public let altitude: Double?
|
||||
public let airflow: Double
|
||||
public let returnAirTemperature: Double
|
||||
public let returnAirHumidity: Double
|
||||
public let supplyAirTemperature: Double
|
||||
public let supplyAirHumidity: Double
|
||||
public let systemSize: Double
|
||||
|
||||
public init(
|
||||
altitude: Double? = nil,
|
||||
airflow: Double,
|
||||
returnAirTemperature: Double,
|
||||
returnAirHumidity: Double,
|
||||
supplyAirTemperature: Double,
|
||||
supplyAirHumidity: Double,
|
||||
systemSize: Double
|
||||
) {
|
||||
self.altitude = altitude
|
||||
self.airflow = airflow
|
||||
self.returnAirTemperature = returnAirTemperature
|
||||
self.returnAirHumidity = returnAirHumidity
|
||||
self.supplyAirTemperature = supplyAirTemperature
|
||||
self.supplyAirHumidity = supplyAirHumidity
|
||||
self.systemSize = systemSize
|
||||
}
|
||||
}
|
||||
|
||||
public struct Response: Codable, Equatable, Sendable {
|
||||
|
||||
public let returnAirProperties: PsychrometricProperties
|
||||
public let supplyAirProperties: PsychrometricProperties
|
||||
public let capacity: Capacity
|
||||
public let systemMetrics: SystemMetrics
|
||||
|
||||
public init(
|
||||
returnAirProperties: PsychrometricProperties,
|
||||
supplyAirProperties: PsychrometricProperties,
|
||||
capacity: HVACSystemPerformance.Capacity,
|
||||
systemMetrics: HVACSystemPerformance.SystemMetrics
|
||||
) {
|
||||
self.returnAirProperties = returnAirProperties
|
||||
self.supplyAirProperties = supplyAirProperties
|
||||
self.capacity = capacity
|
||||
self.systemMetrics = systemMetrics
|
||||
}
|
||||
}
|
||||
|
||||
public struct Capacity: Codable, Equatable, Sendable {
|
||||
|
||||
public let total: Double
|
||||
public let sensible: Double
|
||||
public let latent: Double
|
||||
public var shr: Double { sensible / total }
|
||||
|
||||
public init(total: Double, sensible: Double, latent: Double) {
|
||||
self.total = total
|
||||
self.sensible = sensible
|
||||
self.latent = latent
|
||||
}
|
||||
}
|
||||
|
||||
public struct SystemMetrics: Codable, Equatable, Sendable {
|
||||
|
||||
public let cfmPerTon: Double
|
||||
public let targetTemperatureSplit: Double
|
||||
public let actualTemperatureSplit: Double
|
||||
public let condensationRate: Double
|
||||
|
||||
public init(
|
||||
cfmPerTon: Double,
|
||||
targetTemperatureSplit: Double,
|
||||
actualTemperatureSplit: Double,
|
||||
condensationRate: Double
|
||||
) {
|
||||
self.cfmPerTon = cfmPerTon
|
||||
self.targetTemperatureSplit = targetTemperatureSplit
|
||||
self.actualTemperatureSplit = actualTemperatureSplit
|
||||
self.condensationRate = condensationRate
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Sources/Routes/HVACSystemSize.swift
Normal file
11
Sources/Routes/HVACSystemSize.swift
Normal file
@@ -0,0 +1,11 @@
|
||||
public enum HVACSystemSize: Double, Codable, Equatable, Sendable {
|
||||
case one = 1
|
||||
case oneAndAHalf = 1.5
|
||||
case two = 2
|
||||
case twoAndAHalf = 2.5
|
||||
case three = 3
|
||||
case threeAndAHalf = 3.5
|
||||
case four = 4
|
||||
case fourAndAHalf = 4.5
|
||||
case five = 5
|
||||
}
|
||||
@@ -24,6 +24,7 @@ public extension SiteRoute {
|
||||
enum Api: Equatable, Sendable {
|
||||
|
||||
case calculateDehumidifierSize(DehumidifierSize.Request)
|
||||
case calculateHVACSystemPerformance(HVACSystemPerformance.Request)
|
||||
case calculateMoldRisk(MoldRisk.Request)
|
||||
|
||||
static let rootPath = Path { "api"; "v1" }
|
||||
@@ -34,6 +35,11 @@ public extension SiteRoute {
|
||||
Method.post
|
||||
Body(.json(DehumidifierSize.Request.self))
|
||||
}
|
||||
Route(.case(Self.calculateHVACSystemPerformance)) {
|
||||
Path { "api"; "v1"; "calculateHVACSystemPerformance" }
|
||||
Method.post
|
||||
Body(.json(HVACSystemPerformance.Request.self))
|
||||
}
|
||||
Route(.case(Self.calculateMoldRisk)) {
|
||||
Path { "api"; "v1"; "calculateMoldRisk" }
|
||||
Method.post
|
||||
@@ -48,6 +54,7 @@ public extension SiteRoute {
|
||||
|
||||
case index
|
||||
case dehumidifierSize(DehumidifierSize)
|
||||
case hvacSystemPerformance(HVACSystemPerformance)
|
||||
case moldRisk(MoldRisk)
|
||||
|
||||
public static let router = OneOf {
|
||||
@@ -57,6 +64,9 @@ public extension SiteRoute {
|
||||
Route(.case(Self.dehumidifierSize)) {
|
||||
DehumidifierSize.router
|
||||
}
|
||||
Route(.case(Self.hvacSystemPerformance)) {
|
||||
HVACSystemPerformance.router
|
||||
}
|
||||
Route(.case(Self.moldRisk)) {
|
||||
MoldRisk.router
|
||||
}
|
||||
@@ -66,7 +76,7 @@ public extension SiteRoute {
|
||||
case index
|
||||
case submit(Routes.DehumidifierSize.Request)
|
||||
|
||||
static let rootPath = "dehumidifier-size"
|
||||
static let rootPath = "dehumidifier-sizing"
|
||||
|
||||
public static let router = OneOf {
|
||||
Route(.case(Self.index)) {
|
||||
@@ -88,6 +98,36 @@ public extension SiteRoute {
|
||||
}
|
||||
}
|
||||
|
||||
public enum HVACSystemPerformance: Equatable, Sendable {
|
||||
case index
|
||||
case submit(Routes.HVACSystemPerformance.Request)
|
||||
|
||||
static let rootPath = "hvac-system-performance"
|
||||
|
||||
public static let router = OneOf {
|
||||
Route(.case(Self.index)) {
|
||||
Path { rootPath }
|
||||
Method.get
|
||||
}
|
||||
Route(.case(Self.submit)) {
|
||||
Path { rootPath }
|
||||
Method.post
|
||||
Body {
|
||||
FormData {
|
||||
Optionally { Field("altitude") { Double.parser() } }
|
||||
Field("airflow") { Double.parser() }
|
||||
Field("returnAirTemperature") { Double.parser() }
|
||||
Field("returnAirHumidity") { Double.parser() }
|
||||
Field("supplyAirTemperature") { Double.parser() }
|
||||
Field("supplyAirHumidity") { Double.parser() }
|
||||
Field("systemSize") { Double.parser() }
|
||||
}
|
||||
.map(.memberwise(Routes.HVACSystemPerformance.Request.init))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public enum MoldRisk: Equatable, Sendable {
|
||||
case index
|
||||
case submit(Routes.MoldRisk.Request)
|
||||
|
||||
Reference in New Issue
Block a user