Skip to content

Instantly share code, notes, and snippets.

@brecert
Last active September 12, 2022 14:03
Show Gist options
  • Save brecert/f2194b5b8e672014919c83885cf90eef to your computer and use it in GitHub Desktop.
Save brecert/f2194b5b8e672014919c83885cf90eef to your computer and use it in GitHub Desktop.
struct TweetRoute: Route {
@EnviromentObject var db: Database
@Path var user: User
@Path var tweet: Tweet
var pattern: Pattern {
.GET
"user"
User.ID
"status"
Tweet.ID
}
var handler = { request in
html {
body { ... }
}
}
}
struct PublishTweet: Route {
@EnviromentObject var db: Database
@EnviromentObject var events: Events
@State var user: User? // get user if logged in, state support implemented elsewhere
@Body var data: Tweet.Data
var pattern: Pattern { "/tweets/create" }
var handler = { request in
try await publishTweet(tweet: data)
return .success
}
private func publishTweet(tweet: Tweet.Data) async throws {
try await db.store(tweet)
events.publish(tweet)
}
}
struct Server: HTTP.Server {
var routes: Routing {
root {
TweetRoute()
PublishTweet()
}
.enviromentObject(database)
.enviromentObject(events)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment