27 lines
1.2 KiB
Scala
27 lines
1.2 KiB
Scala
|
|
package lu.foyer
|
||
|
|
package contracts
|
||
|
|
|
||
|
|
import zio.*
|
||
|
|
|
||
|
|
class ContractReducer() extends Reducer[ContractEvent, ContractState]:
|
||
|
|
|
||
|
|
override val fromEmpty =
|
||
|
|
case e: ContractEvent.Subscribed => ContractState.subscribe(e)
|
||
|
|
|
||
|
|
override val fromState =
|
||
|
|
case (s: ContractState.Actif, e: ContractEvent.Amended) => s.amend(e)
|
||
|
|
case (s: ContractState.Actif, e: ContractEvent.Terminated) => s.terminate(e)
|
||
|
|
|
||
|
|
case (s: ContractState.PendingSubscription, e: ContractEvent.Amended) => s.amend(e)
|
||
|
|
case (s: ContractState.PendingSubscription, e: ContractEvent.Approved) => s.approve(e)
|
||
|
|
case (s: ContractState.PendingSubscription, e: ContractEvent.Rejected) => s.reject(e)
|
||
|
|
case (s: ContractState.PendingSubscription, e: ContractEvent.Terminated) => s.terminate(e)
|
||
|
|
|
||
|
|
case (s: ContractState.PendingAmendment, e: ContractEvent.Amended) => s.amend(e)
|
||
|
|
case (s: ContractState.PendingAmendment, e: ContractEvent.Approved) => s.approve(e)
|
||
|
|
case (s: ContractState.PendingAmendment, e: ContractEvent.Rejected) => s.reject(e)
|
||
|
|
case (s: ContractState.PendingAmendment, e: ContractEvent.Terminated) => s.terminate(e)
|
||
|
|
|
||
|
|
object ContractReducer:
|
||
|
|
val layer: ULayer[Reducer[ContractEvent, ContractState]] = ZLayer.succeed(ContractReducer())
|