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.proposal
21 
22 import akka.actor.typed.{ActorRef, ActorSystem}
23 import akka.actor.typed.receptionist.ServiceKey
24 import akka.cluster.sharding.typed.scaladsl.{ClusterSharding, Entity, EntityTypeKey}
25 import org.make.api.sessionhistory.SessionHistoryCoordinatorService
26 import org.make.api.technical.ShardingNoEnvelopeMessageExtractor
27 import org.make.core.technical.IdGenerator
28 
29 import scala.concurrent.duration.FiniteDuration
30 
31 object ProposalCoordinator {
32 
33   val name: String = "proposal-coordinator"
34 
35   val TypeKey: EntityTypeKey[ProposalCommand] =
36     EntityTypeKey[ProposalCommand]("proposal")
37 
38   val Key: ServiceKey[ProposalCommand] = ServiceKey(name)
39 
40   def apply(
41     system: ActorSystem[_],
42     sessionHistoryCoordinatorService: SessionHistoryCoordinatorService,
43     lockDuration: FiniteDuration,
44     idGenerator: IdGenerator
45   ): ActorRef[ProposalCommand] = {
46     ClusterSharding(system).init(
47       Entity(TypeKey)(_ => ProposalActor(sessionHistoryCoordinatorService, lockDuration, idGenerator))
48         .withMessageExtractor(ShardingNoEnvelopeMessageExtractor[ProposalCommand](numberOfShards = 128))
49     )
50   }
51 }
Line Stmt Id Pos Tree Symbol Tests Code
33 13183 1234 - 1256 Literal <nosymbol> org.make.api.proposal.proposalactortest "proposal-coordinator"
36 9886 1341 - 1351 Literal <nosymbol> org.make.api.proposal.proposalactortest "proposal"
36 16004 1310 - 1352 ApplyToImplicitArgs akka.cluster.sharding.typed.scaladsl.EntityTypeKey.apply org.make.api.proposal.proposalactortest akka.cluster.sharding.typed.scaladsl.EntityTypeKey.apply[org.make.api.proposal.ProposalCommand]("proposal")((ClassTag.apply[org.make.api.proposal.ProposalCommand](classOf[org.make.api.proposal.ProposalCommand]): scala.reflect.ClassTag[org.make.api.proposal.ProposalCommand]))
38 10656 1395 - 1411 ApplyToImplicitArgs akka.actor.typed.receptionist.ServiceKey.apply org.make.api.proposal.proposalactortest akka.actor.typed.receptionist.ServiceKey.apply[org.make.api.proposal.ProposalCommand](ProposalCoordinator.this.name)((ClassTag.apply[org.make.api.proposal.ProposalCommand](classOf[org.make.api.proposal.ProposalCommand]): scala.reflect.ClassTag[org.make.api.proposal.ProposalCommand]))
38 12181 1406 - 1410 Select org.make.api.proposal.ProposalCoordinator.name org.make.api.proposal.proposalactortest ProposalCoordinator.this.name
46 13658 1628 - 1871 Apply akka.cluster.sharding.typed.scaladsl.ClusterSharding.init org.make.api.proposal.proposalactortest akka.cluster.sharding.typed.scaladsl.ClusterSharding.apply(system).init[org.make.api.proposal.ProposalCommand, org.make.api.proposal.ProposalCommand](akka.cluster.sharding.typed.scaladsl.Entity.apply[org.make.api.proposal.ProposalCommand](ProposalCoordinator.this.TypeKey)(((x$1: akka.cluster.sharding.typed.scaladsl.EntityContext[org.make.api.proposal.ProposalCommand]) => ProposalActor.apply(sessionHistoryCoordinatorService, lockDuration, idGenerator))).withMessageExtractor[org.make.api.proposal.ProposalCommand](org.make.api.technical.ShardingNoEnvelopeMessageExtractor.apply[org.make.api.proposal.ProposalCommand](128)))
47 16157 1671 - 1678 Select org.make.api.proposal.ProposalCoordinator.TypeKey org.make.api.proposal.proposalactortest ProposalCoordinator.this.TypeKey
47 12892 1685 - 1759 Apply org.make.api.proposal.ProposalActor.apply ProposalActor.apply(sessionHistoryCoordinatorService, lockDuration, idGenerator)
48 16834 1664 - 1865 Apply akka.cluster.sharding.typed.scaladsl.Entity.withMessageExtractor org.make.api.proposal.proposalactortest akka.cluster.sharding.typed.scaladsl.Entity.apply[org.make.api.proposal.ProposalCommand](ProposalCoordinator.this.TypeKey)(((x$1: akka.cluster.sharding.typed.scaladsl.EntityContext[org.make.api.proposal.ProposalCommand]) => ProposalActor.apply(sessionHistoryCoordinatorService, lockDuration, idGenerator))).withMessageExtractor[org.make.api.proposal.ProposalCommand](org.make.api.technical.ShardingNoEnvelopeMessageExtractor.apply[org.make.api.proposal.ProposalCommand](128))
48 9438 1791 - 1864 Apply org.make.api.technical.ShardingNoEnvelopeMessageExtractor.apply org.make.api.proposal.proposalactortest org.make.api.technical.ShardingNoEnvelopeMessageExtractor.apply[org.make.api.proposal.ProposalCommand](128)