feat: Initial commit

This commit is contained in:
2025-02-25 12:01:47 -05:00
parent 3c0c100e50
commit a289075e75
2557 changed files with 379222 additions and 47 deletions

View File

@@ -0,0 +1,42 @@
import Foundation
import PsychrometricClient
public enum MoldRisk {
public struct Request: Codable, Equatable, Sendable {
public let temperature: DryBulb
public let humidity: RelativeHumidity
public init(temperature: DryBulb, humidity: RelativeHumidity) {
self.temperature = temperature
self.humidity = humidity
}
}
public struct Response: Codable, Equatable, Sendable {
public let psychrometricProperties: PsychrometricProperties
public let riskLevel: RiskLevel
public let daysToMold: Int?
public let recommendations: [String]
public init(
psychrometricProperties: PsychrometricProperties,
riskLevel: MoldRisk.RiskLevel,
daysToMold: Int? = nil,
recommendations: [String]
) {
self.psychrometricProperties = psychrometricProperties
self.riskLevel = riskLevel
self.daysToMold = daysToMold
self.recommendations = recommendations
}
}
public enum RiskLevel: String, Codable, Equatable, Sendable {
case low
case moderate
case high
case severe
}
}

View File

@@ -0,0 +1,66 @@
import CasePaths
import Foundation
@preconcurrency import URLRouting
public enum SiteRoute: Equatable, Sendable {
case api(Api)
case health
case view(View)
public static let router = OneOf {
Route(.case(Self.api)) {
Api.router
}
Route(.case(Self.view)) {
View.router
}
}
}
public extension SiteRoute {
enum Api: Equatable, Sendable {
case calculateMoldRisk(MoldRisk.Request)
static let rootPath = Path { "api"; "v1" }
public static let router = OneOf {
Route(.case(Self.calculateMoldRisk)) {
Path { "api"; "v1"; "calculateMoldRisk" }
Method.post
Body(.json(MoldRisk.Request.self))
}
}
}
}
public extension SiteRoute {
enum View: Equatable, Sendable {
case index
case moldRisk(MoldRisk)
public static let router = OneOf {
Route(.case(Self.index)) {
Method.get
}
Route(.case(Self.moldRisk)) {
MoldRisk.router
}
}
public enum MoldRisk: Equatable, Sendable {
case index
static let rootPath = "mold-risk"
public static let router = OneOf {
Route(.case(Self.index)) {
Path { rootPath }
Method.get
}
}
}
}
}