diff options
author | Jakob Odersky <jakob@inpher.io> | 2019-10-09 17:10:43 -0400 |
---|---|---|
committer | Jakob Odersky <jakob@inpher.io> | 2019-10-09 20:33:16 -0400 |
commit | 0ceee5ed4bae240b8c8e94d2fd7424d9d0b67ec7 (patch) | |
tree | 2df0258f81050e6fed51d38e217c4f6256518e12 /server/src/main/scala/Routes.scala | |
parent | faed28c54900fc0b359700873367095f51425794 (diff) | |
download | scala-triad-0ceee5ed4bae240b8c8e94d2fd7424d9d0b67ec7.tar.gz scala-triad-0ceee5ed4bae240b8c8e94d2fd7424d9d0b67ec7.tar.bz2 scala-triad-0ceee5ed4bae240b8c8e94d2fd7424d9d0b67ec7.zip |
Migrate build to mill
Diffstat (limited to 'server/src/main/scala/Routes.scala')
-rw-r--r-- | server/src/main/scala/Routes.scala | 80 |
1 files changed, 0 insertions, 80 deletions
diff --git a/server/src/main/scala/Routes.scala b/server/src/main/scala/Routes.scala deleted file mode 100644 index d39fa18..0000000 --- a/server/src/main/scala/Routes.scala +++ /dev/null @@ -1,80 +0,0 @@ -package triad - -import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._ -import akka.http.scaladsl.marshalling.sse.EventStreamMarshalling._ -import akka.http.scaladsl.marshalling.{Marshaller, ToEntityMarshaller} -import akka.http.scaladsl.model.MediaTypes -import akka.http.scaladsl.model.sse.ServerSentEvent -import akka.http.scaladsl.server.Directives._ -import akka.stream.scaladsl.Source -import spray.json._ -import triad.ApiProtocol._ - -import scala.concurrent.duration._ - -class Routes(repository: Repository, liveMessages: LiveMessages) { - import repository.profile.api._ - - // allows using scalatags templates as HTTP responses - implicit val tagMarshaller: ToEntityMarshaller[scalatags.Text.Tag] = { - Marshaller.stringMarshaller(MediaTypes.`text/html`).compose { - (tag: scalatags.Text.Tag) => - tag.render - } - } - - private val lastMessages = repository.Messages.take(100).result - - private val messageStream: Source[Message, _] = { - val publisher = repository.database.stream(lastMessages) - Source - .fromPublisher(publisher) - .concat(liveMessages.feed) - } - - val messages = path("messages") { - get { - onSuccess(repository.database.run(lastMessages)) { messages => - complete(messages) - } - } ~ post { - entity(as[Message]) { message => - extractExecutionContext { implicit ec => - val query = repository.Messages.insertOrUpdate(message) - val action = repository.database.run(query).flatMap { _ => - liveMessages.push(message) - } - onSuccess(action) { _ => - complete(message) - } - } - } - } - } - - val ui = pathEndOrSingleSlash { - get { - parameter("js".as[Boolean] ? true) { js => - onSuccess(repository.database.run(lastMessages)) { messages => - complete(TextTemplates.page(messages, js)) - } - } - } - } - - val live = path("live") { - get { - val src = messageStream - .map(msg => ServerSentEvent(msg.toJson.compactPrint)) - .keepAlive(10.seconds, () => ServerSentEvent.heartbeat) - complete(src) - } - } - - val assets = pathPrefix("assets") { - getFromResourceDirectory("assets") - } - - def all = messages ~ ui ~ live ~ assets - -} |