Files
swift-hvac-toolbox/Sources/ApiController/ApiController.swift

51 lines
1.4 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 .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)")
// FIX:
fatalError()
}
})
}
}