Skip to content

Commit b3ab9e7

Browse files
committed
add SessionData type
1 parent 49292fd commit b3ab9e7

File tree

13 files changed

+172
-122
lines changed

13 files changed

+172
-122
lines changed

api/src/main/scala/app/softnetwork/scheduler/api/SchedulerApi.scala

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ import app.softnetwork.scheduler.handlers.SchedulerHandler
88
import app.softnetwork.scheduler.launch.SchedulerApplication
99
import app.softnetwork.scheduler.persistence.query.Entity2SchedulerProcessorStream
1010
import app.softnetwork.session.config.Settings
11-
import app.softnetwork.session.model.{SessionDataCompanion, SessionManagers}
12-
import com.softwaremill.session.{SessionConfig, SessionManager}
1311
import com.typesafe.config.Config
1412
import org.softnetwork.session.model.Session
1513

@@ -36,10 +34,4 @@ trait SchedulerApi extends SchedulerApplication { _: SchemaProvider =>
3634
override protected def sessionType: Session.SessionType =
3735
Settings.Session.SessionContinuityAndTransport
3836

39-
override protected def manager(implicit
40-
sessionConfig: SessionConfig,
41-
companion: SessionDataCompanion[Session]
42-
): SessionManager[Session] =
43-
SessionManagers.basic
44-
4537
}
Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,39 @@
11
package app.softnetwork.scheduler.api
22

33
import akka.actor.typed.ActorSystem
4-
import app.softnetwork.api.server.Endpoint
4+
import app.softnetwork.api.server.{Endpoint, SwaggerApiEndpoint}
55
import app.softnetwork.persistence.schema.SchemaProvider
66
import app.softnetwork.scheduler.launch.SchedulerEndpoints
7+
import app.softnetwork.scheduler.service.SchedulerServiceEndpoints
78
import app.softnetwork.session.CsrfCheck
9+
import app.softnetwork.session.config.Settings
10+
import app.softnetwork.session.handlers.SessionRefreshTokenDao
11+
import app.softnetwork.session.model.SessionDataCompanion
12+
import app.softnetwork.session.service.BasicSessionMaterials
13+
import com.softwaremill.session.RefreshTokenStorage
14+
import org.slf4j.{Logger, LoggerFactory}
15+
import org.softnetwork.session.model.Session
816

