packages feed

amazonka-evidently-2.0: gen/Amazonka/Evidently/BatchEvaluateFeature.hs

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

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

-- |
-- Module      : Amazonka.Evidently.BatchEvaluateFeature
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- This operation assigns feature variation to user sessions. For each user
-- session, you pass in an @entityID@ that represents the user. Evidently
-- then checks the evaluation rules and assigns the variation.
--
-- The first rules that are evaluated are the override rules. If the
-- user\'s @entityID@ matches an override rule, the user is served the
-- variation specified by that rule.
--
-- Next, if there is a launch of the feature, the user might be assigned to
-- a variation in the launch. The chance of this depends on the percentage
-- of users that are allocated to that launch. If the user is enrolled in
-- the launch, the variation they are served depends on the allocation of
-- the various feature variations used for the launch.
--
-- If the user is not assigned to a launch, and there is an ongoing
-- experiment for this feature, the user might be assigned to a variation
-- in the experiment. The chance of this depends on the percentage of users
-- that are allocated to that experiment. If the user is enrolled in the
-- experiment, the variation they are served depends on the allocation of
-- the various feature variations used for the experiment.
--
-- If the user is not assigned to a launch or experiment, they are served
-- the default variation.
module Amazonka.Evidently.BatchEvaluateFeature
  ( -- * Creating a Request
    BatchEvaluateFeature (..),
    newBatchEvaluateFeature,

    -- * Request Lenses
    batchEvaluateFeature_project,
    batchEvaluateFeature_requests,

    -- * Destructuring the Response
    BatchEvaluateFeatureResponse (..),
    newBatchEvaluateFeatureResponse,

    -- * Response Lenses
    batchEvaluateFeatureResponse_results,
    batchEvaluateFeatureResponse_httpStatus,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.Evidently.Types
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newBatchEvaluateFeature' smart constructor.
data BatchEvaluateFeature = BatchEvaluateFeature'
  { -- | The name or ARN of the project that contains the feature being
    -- evaluated.
    project :: Prelude.Text,
    -- | An array of structures, where each structure assigns a feature variation
    -- to one user session.
    requests :: Prelude.NonEmpty EvaluationRequest
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'BatchEvaluateFeature' 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:
--
-- 'project', 'batchEvaluateFeature_project' - The name or ARN of the project that contains the feature being
-- evaluated.
--
-- 'requests', 'batchEvaluateFeature_requests' - An array of structures, where each structure assigns a feature variation
-- to one user session.
newBatchEvaluateFeature ::
  -- | 'project'
  Prelude.Text ->
  -- | 'requests'
  Prelude.NonEmpty EvaluationRequest ->
  BatchEvaluateFeature
newBatchEvaluateFeature pProject_ pRequests_ =
  BatchEvaluateFeature'
    { project = pProject_,
      requests = Lens.coerced Lens.# pRequests_
    }

-- | The name or ARN of the project that contains the feature being
-- evaluated.
batchEvaluateFeature_project :: Lens.Lens' BatchEvaluateFeature Prelude.Text
batchEvaluateFeature_project = Lens.lens (\BatchEvaluateFeature' {project} -> project) (\s@BatchEvaluateFeature' {} a -> s {project = a} :: BatchEvaluateFeature)

-- | An array of structures, where each structure assigns a feature variation
-- to one user session.
batchEvaluateFeature_requests :: Lens.Lens' BatchEvaluateFeature (Prelude.NonEmpty EvaluationRequest)
batchEvaluateFeature_requests = Lens.lens (\BatchEvaluateFeature' {requests} -> requests) (\s@BatchEvaluateFeature' {} a -> s {requests = a} :: BatchEvaluateFeature) Prelude.. Lens.coerced

instance Core.AWSRequest BatchEvaluateFeature where
  type
    AWSResponse BatchEvaluateFeature =
      BatchEvaluateFeatureResponse
  request overrides =
    Request.postJSON (overrides defaultService)
  response =
    Response.receiveJSON
      ( \s h x ->
          BatchEvaluateFeatureResponse'
            Prelude.<$> (x Data..?> "results" Core..!@ Prelude.mempty)
            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
      )

instance Prelude.Hashable BatchEvaluateFeature where
  hashWithSalt _salt BatchEvaluateFeature' {..} =
    _salt
      `Prelude.hashWithSalt` project
      `Prelude.hashWithSalt` requests

instance Prelude.NFData BatchEvaluateFeature where
  rnf BatchEvaluateFeature' {..} =
    Prelude.rnf project
      `Prelude.seq` Prelude.rnf requests

instance Data.ToHeaders BatchEvaluateFeature where
  toHeaders =
    Prelude.const
      ( Prelude.mconcat
          [ "Content-Type"
              Data.=# ( "application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON BatchEvaluateFeature where
  toJSON BatchEvaluateFeature' {..} =
    Data.object
      ( Prelude.catMaybes
          [Prelude.Just ("requests" Data..= requests)]
      )

instance Data.ToPath BatchEvaluateFeature where
  toPath BatchEvaluateFeature' {..} =
    Prelude.mconcat
      ["/projects/", Data.toBS project, "/evaluations"]

instance Data.ToQuery BatchEvaluateFeature where
  toQuery = Prelude.const Prelude.mempty

-- | /See:/ 'newBatchEvaluateFeatureResponse' smart constructor.
data BatchEvaluateFeatureResponse = BatchEvaluateFeatureResponse'
  { -- | An array of structures, where each structure displays the results of one
    -- feature evaluation assignment to one user session.
    results :: Prelude.Maybe [EvaluationResult],
    -- | The response's http status code.
    httpStatus :: Prelude.Int
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'BatchEvaluateFeatureResponse' 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:
--
-- 'results', 'batchEvaluateFeatureResponse_results' - An array of structures, where each structure displays the results of one
-- feature evaluation assignment to one user session.
--
-- 'httpStatus', 'batchEvaluateFeatureResponse_httpStatus' - The response's http status code.
newBatchEvaluateFeatureResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  BatchEvaluateFeatureResponse
newBatchEvaluateFeatureResponse pHttpStatus_ =
  BatchEvaluateFeatureResponse'
    { results =
        Prelude.Nothing,
      httpStatus = pHttpStatus_
    }

-- | An array of structures, where each structure displays the results of one
-- feature evaluation assignment to one user session.
batchEvaluateFeatureResponse_results :: Lens.Lens' BatchEvaluateFeatureResponse (Prelude.Maybe [EvaluationResult])
batchEvaluateFeatureResponse_results = Lens.lens (\BatchEvaluateFeatureResponse' {results} -> results) (\s@BatchEvaluateFeatureResponse' {} a -> s {results = a} :: BatchEvaluateFeatureResponse) Prelude.. Lens.mapping Lens.coerced

-- | The response's http status code.
batchEvaluateFeatureResponse_httpStatus :: Lens.Lens' BatchEvaluateFeatureResponse Prelude.Int
batchEvaluateFeatureResponse_httpStatus = Lens.lens (\BatchEvaluateFeatureResponse' {httpStatus} -> httpStatus) (\s@BatchEvaluateFeatureResponse' {} a -> s {httpStatus = a} :: BatchEvaluateFeatureResponse)

instance Prelude.NFData BatchEvaluateFeatureResponse where
  rnf BatchEvaluateFeatureResponse' {..} =
    Prelude.rnf results
      `Prelude.seq` Prelude.rnf httpStatus