Files
swift-hvac-toolbox/Sources/App/configure.swift
2025-02-26 22:13:38 -05:00

70 lines
1.9 KiB
Swift

import ApiController
import Dependencies
import Routes
import Vapor
import VaporElementary
@preconcurrency import VaporRouting
import ViewController
// configures your application
public func configure(_ app: Application) async throws {
addMiddleware(to: app)
#if DEBUG
// Live reload of the application for development when launched with the `./swift-dev` command
app.lifecycle.use(BrowserSyncHandler())
#endif
// register routes
addRoutes(to: app)
}
private func addMiddleware(to app: Application) {
// cors middleware should come before default error middleware using `at: .beginning`
let corsConfiguration = CORSMiddleware.Configuration(
allowedOrigin: .all,
allowedMethods: [.GET, .POST, .PUT, .OPTIONS, .DELETE, .PATCH],
allowedHeaders: [.accept, .authorization, .contentType, .origin,
.xRequestedWith, .userAgent, .accessControlAllowOrigin]
)
let cors = CORSMiddleware(configuration: corsConfiguration)
app.middleware.use(cors, at: .beginning)
app.middleware.use(FileMiddleware(publicDirectory: app.directory.publicDirectory))
// app.middleware.use(app.sessions.middleware)
app.middleware.use(DependenciesMiddleware())
}
private func addRoutes(to app: Application) {
app.mount(
SiteRoute.router,
middleware: { _ in
nil
// if app.environment == .testing {
// return nil
// } else {
// return $0.middleware()
// }
},
use: siteHandler
)
}
@Sendable
private func siteHandler(
request: Request,
route: SiteRoute
) async throws -> any AsyncResponseEncodable {
@Dependency(\.apiController) var apiController
@Dependency(\.viewController) var viewController
switch route {
case let .api(route):
return try await apiController.respond(route, request: request)
case .health:
return HTTPStatus.ok
case let .view(route):
return try await viewController.respond(route: route, request: request)
}
}