1 /*
2  *  Make.org Core API
3  *  Copyright (C) 2018 Make.org
4  *
5  * This program is free software: you can redistribute it and/or modify
6  *  it under the terms of the GNU Affero General Public License as
7  *  published by the Free Software Foundation, either version 3 of the
8  *  License, or (at your option) any later version.
9  *
10  *  This program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *  GNU Affero General Public License for more details.
14  *
15  *  You should have received a copy of the GNU Affero General Public License
16  *  along with this program.  If not, see <https://www.gnu.org/licenses/>.
17  *
18  */
19 
20 package org.make.api.sequence
21 
22 import akka.actor.typed.Scheduler
23 import akka.util.Timeout
24 import grizzled.slf4j.Logging
25 import org.make.api.sequence.SequenceConfigurationActor._
26 import org.make.api.technical.BetterLoggingActors._
27 import org.make.api.technical.{ActorSystemComponent, TimeSettings}
28 import org.make.core.question.QuestionId
29 import org.make.core.sequence.SequenceConfiguration
30 
31 import scala.concurrent.ExecutionContext.Implicits.global
32 import scala.concurrent.Future
33 
34 trait DefaultSequenceConfigurationComponent extends SequenceConfigurationComponent with Logging {
35   self: SequenceConfigurationActorComponent with PersistentSequenceConfigurationComponent with ActorSystemComponent =>
36 
37   override lazy val sequenceConfigurationService: SequenceConfigurationService = new DefaultSequenceConfigurationService
38 
39   class DefaultSequenceConfigurationService extends SequenceConfigurationService {
40     implicit val timeout: Timeout = TimeSettings.defaultTimeout
41     implicit val scheduler: Scheduler = actorSystem.scheduler
42 
43     override def getSequenceConfigurationByQuestionId(questionId: QuestionId): Future[SequenceConfiguration] = {
44       (sequenceConfigurationActor ?? (GetSequenceConfiguration(questionId, _)))
45         .map(_.sequenceConfiguration)
46     }
47 
48     override def setSequenceConfiguration(sequenceConfiguration: SequenceConfiguration): Future[Boolean] = {
49       persistentSequenceConfigurationService.persist(sequenceConfiguration)
50     }
51 
52     override def getPersistentSequenceConfigurationByQuestionId(
53       questionId: QuestionId
54     ): Future[Option[SequenceConfiguration]] = {
55       persistentSequenceConfigurationService.findOne(questionId)
56     }
57 
58     override def reloadConfigurations(): Unit = {
59       sequenceConfigurationActor ! ReloadSequenceConfiguration
60     }
61   }
62 }
Line Stmt Id Pos Tree Symbol Tests Code
40 24275 1685 - 1712 Select org.make.api.technical.TimeSettings.defaultTimeout org.make.api.technical.TimeSettings.defaultTimeout
41 28029 1753 - 1774 Select akka.actor.typed.ActorSystem.scheduler DefaultSequenceConfigurationComponent.this.actorSystem.scheduler
44 23836 1923 - 1923 Select org.make.api.sequence.DefaultSequenceConfigurationComponent.DefaultSequenceConfigurationService.timeout DefaultSequenceConfigurationService.this.timeout
44 25714 1896 - 1922 Select org.make.api.sequence.SequenceConfigurationActorComponent.sequenceConfigurationActor DefaultSequenceConfigurationComponent.this.sequenceConfigurationActor
44 23677 1927 - 1966 Apply org.make.api.sequence.SequenceConfigurationActor.GetSequenceConfiguration.apply org.make.api.sequence.SequenceConfigurationActor.GetSequenceConfiguration.apply(questionId, x$1)
44 26171 1923 - 1923 Select org.make.api.technical.ActorSystemComponent.actorSystem DefaultSequenceConfigurationComponent.this.actorSystem
44 27265 1923 - 1923 Select scala.concurrent.ExecutionContext.Implicits.global scala.concurrent.ExecutionContext.Implicits.global
45 25571 1981 - 1981 Select scala.concurrent.ExecutionContext.Implicits.global scala.concurrent.ExecutionContext.Implicits.global
45 27572 1982 - 2005 Select org.make.api.sequence.SequenceConfigurationActor.CachedSequenceConfiguration.sequenceConfiguration x$2.sequenceConfiguration
45 23144 1896 - 2006 ApplyToImplicitArgs scala.concurrent.Future.map org.make.api.technical.BetterLoggingActors.BetterLoggingTypedActorRef[org.make.api.sequence.SequenceConfigurationActor.SequenceConfigurationActorProtocol](DefaultSequenceConfigurationComponent.this.sequenceConfigurationActor).??[org.make.api.sequence.SequenceConfigurationActor.CachedSequenceConfiguration](((x$1: akka.actor.typed.ActorRef[org.make.api.sequence.SequenceConfigurationActor.CachedSequenceConfiguration]) => org.make.api.sequence.SequenceConfigurationActor.GetSequenceConfiguration.apply(questionId, x$1)))(scala.concurrent.ExecutionContext.Implicits.global, DefaultSequenceConfigurationComponent.this.actorSystem, DefaultSequenceConfigurationService.this.timeout).map[org.make.core.sequence.SequenceConfiguration](((x$2: org.make.api.sequence.SequenceConfigurationActor.CachedSequenceConfiguration) => x$2.sequenceConfiguration))(scala.concurrent.ExecutionContext.Implicits.global)
49 28042 2129 - 2198 Apply org.make.api.sequence.PersistentSequenceConfigurationService.persist DefaultSequenceConfigurationComponent.this.persistentSequenceConfigurationService.persist(sequenceConfiguration)
55 25723 2355 - 2413 Apply org.make.api.sequence.PersistentSequenceConfigurationService.findOne DefaultSequenceConfigurationComponent.this.persistentSequenceConfigurationService.findOne(questionId)
59 27277 2506 - 2533 Select org.make.api.sequence.SequenceConfigurationActor.ReloadSequenceConfiguration org.make.api.sequence.SequenceConfigurationActor.ReloadSequenceConfiguration
59 23443 2477 - 2503 Select org.make.api.sequence.SequenceConfigurationActorComponent.sequenceConfigurationActor DefaultSequenceConfigurationComponent.this.sequenceConfigurationActor
59 26099 2477 - 2533 Apply akka.actor.typed.ActorRef.ActorRefOps.! typed.this.ActorRef.ActorRefOps[org.make.api.sequence.SequenceConfigurationActor.SequenceConfigurationActorProtocol](DefaultSequenceConfigurationComponent.this.sequenceConfigurationActor).!(org.make.api.sequence.SequenceConfigurationActor.ReloadSequenceConfiguration)