keiro-dsl-0.2.0.0: test/conformance-coldstart/Generated/Billing/Subscription/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.Billing.Subscription.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 SubscriptionId = SubscriptionId Text
deriving stock (Generic, Eq, Ord, Show)
subscriptionIdText :: SubscriptionId -> Text
subscriptionIdText (SubscriptionId t) = t
newtype CustomerId = CustomerId Text
deriving stock (Generic, Eq, Ord, Show)
customerIdText :: CustomerId -> Text
customerIdText (CustomerId t) = t
data Plan = Paid | Free
deriving stock (Generic, Eq, Ord, Show, Enum, Bounded)
planText :: Plan -> Text
planText = \case
Paid -> "paid"
Free -> "free"
data SubscriptionVertex = SubscriptionInactive | SubscriptionActive | SubscriptionClosed
deriving stock (Generic, Eq, Ord, Show, Enum, Bounded)
data ActivateSubscriptionData = ActivateSubscriptionData
{ subscriptionId :: !SubscriptionId
, customerId :: !CustomerId
, plan :: !Plan
}
deriving stock (Generic, Eq, Show)
data CancelSubscriptionData = CancelSubscriptionData
{ subscriptionId :: !SubscriptionId
, customerId :: !CustomerId
}
deriving stock (Generic, Eq, Show)
data SubscriptionCommand = ActivateSubscription !ActivateSubscriptionData
| CancelSubscription !CancelSubscriptionData
deriving stock (Generic, Eq, Show)
data SubscriptionActivatedData = SubscriptionActivatedData
{ subscriptionId :: !SubscriptionId
, customerId :: !CustomerId
, plan :: !Plan
}
deriving stock (Generic, Eq, Show)
data SubscriptionCancelledData = SubscriptionCancelledData
{ subscriptionId :: !SubscriptionId
, customerId :: !CustomerId
}
deriving stock (Generic, Eq, Show)
data SubscriptionEvent = SubscriptionActivated !SubscriptionActivatedData
| SubscriptionCancelled !SubscriptionCancelledData
deriving stock (Generic, Eq, Show)
type SubscriptionRegs =
'[ '("plan", Plan)
, '("subscriptionState", SubscriptionVertex)
]
initialSubscriptionRegs :: RegFile SubscriptionRegs
initialSubscriptionRegs =
RCons (Proxy @"plan") Free $
RCons (Proxy @"subscriptionState") SubscriptionInactive RNil
$(deriveAggregateCtorsAll ''SubscriptionCommand ''SubscriptionRegs)
$(deriveWireCtorsAll ''SubscriptionEvent)