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