packages feed

amazonka-personalize-runtime-2.0: gen/Amazonka/PersonalizeRuntime/Types/Promotion.hs

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.PersonalizeRuntime.Types.Promotion
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.PersonalizeRuntime.Types.Promotion where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude

-- | Contains information on a promotion. A promotion defines additional
-- business rules that apply to a configurable subset of recommended items.
--
-- /See:/ 'newPromotion' smart constructor.
data Promotion = Promotion'
  { -- | The Amazon Resource Name (ARN) of the filter used by the promotion. This
    -- filter defines the criteria for promoted items. For more information,
    -- see
    -- <https://docs.aws.amazon.com/personalize/latest/dg/promoting-items.html#promotion-filters Promotion filters>.
    filterArn :: Prelude.Maybe Prelude.Text,
    -- | The values to use when promoting items. For each placeholder parameter
    -- in your promotion\'s filter expression, provide the parameter name (in
    -- matching case) as a key and the filter value(s) as the corresponding
    -- value. Separate multiple values for one parameter with a comma.
    --
    -- For filter expressions that use an @INCLUDE@ element to include items,
    -- you must provide values for all parameters that are defined in the
    -- expression. For filters with expressions that use an @EXCLUDE@ element
    -- to exclude items, you can omit the @filter-values@. In this case, Amazon
    -- Personalize doesn\'t use that portion of the expression to filter
    -- recommendations.
    --
    -- For more information on creating filters, see
    -- <https://docs.aws.amazon.com/personalize/latest/dg/filter.html Filtering recommendations and user segments>.
    filterValues :: Prelude.Maybe (Prelude.HashMap Prelude.Text (Data.Sensitive Prelude.Text)),
    -- | The name of the promotion.
    name :: Prelude.Maybe Prelude.Text,
    -- | The percentage of recommended items to apply the promotion to.
    percentPromotedItems :: Prelude.Maybe Prelude.Natural
  }
  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'Promotion' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'filterArn', 'promotion_filterArn' - The Amazon Resource Name (ARN) of the filter used by the promotion. This
-- filter defines the criteria for promoted items. For more information,
-- see
-- <https://docs.aws.amazon.com/personalize/latest/dg/promoting-items.html#promotion-filters Promotion filters>.
--
-- 'filterValues', 'promotion_filterValues' - The values to use when promoting items. For each placeholder parameter
-- in your promotion\'s filter expression, provide the parameter name (in
-- matching case) as a key and the filter value(s) as the corresponding
-- value. Separate multiple values for one parameter with a comma.
--
-- For filter expressions that use an @INCLUDE@ element to include items,
-- you must provide values for all parameters that are defined in the
-- expression. For filters with expressions that use an @EXCLUDE@ element
-- to exclude items, you can omit the @filter-values@. In this case, Amazon
-- Personalize doesn\'t use that portion of the expression to filter
-- recommendations.
--
-- For more information on creating filters, see
-- <https://docs.aws.amazon.com/personalize/latest/dg/filter.html Filtering recommendations and user segments>.
--
-- 'name', 'promotion_name' - The name of the promotion.
--
-- 'percentPromotedItems', 'promotion_percentPromotedItems' - The percentage of recommended items to apply the promotion to.
newPromotion ::
  Promotion
newPromotion =
  Promotion'
    { filterArn = Prelude.Nothing,
      filterValues = Prelude.Nothing,
      name = Prelude.Nothing,
      percentPromotedItems = Prelude.Nothing
    }

-- | The Amazon Resource Name (ARN) of the filter used by the promotion. This
-- filter defines the criteria for promoted items. For more information,
-- see
-- <https://docs.aws.amazon.com/personalize/latest/dg/promoting-items.html#promotion-filters Promotion filters>.
promotion_filterArn :: Lens.Lens' Promotion (Prelude.Maybe Prelude.Text)
promotion_filterArn = Lens.lens (\Promotion' {filterArn} -> filterArn) (\s@Promotion' {} a -> s {filterArn = a} :: Promotion)

-- | The values to use when promoting items. For each placeholder parameter
-- in your promotion\'s filter expression, provide the parameter name (in
-- matching case) as a key and the filter value(s) as the corresponding
-- value. Separate multiple values for one parameter with a comma.
--
-- For filter expressions that use an @INCLUDE@ element to include items,
-- you must provide values for all parameters that are defined in the
-- expression. For filters with expressions that use an @EXCLUDE@ element
-- to exclude items, you can omit the @filter-values@. In this case, Amazon
-- Personalize doesn\'t use that portion of the expression to filter
-- recommendations.
--
-- For more information on creating filters, see
-- <https://docs.aws.amazon.com/personalize/latest/dg/filter.html Filtering recommendations and user segments>.
promotion_filterValues :: Lens.Lens' Promotion (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
promotion_filterValues = Lens.lens (\Promotion' {filterValues} -> filterValues) (\s@Promotion' {} a -> s {filterValues = a} :: Promotion) Prelude.. Lens.mapping Lens.coerced

-- | The name of the promotion.
promotion_name :: Lens.Lens' Promotion (Prelude.Maybe Prelude.Text)
promotion_name = Lens.lens (\Promotion' {name} -> name) (\s@Promotion' {} a -> s {name = a} :: Promotion)

-- | The percentage of recommended items to apply the promotion to.
promotion_percentPromotedItems :: Lens.Lens' Promotion (Prelude.Maybe Prelude.Natural)
promotion_percentPromotedItems = Lens.lens (\Promotion' {percentPromotedItems} -> percentPromotedItems) (\s@Promotion' {} a -> s {percentPromotedItems = a} :: Promotion)

instance Prelude.Hashable Promotion where
  hashWithSalt _salt Promotion' {..} =
    _salt
      `Prelude.hashWithSalt` filterArn
      `Prelude.hashWithSalt` filterValues
      `Prelude.hashWithSalt` name
      `Prelude.hashWithSalt` percentPromotedItems

instance Prelude.NFData Promotion where
  rnf Promotion' {..} =
    Prelude.rnf filterArn
      `Prelude.seq` Prelude.rnf filterValues
      `Prelude.seq` Prelude.rnf name
      `Prelude.seq` Prelude.rnf percentPromotedItems

instance Data.ToJSON Promotion where
  toJSON Promotion' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("filterArn" Data..=) Prelude.<$> filterArn,
            ("filterValues" Data..=) Prelude.<$> filterValues,
            ("name" Data..=) Prelude.<$> name,
            ("percentPromotedItems" Data..=)
              Prelude.<$> percentPromotedItems
          ]
      )