feat: Initial commit
This commit is contained in:
42
Sources/Routes/MoldRisk.swift
Normal file
42
Sources/Routes/MoldRisk.swift
Normal 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
|
||||
}
|
||||
}
|
||||
66
Sources/Routes/Routes.swift
Normal file
66
Sources/Routes/Routes.swift
Normal 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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user