feat: Working on dehumidifier sizing, api and routes implemented, views are not complete.
This commit is contained in:
44
Sources/Routes/DehumidifierSizing.swift
Normal file
44
Sources/Routes/DehumidifierSizing.swift
Normal file
@@ -0,0 +1,44 @@
|
||||
import Foundation
|
||||
|
||||
public enum DehumidifierSize {
|
||||
|
||||
/// Represents the request for determining dehumidifier size based on
|
||||
/// latent load and indoor conditions.
|
||||
public struct Request: Codable, Equatable, Sendable {
|
||||
|
||||
public let latentLoad: Double
|
||||
public let temperature: Double
|
||||
public let humidity: Double
|
||||
|
||||
public init(latentLoad: Double, temperature: Double, humidity: Double) {
|
||||
self.latentLoad = latentLoad
|
||||
self.temperature = temperature
|
||||
self.humidity = humidity
|
||||
}
|
||||
}
|
||||
|
||||
/// Represents the response for determining dehumidifier size based on
|
||||
/// latent load and indoor conditions.
|
||||
public struct Response: Codable, Equatable, Sendable {
|
||||
|
||||
public let requiredCapacity: Double
|
||||
public let pintsPerDay: Double
|
||||
public let recommendedSize: Int
|
||||
public let recommendedUrl: String?
|
||||
public let warnings: [String]
|
||||
|
||||
public init(
|
||||
requiredCapacity: Double,
|
||||
pintsPerDay: Double,
|
||||
recommendedSize: Int,
|
||||
recommendedUrl: String? = nil,
|
||||
warnings: [String] = []
|
||||
) {
|
||||
self.requiredCapacity = requiredCapacity
|
||||
self.pintsPerDay = pintsPerDay
|
||||
self.recommendedSize = recommendedSize
|
||||
self.recommendedUrl = recommendedUrl
|
||||
self.warnings = warnings
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -22,11 +22,18 @@ public enum SiteRoute: Equatable, Sendable {
|
||||
public extension SiteRoute {
|
||||
|
||||
enum Api: Equatable, Sendable {
|
||||
|
||||
case calculateDehumidifierSize(DehumidifierSize.Request)
|
||||
case calculateMoldRisk(MoldRisk.Request)
|
||||
|
||||
static let rootPath = Path { "api"; "v1" }
|
||||
|
||||
public static let router = OneOf {
|
||||
Route(.case(Self.calculateDehumidifierSize)) {
|
||||
Path { "api"; "v1"; "calculateDehumidifierSize" }
|
||||
Method.post
|
||||
Body(.json(DehumidifierSize.Request.self))
|
||||
}
|
||||
Route(.case(Self.calculateMoldRisk)) {
|
||||
Path { "api"; "v1"; "calculateMoldRisk" }
|
||||
Method.post
|
||||
@@ -40,17 +47,47 @@ public extension SiteRoute {
|
||||
enum View: Equatable, Sendable {
|
||||
|
||||
case index
|
||||
case dehumidifierSize(DehumidifierSize)
|
||||
case moldRisk(MoldRisk)
|
||||
|
||||
public static let router = OneOf {
|
||||
Route(.case(Self.index)) {
|
||||
Method.get
|
||||
}
|
||||
Route(.case(Self.dehumidifierSize)) {
|
||||
DehumidifierSize.router
|
||||
}
|
||||
Route(.case(Self.moldRisk)) {
|
||||
MoldRisk.router
|
||||
}
|
||||
}
|
||||
|
||||
public enum DehumidifierSize: Equatable, Sendable {
|
||||
case index
|
||||
case submit(Routes.DehumidifierSize.Request)
|
||||
|
||||
static let rootPath = "dehumidifier-size"
|
||||
|
||||
public static let router = OneOf {
|
||||
Route(.case(Self.index)) {
|
||||
Path { rootPath }
|
||||
Method.get
|
||||
}
|
||||
Route(.case(Self.submit)) {
|
||||
Path { rootPath }
|
||||
Method.post
|
||||
Body {
|
||||
FormData {
|
||||
Field("latentLoad") { Double.parser() }
|
||||
Field("temperature") { Double.parser() }
|
||||
Field("humidity") { Double.parser() }
|
||||
}
|
||||
.map(.memberwise(Routes.DehumidifierSize.Request.init))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public enum MoldRisk: Equatable, Sendable {
|
||||
case index
|
||||
case submit(Routes.MoldRisk.Request)
|
||||
|
||||
Reference in New Issue
Block a user