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)
2025-10-13 15:46:22 +02:00
case (s: ContractState.Actif, _: ContractEvent.Terminated) => s.terminate()
2025-10-06 18:30:22 +02:00
case (s: ContractState.PendingSubscription, e: ContractEvent.Amended) => s.amend(e)
2025-10-13 15:46:22 +02:00
case (s: ContractState.PendingSubscription, _: ContractEvent.Approved) => s.approve()
case (s: ContractState.PendingSubscription, _: ContractEvent.Rejected) => s.reject()
case (s: ContractState.PendingSubscription, _: ContractEvent.Terminated) => s.terminate()
2025-10-06 18:30:22 +02:00
case (s: ContractState.PendingAmendment, e: ContractEvent.Amended) => s.amend(e)
2025-10-13 15:46:22 +02:00
case (s: ContractState.PendingAmendment, _: ContractEvent.Approved) => s.approve()
case (s: ContractState.PendingAmendment, _: ContractEvent.Rejected) => s.reject()
case (s: ContractState.PendingAmendment, _: ContractEvent.Terminated) => s.terminate()
2025-10-06 18:30:22 +02:00
object ContractReducer:
val layer: ULayer[Reducer[ContractEvent, ContractState]] = ZLayer.succeed(ContractReducer())