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())
|