packages feed

keiro-dsl-0.2.0.0: test/conformance/Generated/HospitalCapacity/Reservation/Domain.hs

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeApplications #-}
{-# OPTIONS_GHC -Wno-unused-top-binds #-}
-- @generated by keiro-dsl; do not edit. Regenerated from the .keiro spec.
module Generated.HospitalCapacity.Reservation.Domain where

import Data.Proxy (Proxy (..))
import Data.Text (Text)
import GHC.Generics (Generic)
import Keiki.Core (RegFile (..))
import Keiki.Generics.TH (deriveAggregateCtorsAll, deriveWireCtorsAll)

newtype TransferReservationId = TransferReservationId Text
  deriving stock (Generic, Eq, Ord, Show)

transferReservationIdText :: TransferReservationId -> Text
transferReservationIdText (TransferReservationId t) = t

newtype HospitalId = HospitalId Text
  deriving stock (Generic, Eq, Ord, Show)

hospitalIdText :: HospitalId -> Text
hospitalIdText (HospitalId t) = t

newtype CommandId = CommandId Text
  deriving stock (Generic, Eq, Ord, Show)

commandIdText :: CommandId -> Text
commandIdText (CommandId t) = t

data PatientAcuity = RedTag | YellowTag | GreenTag
  deriving stock (Generic, Eq, Ord, Show, Enum, Bounded)

patientAcuityText :: PatientAcuity -> Text
patientAcuityText = \case
  RedTag -> "red"
  YellowTag -> "yellow"
  GreenTag -> "green"

data BedType = Icu | MedicalSurgical
  deriving stock (Generic, Eq, Ord, Show, Enum, Bounded)

bedTypeText :: BedType -> Text
bedTypeText = \case
  Icu -> "icu"
  MedicalSurgical -> "medical-surgical"

data DivertStatus = Open | PartialDivert | TotalDivert
  deriving stock (Generic, Eq, Ord, Show, Enum, Bounded)

divertStatusText :: DivertStatus -> Text
divertStatusText = \case
  Open -> "open"
  PartialDivert -> "partial-divert"
  TotalDivert -> "total-divert"

data ReservationVertex = ReservationUnrequested | ReservationHeld | ReservationConfirmed | ReservationExpired | ReservationAdmitted | ReservationReleased
  deriving stock (Generic, Eq, Ord, Show, Enum, Bounded)

data RequestTransferReservationData = RequestTransferReservationData
  { reservationId :: !TransferReservationId
  , hospitalId :: !HospitalId
  , commandId :: !CommandId
  , patientAcuity :: !PatientAcuity
  , divertStatus :: !DivertStatus
  , lifeCriticalOverride :: !Bool
  }
  deriving stock (Generic, Eq, Show)

data ConfirmReservationData = ConfirmReservationData
  { reservationId :: !TransferReservationId
  , hospitalId :: !HospitalId
  , commandId :: !CommandId
  }
  deriving stock (Generic, Eq, Show)

data ReservationCommand = RequestTransferReservation !RequestTransferReservationData
  | ConfirmReservation !ConfirmReservationData
  deriving stock (Generic, Eq, Show)

data TransferReservationCreatedData = TransferReservationCreatedData
  { reservationId :: !TransferReservationId
  , hospitalId :: !HospitalId
  , commandId :: !CommandId
  , patientAcuity :: !PatientAcuity
  , divertStatus :: !DivertStatus
  , lifeCriticalOverride :: !Bool
  }
  deriving stock (Generic, Eq, Show)

data TransferReservationConfirmedData = TransferReservationConfirmedData
  { reservationId :: !TransferReservationId
  , hospitalId :: !HospitalId
  , commandId :: !CommandId
  }
  deriving stock (Generic, Eq, Show)

data ReservationEvent = TransferReservationCreated !TransferReservationCreatedData
  | TransferReservationConfirmed !TransferReservationConfirmedData
  deriving stock (Generic, Eq, Show)

type ReservationRegs =
  '[ '("reservationId", TransferReservationId)
   , '("hospitalId", HospitalId)
   , '("patientAcuity", PatientAcuity)
   , '("reservationState", ReservationVertex)
   ]

initialReservationRegs :: RegFile ReservationRegs
initialReservationRegs =
  RCons (Proxy @"reservationId") (TransferReservationId "") $
  RCons (Proxy @"hospitalId") (HospitalId "") $
  RCons (Proxy @"patientAcuity") GreenTag $
  RCons (Proxy @"reservationState") ReservationUnrequested RNil

$(deriveAggregateCtorsAll ''ReservationCommand ''ReservationRegs)



$(deriveWireCtorsAll ''ReservationEvent)