packages feed

keiro-dsl-0.12.0.0: test/conformance-mapped-readmodel/Conformance/MappedReadModel/Bindings.hs

module Conformance.MappedReadModel.Bindings
  ( accountLookupBinding,
    accountLookupCases,
    accountProfileBinding,
    accountProfileCases,
    accountSummaryBinding,
    accountSummaryCases,
    tenantKeyBinding,
    tenantKeyCases,
    unusedFilterBinding,
    unusedFilterCases,
  )
where

import Conformance.MappedReadModel.Domain qualified as Domain
import Data.List.NonEmpty (NonEmpty (..))
import Generated.MappedReadmodel.Structural.Shape.AccountLookup qualified as LookupShape
import Generated.MappedReadmodel.Structural.Shape.AccountProfile qualified as ProfileShape
import Generated.MappedReadmodel.Structural.Shape.AccountSummary qualified as SummaryShape
import Generated.MappedReadmodel.Structural.Shape.TenantKey qualified as TenantShape
import Generated.MappedReadmodel.Structural.Shape.UnusedFilter qualified as FilterShape
import Keiro.Codec.Structural (FixtureCases (..), StructuralBinding (..))

tenantKeyBinding :: StructuralBinding Domain.TenantKey TenantShape.TenantKeyShape
tenantKeyBinding =
  StructuralBinding
    { bindingToShape = \(Domain.TenantKey tenantId) -> TenantShape.TenantKey tenantId,
      bindingFromShape = \(TenantShape.TenantKey tenantId) -> Domain.TenantKey tenantId
    }

accountLookupBinding :: StructuralBinding Domain.AccountLookup LookupShape.AccountLookupShape
accountLookupBinding =
  StructuralBinding
    { bindingToShape = \(Domain.AccountLookup accountId tenant) ->
        LookupShape.AccountLookup accountId (bindingToShape tenantKeyBinding tenant),
      bindingFromShape = \(LookupShape.AccountLookup accountId tenant) ->
        Domain.AccountLookup accountId (bindingFromShape tenantKeyBinding tenant)
    }

accountProfileBinding :: StructuralBinding Domain.AccountProfile ProfileShape.AccountProfileShape
accountProfileBinding =
  StructuralBinding
    { bindingToShape = \(Domain.AccountProfile displayName) -> ProfileShape.AccountProfile displayName,
      bindingFromShape = \(ProfileShape.AccountProfile displayName) -> Domain.AccountProfile displayName
    }

accountSummaryBinding :: StructuralBinding Domain.AccountSummary SummaryShape.AccountSummaryShape
accountSummaryBinding =
  StructuralBinding
    { bindingToShape = \(Domain.AccountSummary accountId tenant profile) ->
        SummaryShape.AccountSummary
          accountId
          (bindingToShape tenantKeyBinding tenant)
          (bindingToShape accountProfileBinding <$> profile),
      bindingFromShape = \(SummaryShape.AccountSummary accountId tenant profile) ->
        Domain.AccountSummary
          accountId
          (bindingFromShape tenantKeyBinding tenant)
          (bindingFromShape accountProfileBinding <$> profile)
    }

unusedFilterBinding :: StructuralBinding Domain.UnusedFilter FilterShape.UnusedFilterShape
unusedFilterBinding =
  StructuralBinding
    { bindingToShape = \(Domain.UnusedFilter prefix) -> FilterShape.UnusedFilter prefix,
      bindingFromShape = \(FilterShape.UnusedFilter prefix) -> Domain.UnusedFilter prefix
    }

tenantKeyCases :: FixtureCases Domain.TenantKey
tenantKeyCases = FixtureCases (("main", Domain.TenantKey "tenant-main") :| [])

accountLookupCases :: FixtureCases Domain.AccountLookup
accountLookupCases = FixtureCases (("known", Domain.fixtureAccountLookup) :| [])

accountProfileCases :: FixtureCases Domain.AccountProfile
accountProfileCases = FixtureCases (("named", Domain.AccountProfile "Ada") :| [])

accountSummaryCases :: FixtureCases Domain.AccountSummary
accountSummaryCases =
  FixtureCases
    ( ("without-profile", Domain.AccountSummary "account-6" (Domain.TenantKey "tenant-main") Nothing)
        :| [("with-profile", Domain.fixtureAccountSummary)]
    )

unusedFilterCases :: FixtureCases Domain.UnusedFilter
unusedFilterCases = FixtureCases (("unused", Domain.UnusedFilter "acct-") :| [])