seat-arrangement-0.1.0.0
Safe HaskellNone
LanguageGHC2024

Aggregate.SeatArrangement

Synopsis

Documentation

data SeatArrangementLifecycle #

Constructors

Initialising

Initialise empty seat arrangement, typically when a flight is scheduled, accepts registering reservations

Registering

Register/unregister reservations

Proposing

Retrieving proposals

Confirming

Assignment proposals available, accepting confirmations

Boarding

All passengers are assigned a seat, prepare boarding

Operations related to Initialising phase

class CanRegister (sc :: Nat) (lc :: SeatArrangementLifecycle) where #

Register reservation to seat arrangement, applicable in Initialising and Registering phase

Operations related to Registering phase

class CanUnregister (sc :: Nat) (lc :: SeatArrangementLifecycle) where #

Unregisters reservation from seat arrangement, applicable in Registering phase

note that it can transitition to Initialising phase, when no reservations are present after unregister

Instances

Instances details
KnownNat sc => CanUnregister sc 'Registering # 
Instance details

Defined in Aggregate.SeatArrangement

propose :: forall (sc :: Nat). KnownNat sc => SeatArrangement sc 'Registering -> SeatArrangement sc 'Proposing #

Ends Registering phase, retrieving proposals

Operations related to Proposing phase

parseProposals :: forall (sc :: Nat). KnownNat sc => Proposals sc -> SeatArrangement sc 'Proposing -> Either ProposalProblem (SeatArrangement sc 'Confirming) #

Parses proposals to SeatArrangement, on success the lifecycle transitions to Confirming

Operations related to Confirming phase

proposalsForReservation :: forall (ps :: Nat) (sc :: Nat). KnownNat ps => ReservationId -> SeatArrangement sc 'Confirming -> Either ProposalsForReservationProblem (Proposals ps) #

Get available propoals for a specific reservation

confirm :: forall (ps :: Nat) (sc :: Nat). (KnownNat ps, KnownNat sc) => ReservationId -> Proposal ps -> SeatArrangement sc 'Confirming -> Either ConfirmProblem (SeatArrangement sc 'Confirming) #

Confirm seat assignments of a specific reservation

Operations related to Boarding phase

board :: forall (sc :: Nat). KnownNat sc => SeatArrangement sc 'Confirming -> Either BoardProblem (SeatArrangement sc 'Boarding) #

Prepare boarding

Precondition: all passengers needs to be assigned to a seat