feat: Initial commit
This commit is contained in:
@@ -1,9 +1,69 @@
|
||||
import ApiController
|
||||
import Dependencies
|
||||
import Routes
|
||||
import Vapor
|
||||
import VaporElementary
|
||||
@preconcurrency import VaporRouting
|
||||
import ViewControllerLive
|
||||
|
||||
// configures your application
|
||||
public func configure(_ app: Application) async throws {
|
||||
// uncomment to serve files from /Public folder
|
||||
// app.middleware.use(FileMiddleware(publicDirectory: app.directory.publicDirectory))
|
||||
// register routes
|
||||
try routes(app)
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user