Skip to content

Commit 6b29e44

Browse files
committed
major refactoring of endpoints api - add trait for swagger api
1 parent 1c097a7 commit 6b29e44

File tree

6 files changed

+40
-45
lines changed

6 files changed

+40
-45
lines changed

build.sbt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ ThisBuild / organization := "app.softnetwork"
3030

3131
name := "generic-persistence-api"
3232

33-
ThisBuild / version := "0.3.3"
33+
ThisBuild / version := "0.3.4"
3434

3535
ThisBuild / scalaVersion := "2.12.11"
3636

server/src/main/scala/app/softnetwork/api/server/ApiEndpoint.scala

Lines changed: 2 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,24 @@
11
package app.softnetwork.api.server
22

33
import akka.http.scaladsl.server.Route
4-
import app.softnetwork.api.server.config.ServerSettings
54
import app.softnetwork.serialization.commonFormats
65
import org.json4s.Formats
76
import sttp.capabilities.WebSockets
87
import sttp.capabilities.akka.AkkaStreams
98
import sttp.tapir.server.ServerEndpoint
109
import sttp.tapir.server.akkahttp.AkkaHttpServerInterpreter
11-
import sttp.tapir.swagger.bundle.SwaggerInterpreter
12-
import sttp.tapir._
13-
import sttp.tapir.swagger.SwaggerUIOptions
1410

1511
import scala.concurrent.{ExecutionContext, Future}
1612
import scala.language.implicitConversions
1713

