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() } }) } }