85 lines
1.7 KiB
Swift
85 lines
1.7 KiB
Swift
import CasePaths
|
|
import Foundation
|
|
import PsychrometricClient
|
|
@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
|
|
case submit(Routes.MoldRisk.Request)
|
|
|
|
static let rootPath = "mold-risk"
|
|
|
|
public static let router = OneOf {
|
|
Route(.case(Self.index)) {
|
|
Path { rootPath }
|
|
Method.get
|
|
}
|
|
|
|
Route(.case(Self.submit)) {
|
|
Path { rootPath }
|
|
Method.post
|
|
Body {
|
|
FormData {
|
|
Field("temperature") {
|
|
Double.parser()
|
|
}
|
|
Field("humidity") {
|
|
Double.parser()
|
|
}
|
|
}
|
|
.map(.memberwise(Routes.MoldRisk.Request.init))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|