Implement contracts

This commit is contained in:
Paul-Henri Froidmont 2025-10-06 18:30:22 +02:00
parent 31014d1a0c
commit efdc50eb1d
Signed by: phfroidmont
GPG key ID: BE948AFD7E7873BE
33 changed files with 879 additions and 173 deletions

View file

@ -0,0 +1,26 @@
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())