Skip to content

Routes Plugin ​

To add your own routes you have to implement the trait dev.mongocamp.server.plugin.RoutesPlugin.

Routes are implemented with Tapir Endpoints and activated by Reflection.

Sample ​

scala
package dev.mongocamp.sample.plugin

import com.typesafe.scalalogging.LazyLogging
import dev.mongocamp.server.exception.ErrorDescription
import dev.mongocamp.server.model.auth.UserInformation
import dev.mongocamp.server.plugin.RoutesPlugin
import sttp.capabilities
import sttp.capabilities.akka.AkkaStreams
import sttp.model.{ Method, StatusCode }
import sttp.tapir.server.ServerEndpoint
import sttp.tapir.stringBody

import scala.concurrent.Future

class SampleRoutes extends RoutesPlugin with LazyLogging {

  override def endpoints: List[ServerEndpoint[AkkaStreams with capabilities.WebSockets, Future]] =
    List(adminTestEndpoint, securedTestEndpoint, unsecuredTestEndpoint)

  lazy val adminTestEndpoint = adminEndpoint
    .in("plugin")
    .in("admin")
    .out(stringBody)
    .tag("Sample Plugin")
    .method(Method.GET)
    .serverLogic(user => parameter => adminOutput(user))

  def adminOutput(userProfile: UserInformation): Future[Either[(StatusCode, ErrorDescription, ErrorDescription), String]] = {
    Future.successful {
      Right {
        s"Hello ${userProfile.userId} you are admin"
      }
    }
  }

  lazy val securedTestEndpoint = securedEndpoint
    .in("plugin")
    .in("secured")
    .out(stringBody)
    .tag("Sample Plugin")
    .method(Method.GET)
    .serverLogic(user => parameter => securedOutput(user))

  def securedOutput(userProfile: UserInformation): Future[Either[(StatusCode, ErrorDescription, ErrorDescription), String]] = {
    Future.successful {
      Right {
        s"Hello ${userProfile.userId} you are secured"
      }
    }
  }

  val unsecuredTestEndpoint = baseEndpoint
    .in("plugin")
    .in("unsecured")
    .out(stringBody)
    .method(Method.GET)
    .tag("Sample Plugin")
    .serverLogic(_ => unsecureRoute())

  def unsecureRoute(): Future[Either[(StatusCode, ErrorDescription, ErrorDescription), String]] = {
    Future.successful(Right("unsecure route"))
  }

}

Released under the Apache License 2.0.