foyer-dsi-assure-2035/core/src/lu/foyer/contracts/ContractReducer.scala

27 lines
1.2 KiB
Scala
Raw Normal View History

2025-10-06 18:30:22 +02:00
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())