feat: Initial filter pressure drop views, calculations need implemented.

This commit is contained in:
2025-03-02 21:51:52 -05:00
parent a8022ec80a
commit 67488e06a9
17 changed files with 610 additions and 97 deletions

View File

@@ -13,6 +13,10 @@ public enum SiteRoute: Equatable, Sendable {
Route(.case(Self.api)) {
Api.router
}
Route(.case(Self.health)) {
Path { "health" }
Method.get
}
Route(.case(Self.view)) {
View.router
}
@@ -26,6 +30,7 @@ public extension SiteRoute {
case calculateAtticVentilation(AtticVentilation.Request)
case calculateCapacitor(Capacitor.Request)
case calculateDehumidifierSize(DehumidifierSize.Request)
case calculateFilterPressureDrop(FilterPressureDrop.Request)
case calculateHVACSystemPerformance(HVACSystemPerformance.Request)
case calculateMoldRisk(MoldRisk.Request)
case calculateRoomPressure(RoomPressure.Request)
@@ -53,6 +58,16 @@ public extension SiteRoute {
Method.post
Body(.json(DehumidifierSize.Request.self))
}
Route(.case(Self.calculateFilterPressureDrop)) {
Path { "api"; "v1"; "calculateFilterPressureDrop" }
Method.post
OneOf {
Body(.json(FilterPressureDrop.Request.Basic.self))
.map(.case(FilterPressureDrop.Request.basic))
Body(.json(FilterPressureDrop.Request.FanLaw.self))
.map(.case(FilterPressureDrop.Request.fanLaw))
}
}
Route(.case(Self.calculateHVACSystemPerformance)) {
Path { "api"; "v1"; "calculateHVACSystemPerformance" }
Method.post
@@ -84,6 +99,7 @@ public extension SiteRoute {
case atticVentilation(AtticVentilation)
case capacitor(Capacitor)
case dehumidifierSize(DehumidifierSize)
case filterPressureDrop(FilterPressureDrop)
case hvacSystemPerformance(HVACSystemPerformance)
case moldRisk(MoldRisk)
case roomPressure(RoomPressure)
@@ -101,6 +117,9 @@ public extension SiteRoute {
Route(.case(Self.dehumidifierSize)) {
DehumidifierSize.router
}
Route(.case(Self.filterPressureDrop)) {
FilterPressureDrop.router
}
Route(.case(Self.hvacSystemPerformance)) {
HVACSystemPerformance.router
}
@@ -213,6 +232,53 @@ public extension SiteRoute {
}
}
public enum FilterPressureDrop: Equatable, Sendable {
case index(mode: Routes.FilterPressureDrop.Mode? = nil)
case submit(Routes.FilterPressureDrop.Request)
public static let index = Self.index()
static let rootPath = "filter-pressure-drop"
public static let router = OneOf {
Route(.case(Self.index)) {
Path { rootPath }
Method.get
Query {
Optionally { Field("mode") { Routes.FilterPressureDrop.Mode.parser() } }
}
}
Route(.case(Self.submit)) {
Path { rootPath }
Method.post
Body {
OneOf {
FormData {
Field("systemSize") { Double.parser() }
Field("climateZone") { ClimateZone.parser() }
Field("filterType") { Routes.FilterPressureDrop.FilterType.parser() }
Field("filterWidth") { Double.parser() }
Field("filterHeight") { Double.parser() }
}
.map(.memberwise(Routes.FilterPressureDrop.Request.Basic.init))
.map(.case(Routes.FilterPressureDrop.Request.basic))
FormData {
Field("filterWidth") { Double.parser() }
Field("filterHeight") { Double.parser() }
Field("filterDepth") { Double.parser() }
Field("ratedAirflow") { Double.parser() }
Field("ratedPressureDrop") { Double.parser() }
Field("designAirflow") { Double.parser() }
}
.map(.memberwise(Routes.FilterPressureDrop.Request.FanLaw.init))
.map(.case(Routes.FilterPressureDrop.Request.fanLaw))
}
}
}
}
}
public enum HVACSystemPerformance: Equatable, Sendable {
case index
case submit(Routes.HVACSystemPerformance.Request)