packages feed

keiro-dsl-0.2.0.0: test/conformance-queue/Generated/HospitalCapacity/Reservation_work/Queue.hs

{-# LANGUAGE OverloadedRecordDot #-}
{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_GHC -Wno-unused-top-binds #-}

-- @generated by keiro-dsl; do not edit. Regenerated from the .keiro spec.
module Generated.HospitalCapacity.Reservation_work.Queue (
    ReservationWorkItem (..),
    encodeReservationWorkItem,
    parseReservationWorkItem,
    queuePhysical,
    queueDlq,
    queueTable,
    groupKeyField,
    groupKeyFor,
) where

import Data.Aeson (Value, object, withObject, (.:), (.=))
import Data.Aeson.Types (parseEither)
import Data.Text (Text)
import Data.Text qualified as T

queuePhysical, queueDlq, queueTable :: Text
queuePhysical = "hospital_capacity_reservation_work"
queueDlq = "hospital_capacity_reservation_work_dlq"
queueTable = "pgmq.q_hospital_capacity_reservation_work"

groupKeyField :: Text
groupKeyField = "reservationId"

groupKeyFor :: ReservationWorkItem -> Text
groupKeyFor payload = payload.reservationId

data ReservationWorkItem = ReservationWorkItem
    { reservationId :: !Text
    , hospitalId :: !Text
    , commandId :: !Text
    , lifeCriticalOverride :: !Bool
    }
    deriving stock (Eq, Show)

encodeReservationWorkItem :: ReservationWorkItem -> Value
encodeReservationWorkItem p =
    object
        [ "reservation_id" .= p.reservationId
        , "hospital_id" .= p.hospitalId
        , "command_id" .= p.commandId
        , "life_critical_override" .= p.lifeCriticalOverride
        ]

parseReservationWorkItem :: Value -> Either Text ReservationWorkItem
parseReservationWorkItem = mapLeftText . parseEither (withObject "ReservationWorkItem" go)
  where
    go o = ReservationWorkItem <$> o .: "reservation_id" <*> o .: "hospital_id" <*> o .: "command_id" <*> o .: "life_critical_override"

mapLeftText :: Either String b -> Either Text b
mapLeftText = either (Left . T.pack) Right