58 lines
1.8 KiB
Swift
58 lines
1.8 KiB
Swift
import Dependencies
|
|
import DependenciesMacros
|
|
import Logging
|
|
import PsychrometricClient
|
|
import Routes
|
|
|
|
public extension DependencyValues {
|
|
var apiController: ApiController {
|
|
get { self[ApiController.self] }
|
|
set { self[ApiController.self] = newValue }
|
|
}
|
|
}
|
|
|
|
@DependencyClient
|
|
public struct ApiController: Sendable {
|
|
public var json: @Sendable (SiteRoute.Api, Logger) async throws -> (any Encodable)?
|
|
}
|
|
|
|
extension ApiController: TestDependencyKey {
|
|
public static let testValue: ApiController = Self()
|
|
}
|
|
|
|
extension ApiController: DependencyKey {
|
|
public static var liveValue: ApiController {
|
|
@Dependency(\.psychrometricClient) var psychrometricClient
|
|
|
|
return .init(json: { route, logger in
|
|
logger.debug("API Route: \(route)")
|
|
|
|
switch route {
|
|
case let .calculateAtticVentilation(request):
|
|
logger.debug("Calculating attic ventilation: \(request)")
|
|
return try await request.respond(logger: logger)
|
|
|
|
case let .calculateCapacitor(request):
|
|
logger.debug("Calculating capacitor: \(request)")
|
|
return try await request.respond(logger: logger)
|
|
|
|
case let .calculateDehumidifierSize(request):
|
|
logger.debug("Calculating dehumidifier size: \(request)")
|
|
return try await request.respond(logger)
|
|
|
|
case let .calculateHVACSystemPerformance(request):
|
|
logger.debug("Calculating hvac system performance: \(request)")
|
|
return try await request.respond(logger: logger)
|
|
|
|
case let .calculateMoldRisk(request):
|
|
logger.debug("Calculating mold risk: \(request)")
|
|
return try await psychrometricClient.respond(request, logger)
|
|
|
|
case let .calculateRoomPressure(request):
|
|
logger.debug("Calculating room pressure: \(request)")
|
|
return try await request.respond(logger: logger)
|
|
}
|
|
})
|
|
}
|
|
}
|