18-
trait ApiEndpoint {
14+
trait ApiEndpoint extends SwaggerApiEndpoint {
1915

2016
import ApiEndpoint._
2117

2218
def endpoints: List[ServerEndpoint[AkkaStreams with WebSockets, Future]]
2319

2420
def swaggerEndpoints: List[ServerEndpoint[AkkaStreams with WebSockets, Future]] =
25-
endpointsToSwaggerEndpoints(endpoints, swaggerUIOptions)
21+
endpointsToSwaggerEndpoints(endpoints)
2622

2723
def swaggerRoute(implicit ec: ExecutionContext): Route = swaggerEndpoints
2824

@@ -34,24 +30,6 @@ trait ApiEndpoint {
3430

3531
object ApiEndpoint {
3632

37-
val applicationName: String = ServerSettings.ApplicationName
38-
39-
val applicationVersion: String = ServerSettings.ApplicationVersion
40-
41-
val swaggerUIOptions: SwaggerUIOptions =
42-
SwaggerUIOptions.default
43-
.pathPrefix(config.ServerSettings.SwaggerPathPrefix)
44-
45-
def endpointsToSwaggerEndpoints(
46-
endpoints: List[ServerEndpoint[AkkaStreams with WebSockets, Future]],
47-
swaggerUIOptions: SwaggerUIOptions
48-
): List[ServerEndpoint[AkkaStreams with WebSockets, Future]] =
49-
SwaggerInterpreter(swaggerUIOptions = swaggerUIOptions).fromEndpoints[Future](
50-
endpoints.map(_.endpoint.prependIn(config.ServerSettings.RootPath)),
51-
applicationName,
52-
applicationVersion
53-
)
54-
5533
implicit def endpointsToRoute(
5634
endpoints: List[ServerEndpoint[AkkaStreams with WebSockets, Future]]
5735
)(implicit

server/src/main/scala/app/softnetwork/api/server/ApiEndpoints.scala

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,16 @@ package app.softnetwork.api.server
22

33
import akka.actor.typed.ActorSystem
44
import akka.http.scaladsl.server.Route
5-
import sttp.capabilities.WebSockets
6-
import sttp.capabilities.akka.AkkaStreams
7-
import sttp.tapir.server.ServerEndpoint
85

9-
import scala.concurrent.{ExecutionContext, Future}
6+
import scala.concurrent.ExecutionContext
107

118
trait ApiEndpoints extends ApiRoutes {
129

13-
import ApiEndpoint._
14-
15-
def endpoints: ActorSystem[_] => List[ServerEndpoint[AkkaStreams with WebSockets, Future]]
10+
def endpoints: ActorSystem[_] => List[ApiEndpoint]
1611

1712
override def apiRoutes(system: ActorSystem[_]): Route = {
1813
implicit def ec: ExecutionContext = system.executionContext
19-
val eps = endpoints(system)
20-
eps ++ endpointsToSwaggerEndpoints(eps, swaggerUIOptions)
14+
concat(endpoints(system).map(api => api.apiRoute ~ api.swaggerRoute): _*)
2115
}
2216

2317
}

server/src/main/scala/app/softnetwork/api/server/ServiceEndpoints.scala

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,13 @@ import app.softnetwork.persistence.service.Service
66
import app.softnetwork.persistence.typed.scaladsl.EntityPattern
77
import sttp.tapir.generic.auto.SchemaDerivation
88
import sttp.tapir.Tapir
9-
import sttp.tapir.json.json4s.TapirJson4s
109

1110
import scala.language.implicitConversions
1211

1312
trait ServiceEndpoints[C <: Command, R <: CommandResult]
1413
extends ApiEndpoint
1514
with Tapir
1615
with SchemaDerivation
17-
with TapirJson4s
1816
with Service[C, R]
1917
with Completion { _: EntityPattern[C, R] =>
2018

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package app.softnetwork.api.server
2+
3+
import app.softnetwork.api.server.config.ServerSettings
4+
import sttp.capabilities.WebSockets
5+
import sttp.capabilities.akka.AkkaStreams
6+
import sttp.tapir.server.ServerEndpoint
7+
import sttp.tapir.swagger.SwaggerUIOptions
8+
import sttp.tapir.swagger.bundle.SwaggerInterpreter
9+
10+
import scala.concurrent.Future
11+
12+
trait SwaggerApiEndpoint {
13+
14+
val applicationName: String = ServerSettings.ApplicationName
15+
16+
val applicationVersion: String = ServerSettings.ApplicationVersion
17+
18+
val swaggerPathPrefix: List[String] = config.ServerSettings.SwaggerPathPrefix
19+
20+
val swaggerUIOptions: SwaggerUIOptions = SwaggerUIOptions.default.pathPrefix(swaggerPathPrefix)
21+
22+
def endpointsToSwaggerEndpoints(
23+
endpoints: List[ServerEndpoint[AkkaStreams with WebSockets, Future]]
24+
): List[ServerEndpoint[AkkaStreams with WebSockets, Future]] =
25+
SwaggerInterpreter(swaggerUIOptions = swaggerUIOptions).fromEndpoints[Future](
26+
endpoints.map(_.endpoint.prependIn(config.ServerSettings.RootPath)),
27+
applicationName,
28+
applicationVersion
29+
)
30+
31+
}

session/testkit/src/main/scala/app/softnetwork/session/scalatest/SessionEndpointsRoutes.scala

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,19 @@
11
package app.softnetwork.session.scalatest
22

33
import akka.actor.typed.ActorSystem
4-
import app.softnetwork.api.server.ApiEndpoints
4+
import app.softnetwork.api.server.{ApiEndpoint, ApiEndpoints}
55
import app.softnetwork.session.service.SessionEndpoints
66
import com.softwaremill.session.CsrfCheck
77
import org.scalatest.Suite
8-
import sttp.capabilities
9-
import sttp.capabilities.akka.AkkaStreams
10-
import sttp.tapir.server.ServerEndpoint
11-
12-
import scala.concurrent.Future
138

149
trait SessionEndpointsRoutes extends ApiEndpoints { _: CsrfCheck =>
1510
def sessionEndpoints: ActorSystem[_] => SessionEndpoints
1611

1712
def sessionServiceEndpoints: ActorSystem[_] => SessionEndpointsRoute = system =>
1813
SessionEndpointsRoute(system, sessionEndpoints(system))
1914

20-
override def endpoints
21-
: ActorSystem[_] => List[ServerEndpoint[AkkaStreams with capabilities.WebSockets, Future]] =
22-
system => sessionServiceEndpoints(system).endpoints
15+
override def endpoints: ActorSystem[_] => List[ApiEndpoint] = system =>
16+
List(sessionServiceEndpoints(system))
2317

2418
}
2519

0 commit comments

Comments
 (0)