feat: Begins room pressure calculations

This commit is contained in:
2025-02-28 22:45:59 -05:00
parent c1aa2a8ad1
commit af24ef3971
6 changed files with 132 additions and 6 deletions

View File

@@ -119,7 +119,7 @@ public enum RoomPressure {
case ten = 10
case twelve = 12
case fourteen = 14
case twenty = 20
// case twenty = 20
public var label: String { "\(rawValue)\"" }
}

View File

@@ -26,6 +26,7 @@ public extension SiteRoute {
case calculateDehumidifierSize(DehumidifierSize.Request)
case calculateHVACSystemPerformance(HVACSystemPerformance.Request)
case calculateMoldRisk(MoldRisk.Request)
case calculateRoomPressure(RoomPressure.Request)
static let rootPath = Path { "api"; "v1" }
@@ -45,6 +46,16 @@ public extension SiteRoute {
Method.post
Body(.json(MoldRisk.Request.self))
}
Route(.case(Self.calculateRoomPressure)) {
Path { "api"; "v1"; "calculateRoomPressure" }
Method.post
OneOf {
Body(.json(RoomPressure.Request.KnownAirflow.self))
.map(.case(RoomPressure.Request.knownAirflow))
Body(.json(RoomPressure.Request.MeasuredPressure.self))
.map(.case(RoomPressure.Request.measuredPressure))
}
}
}
}
}
@@ -164,6 +175,7 @@ public extension SiteRoute {
public enum RoomPressure: Equatable, Sendable {
case index(mode: Routes.RoomPressure.Mode? = nil)
case submit(Routes.RoomPressure.Request)
public static var index: Self { .index() }
@@ -177,6 +189,38 @@ public extension SiteRoute {
Optionally { Field("form") { Routes.RoomPressure.Mode.parser() } }
}
}
Route(.case(Self.submit)) {
Path { rootPath }
Method.post
Body {
OneOf {
FormData {
Field("targetRoomPressure") { Double.parser() }
Field("doorWidth") { Double.parser() }
Field("doorHeight") { Double.parser() }
Field("doorUndercut") { Double.parser() }
Field("supplyAirflow") { Double.parser() }
Field("preferredGrilleHeight") {
Routes.RoomPressure.CommonReturnGrilleHeight.parser()
}
}
.map(.memberwise(Routes.RoomPressure.Request.KnownAirflow.init))
.map(.case(Routes.RoomPressure.Request.knownAirflow))
FormData {
Field("measuredRoomPressure") { Double.parser() }
Field("doorWidth") { Double.parser() }
Field("doorHeight") { Double.parser() }
Field("doorUndercut") { Double.parser() }
Field("preferredGrilleHeight") {
Routes.RoomPressure.CommonReturnGrilleHeight.parser()
}
}
.map(.memberwise(Routes.RoomPressure.Request.MeasuredPressure.init))
.map(.case(Routes.RoomPressure.Request.measuredPressure))
}
}
}
}
}
}