9-
trait SchedulerEndpointsApi extends SchedulerApi with SchedulerEndpoints {
10-
_: SchemaProvider with CsrfCheck =>
17+
import scala.concurrent.ExecutionContext
18+
19+
trait SchedulerEndpointsApi extends SchedulerApi with SchedulerEndpoints[Session] {
20+
self: SchemaProvider with CsrfCheck =>
21+
22+
override def schedulerEndpoints: ActorSystem[_] => SchedulerServiceEndpoints[Session] = sys =>
23+
new SchedulerServiceEndpoints[Session]
24+
with SwaggerApiEndpoint
25+
with BasicSessionMaterials[Session] {
26+
override implicit def system: ActorSystem[_] = sys
27+
override lazy val ec: ExecutionContext = sys.executionContext
28+
lazy val log: Logger = LoggerFactory getLogger getClass.getName
29+
override protected def sessionType: Session.SessionType =
30+
Settings.Session.SessionContinuityAndTransport
31+
override implicit def refreshTokenStorage: RefreshTokenStorage[Session] =
32+
SessionRefreshTokenDao(sys)
33+
override implicit def companion: SessionDataCompanion[Session] = Session
34+
override val applicationVersion: String = systemVersion()
35+
}
1136

1237
override def endpoints: ActorSystem[_] => List[Endpoint] =
13-
system => super.endpoints(system) :+ schedulerSwagger(system)
38+
system => super.endpoints(system)
1439
}
Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,50 @@
11
package app.softnetwork.scheduler.api
22

33
import akka.actor.typed.ActorSystem
4-
import app.softnetwork.api.server.ApiRoute
4+
import app.softnetwork.api.server.{ApiRoute, SwaggerEndpoint}
55
import app.softnetwork.persistence.schema.SchemaProvider
66
import app.softnetwork.scheduler.launch.SchedulerRoutes
7+
import app.softnetwork.scheduler.service.{SchedulerService, SchedulerServiceEndpoints}
8+
import app.softnetwork.session.config.Settings
9+
import app.softnetwork.session.handlers.SessionRefreshTokenDao
10+
import app.softnetwork.session.model.SessionDataCompanion
11+
import app.softnetwork.session.service.BasicSessionMaterials
12+
import com.softwaremill.session.RefreshTokenStorage
13+
import org.slf4j.{Logger, LoggerFactory}
14+
import org.softnetwork.session.model.Session
15+
16+
import scala.concurrent.ExecutionContext
17+
18+
trait SchedulerRoutesApi extends SchedulerApi with SchedulerRoutes[Session] { _: SchemaProvider =>
19+
20+
override def schedulerService: ActorSystem[_] => SchedulerService[Session] = sys =>
21+
new SchedulerService[Session] with BasicSessionMaterials[Session] {
22+
override implicit def system: ActorSystem[_] = sys
23+
override lazy val ec: ExecutionContext = sys.executionContext
24+
lazy val log: Logger = LoggerFactory getLogger getClass.getName
25+
override protected def sessionType: Session.SessionType =
26+
Settings.Session.SessionContinuityAndTransport
27+
override implicit def refreshTokenStorage: RefreshTokenStorage[Session] =
28+
SessionRefreshTokenDao(system)
29+
override implicit def companion: SessionDataCompanion[Session] = Session
30+
}
31+
32+
private def schedulerSwagger: ActorSystem[_] => SwaggerEndpoint =
33+
sys =>
34+
new SchedulerServiceEndpoints[Session]
35+
with SwaggerEndpoint
36+
with BasicSessionMaterials[Session] {
37+
override implicit def system: ActorSystem[_] = sys
38+
override lazy val ec: ExecutionContext = sys.executionContext
39+
lazy val log: Logger = LoggerFactory getLogger getClass.getName
40+
override protected def sessionType: Session.SessionType =
41+
Settings.Session.SessionContinuityAndTransport
42+
override implicit def refreshTokenStorage: RefreshTokenStorage[Session] =
43+
SessionRefreshTokenDao(sys)
44+
override implicit def companion: SessionDataCompanion[Session] = Session
45+
override val applicationVersion: String = systemVersion()
46+
}
747

8-
trait SchedulerRoutesApi extends SchedulerApi with SchedulerRoutes { _: SchemaProvider =>
948
override def apiRoutes: ActorSystem[_] => List[ApiRoute] =
1049
system => super.apiRoutes(system) :+ schedulerSwagger(system)
1150
}

build.sbt

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

33
name := "scheduler"
44

5-
ThisBuild / version := "0.6.0"
5+
ThisBuild / version := "0.6.1"
66

77
ThisBuild / scalaVersion := "2.12.15"
88

core/src/main/scala/app/softnetwork/scheduler/launch/SchedulerEndpoints.scala

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,12 @@ import akka.actor.typed.ActorSystem
44
import app.softnetwork.api.server.{ApiEndpoints, Endpoint}
55
import app.softnetwork.persistence.schema.SchemaProvider
66
import app.softnetwork.scheduler.service.SchedulerServiceEndpoints
7-
import app.softnetwork.session.handlers.SessionRefreshTokenDao
8-
import app.softnetwork.session.model.SessionDataCompanion
9-
import app.softnetwork.session.service.SessionMaterials
10-
import com.softwaremill.session.{RefreshTokenStorage, SessionConfig, SessionManager}
11-
import org.slf4j.{Logger, LoggerFactory}
12-
import org.softnetwork.session.model.Session
7+
import app.softnetwork.session.model.{SessionData, SessionDataDecorator}
138

14-
import scala.concurrent.ExecutionContext
9+
trait SchedulerEndpoints[SD <: SessionData with SessionDataDecorator[SD]] extends ApiEndpoints {
10+
self: SchedulerGuardian with SchemaProvider =>
1511

16-
trait SchedulerEndpoints extends ApiEndpoints { self: SchedulerGuardian with SchemaProvider =>
17-
18-
def schedulerEndpoints: ActorSystem[_] => SchedulerServiceEndpoints = sys =>
19-
new SchedulerServiceEndpoints with SessionMaterials[Session] {
20-
override implicit def system: ActorSystem[_] = sys
21-
override lazy val ec: ExecutionContext = sys.executionContext
22-
lazy val log: Logger = LoggerFactory getLogger getClass.getName
23-
override protected def sessionType: Session.SessionType = self.sessionType
24-
override implicit def manager(implicit
25-
sessionConfig: SessionConfig,
26-
companion: SessionDataCompanion[Session]
27-
): SessionManager[Session] = self.manager
28-
override implicit def refreshTokenStorage: RefreshTokenStorage[Session] =
29-
SessionRefreshTokenDao(system)
30-
}
12+
def schedulerEndpoints: ActorSystem[_] => SchedulerServiceEndpoints[SD]
3113

3214
override def endpoints: ActorSystem[_] => List[Endpoint] = system =>
3315
List(schedulerEndpoints(system))

core/src/main/scala/app/softnetwork/scheduler/launch/SchedulerGuardian.scala

Lines changed: 1 addition & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package app.softnetwork.scheduler.launch
22

33
import akka.actor.typed.ActorSystem
4-
import app.softnetwork.api.server.SwaggerEndpoint
54
import app.softnetwork.persistence.launch.PersistentEntity
65
import app.softnetwork.persistence.launch.PersistenceGuardian._
76
import app.softnetwork.persistence.query.EventProcessorStream
@@ -14,17 +13,10 @@ import app.softnetwork.scheduler.persistence.query.{
1413
Scheduler2EntityProcessorStream
1514
}
1615
import app.softnetwork.scheduler.persistence.typed.SchedulerBehavior
17-
import app.softnetwork.scheduler.service.SchedulerServiceEndpoints
1816
import app.softnetwork.session.CsrfCheckHeader
19-
import app.softnetwork.session.handlers.SessionRefreshTokenDao
2017
import app.softnetwork.session.launch.SessionGuardian
21-
import app.softnetwork.session.model.SessionDataCompanion
22-
import app.softnetwork.session.service.SessionMaterials
23-
import com.softwaremill.session.{RefreshTokenStorage, SessionConfig, SessionManager}
24-
import org.slf4j.{Logger, LoggerFactory}
25-
import org.softnetwork.session.model.Session
18+
import org.slf4j.Logger
2619

27-
import scala.concurrent.ExecutionContext
2820
import scala.util.{Failure, Success, Try}
2921

3022
trait SchedulerGuardian extends SessionGuardian with CsrfCheckHeader { self: SchemaProvider =>
@@ -72,23 +64,4 @@ trait SchedulerGuardian extends SessionGuardian with CsrfCheckHeader { self: Sch
7264
override def systemVersion(): String =
7365
sys.env.getOrElse("VERSION", SchedulerCoreBuildInfo.version)
7466

75-
protected def manager(implicit
76-
sessionConfig: SessionConfig,
77-
companion: SessionDataCompanion[Session]
78-
): SessionManager[Session]
79-
80-
def schedulerSwagger: ActorSystem[_] => SwaggerEndpoint = sys =>
81-
new SchedulerServiceEndpoints with SwaggerEndpoint with SessionMaterials[Session] {
82-
override implicit def system: ActorSystem[_] = sys
83-
override lazy val ec: ExecutionContext = sys.executionContext
84-
lazy val log: Logger = LoggerFactory getLogger getClass.getName
85-
override protected def sessionType: Session.SessionType = self.sessionType
86-
override implicit def manager(implicit
87-
sessionConfig: SessionConfig,
88-
companion: SessionDataCompanion[Session]
89-
): SessionManager[Session] = self.manager
90-
override implicit def refreshTokenStorage: RefreshTokenStorage[Session] =
91-
SessionRefreshTokenDao(system)
92-
override val applicationVersion: String = systemVersion()
93-
}
9467
}

core/src/main/scala/app/softnetwork/scheduler/launch/SchedulerRoutes.scala

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,12 @@ import akka.actor.typed.ActorSystem
44
import app.softnetwork.api.server.{ApiRoute, ApiRoutes}
55
import app.softnetwork.persistence.schema.SchemaProvider
66
import app.softnetwork.scheduler.service.SchedulerService
7-
import app.softnetwork.session.handlers.SessionRefreshTokenDao
8-
import app.softnetwork.session.model.SessionDataCompanion
9-
import app.softnetwork.session.service.SessionMaterials
10-
import com.softwaremill.session.{RefreshTokenStorage, SessionConfig, SessionManager}
11-
import org.slf4j.{Logger, LoggerFactory}
12-
import org.softnetwork.session.model.Session
7+
import app.softnetwork.session.model.{SessionData, SessionDataDecorator}
138

14-
import scala.concurrent.ExecutionContext
9+
trait SchedulerRoutes[SD <: SessionData with SessionDataDecorator[SD]] extends ApiRoutes {
10+
self: SchedulerGuardian with SchemaProvider =>
1511

16-
trait SchedulerRoutes extends ApiRoutes { self: SchedulerGuardian with SchemaProvider =>
17-
18-
def schedulerService: ActorSystem[_] => SchedulerService = sys =>
19-
new SchedulerService with SessionMaterials[Session] {
20-
override implicit def system: ActorSystem[_] = sys
21-
override lazy val ec: ExecutionContext = sys.executionContext
22-
lazy val log: Logger = LoggerFactory getLogger getClass.getName
23-
override protected def sessionType: Session.SessionType = self.sessionType
24-
override implicit def manager(implicit
25-
sessionConfig: SessionConfig,
26-
companion: SessionDataCompanion[Session]
27-
): SessionManager[Session] = self.manager
28-
override implicit def refreshTokenStorage: RefreshTokenStorage[Session] =
29-
SessionRefreshTokenDao(system)
30-
}
12+
def schedulerService: ActorSystem[_] => SchedulerService[SD]
3113

3214
override def apiRoutes: ActorSystem[_] => List[ApiRoute] =
3315
system =>

core/src/main/scala/app/softnetwork/scheduler/service/SchedulerService.scala

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import app.softnetwork.scheduler.message._
1010
import app.softnetwork.scheduler.model._
1111
import app.softnetwork.serialization._
1212
import app.softnetwork.session.config.Settings
13+
import app.softnetwork.session.model.{SessionData, SessionDataCompanion, SessionDataDecorator}
1314
import app.softnetwork.session.service.{ServiceWithSessionDirectives, SessionMaterials}
1415
import com.softwaremill.session.CsrfDirectives.hmacTokenCsrfProtection
1516
import com.softwaremill.session.CsrfOptions.checkHeader
@@ -18,19 +19,20 @@ import com.typesafe.scalalogging.StrictLogging
1819
import de.heikoseeberger.akkahttpjson4s.Json4sSupport
1920
import org.json4s.jackson.Serialization
2021
import org.json4s.{jackson, Formats}
21-
import org.softnetwork.session.model.Session
2222

23-
trait SchedulerService
23+
trait SchedulerService[SD <: SessionData with SessionDataDecorator[SD]]
2424
extends Directives
2525
with DefaultComplete
2626
with Json4sSupport
2727
with StrictLogging
28-
with ServiceWithSessionDirectives[SchedulerCommand, SchedulerCommandResult, Session]
28+
with ServiceWithSessionDirectives[SchedulerCommand, SchedulerCommandResult, SD]
2929
with SchedulerDao
30-
with SchedulerHandler { _: SessionMaterials[Session] =>
30+
with SchedulerHandler { _: SessionMaterials[SD] =>
3131

3232
implicit def sessionConfig: SessionConfig = Settings.Session.DefaultSessionConfig
3333

34+
implicit def companion: SessionDataCompanion[SD]
35+
3436
override implicit def ts: ActorSystem[_] = system
3537

3638
implicit def serialization: Serialization.type = jackson.Serialization

core/src/main/scala/app/softnetwork/scheduler/service/SchedulerServiceEndpoints.scala

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ import app.softnetwork.scheduler.handlers.{SchedulerDao, SchedulerHandler}
77
import app.softnetwork.scheduler.message.{SchedulerNotFound, _}
88
import app.softnetwork.scheduler.model._
99
import app.softnetwork.session.config.Settings
10+
import app.softnetwork.session.model.{SessionData, SessionDataCompanion, SessionDataDecorator}
1011
import app.softnetwork.session.service.{ServiceWithSessionEndpoints, SessionMaterials}
1112
import com.softwaremill.session.SessionConfig
12-
import org.softnetwork.session.model.Session
1313
import sttp.capabilities
1414
import sttp.capabilities.akka.AkkaStreams
1515
import sttp.model.Method
@@ -20,20 +20,22 @@ import sttp.tapir.server.{PartialServerEndpointWithSecurityOutput, ServerEndpoin
2020
import scala.concurrent.Future
2121
import scala.language.implicitConversions
2222

23-
trait SchedulerServiceEndpoints
24-
extends ServiceWithSessionEndpoints[SchedulerCommand, SchedulerCommandResult, Session]
23+
trait SchedulerServiceEndpoints[SD <: SessionData with SessionDataDecorator[SD]]
24+
extends ServiceWithSessionEndpoints[SchedulerCommand, SchedulerCommandResult, SD]
2525
with SchedulerDao
26-
with SchedulerHandler { _: SessionMaterials[Session] =>
26+
with SchedulerHandler { _: SessionMaterials[SD] =>
2727

2828
import app.softnetwork.serialization._
2929

3030
implicit def sessionConfig: SessionConfig = Settings.Session.DefaultSessionConfig
3131

32+
implicit def companion: SessionDataCompanion[SD]
33+
3234
override implicit def ts: ActorSystem[_] = system
3335

3436
def secureEndpoint: PartialServerEndpointWithSecurityOutput[
3537
(Seq[Option[String]], Option[String], Method, Option[String]),
36-
Session,
38+
SD,
3739
Unit,
3840
Any,
3941
(Seq[Option[String]], Option[CookieValueWithMeta]),
@@ -58,7 +60,7 @@ trait SchedulerServiceEndpoints
5860

5961
val rootSchedulesEndpoint: PartialServerEndpointWithSecurityOutput[
6062
(Seq[Option[String]], Option[String], Method, Option[String]),
61-
Session,
63+
SD,
6264
Unit,
6365
Any,
6466
(Seq[Option[String]], Option[CookieValueWithMeta]),
@@ -104,7 +106,7 @@ trait SchedulerServiceEndpoints
104106

105107
val rootCronTabsEndpoint: PartialServerEndpointWithSecurityOutput[
106108
(Seq[Option[String]], Option[String], Method, Option[String]),
107-
Session,
109+
SD,
108110
Unit,
109111
Any,
110112
(Seq[Option[String]], Option[CookieValueWithMeta]),

testkit/src/main/scala/app/softnetwork/scheduler/scalatest/SchedulerEndpointsTestKit.scala

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,46 @@ import akka.actor.typed.ActorSystem
44
import app.softnetwork.api.server.Endpoint
55
import app.softnetwork.persistence.schema.SchemaProvider
66
import app.softnetwork.scheduler.launch.SchedulerEndpoints
7+
import app.softnetwork.scheduler.service.SchedulerServiceEndpoints
78
import app.softnetwork.session.CsrfCheck
9+
import app.softnetwork.session.model.{SessionData, SessionDataCompanion, SessionDataDecorator}
810
import app.softnetwork.session.scalatest.{SessionEndpointsRoutes, SessionTestKit}
911
import app.softnetwork.session.service.SessionMaterials
12+
import com.softwaremill.session.{RefreshTokenStorage, SessionConfig, SessionManager}
13+
import org.slf4j.{Logger, LoggerFactory}
1014
import org.softnetwork.session.model.Session
1115

12-
trait SchedulerEndpointsTestKit extends SchedulerEndpoints with SessionEndpointsRoutes[Session] {
13-
_: SessionTestKit[Session]
16+
import scala.concurrent.ExecutionContext
17+
18+
trait SchedulerEndpointsTestKit[SD <: SessionData with SessionDataDecorator[SD]]
19+
extends SchedulerEndpoints[SD]
20+
with SessionEndpointsRoutes[SD] {
21+
self: SessionTestKit[SD]
1422
with SchedulerTestKit
1523
with SchemaProvider
16-
with SessionMaterials[Session]
24+
with SessionMaterials[SD]
1725
with CsrfCheck =>
1826

27+
override def schedulerEndpoints: ActorSystem[_] => SchedulerServiceEndpoints[SD] = sys =>
28+
new SchedulerServiceEndpoints[SD] with SessionMaterials[SD] {
29+
override implicit def system: ActorSystem[_] = sys
30+
31+
override lazy val ec: ExecutionContext = sys.executionContext
32+
lazy val log: Logger = LoggerFactory getLogger getClass.getName
33+
34+
override protected def sessionType: Session.SessionType = self.sessionType
35+
36+
override implicit def manager(implicit
37+
sessionConfig: SessionConfig,
38+
companion: SessionDataCompanion[SD]
39+
): SessionManager[SD] = self.manager
40+
41+
override implicit def refreshTokenStorage: RefreshTokenStorage[SD] =
42+
self.refreshTokenStorage
43+
44+
override implicit def companion: SessionDataCompanion[SD] = self.companion
45+
}
46+
1947
override def endpoints: ActorSystem[_] => List[Endpoint] =
2048
system =>
2149
List(

0 commit comments

Comments
 (0)