packages feed

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)