{-# 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.Kendra.SubmitFeedback
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Enables you to provide feedback to Amazon Kendra to improve the
-- performance of your index.
--
-- @SubmitFeedback@ is currently not supported in the Amazon Web Services
-- GovCloud (US-West) region.
module Amazonka.Kendra.SubmitFeedback
  ( -- * Creating a Request
    SubmitFeedback (..),
    newSubmitFeedback,

    -- * Request Lenses
    submitFeedback_clickFeedbackItems,
    submitFeedback_relevanceFeedbackItems,
    submitFeedback_indexId,
    submitFeedback_queryId,

    -- * Destructuring the Response
    SubmitFeedbackResponse (..),
    newSubmitFeedbackResponse,
  )
where

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

-- | /See:/ 'newSubmitFeedback' smart constructor.
data SubmitFeedback = SubmitFeedback'
  { -- | Tells Amazon Kendra that a particular search result link was chosen by
    -- the user.
    SubmitFeedback -> Maybe [ClickFeedback]
clickFeedbackItems :: Prelude.Maybe [ClickFeedback],
    -- | Provides Amazon Kendra with relevant or not relevant feedback for
    -- whether a particular item was relevant to the search.
    SubmitFeedback -> Maybe [RelevanceFeedback]
relevanceFeedbackItems :: Prelude.Maybe [RelevanceFeedback],
    -- | The identifier of the index that was queried.
    SubmitFeedback -> Text
indexId :: Prelude.Text,
    -- | The identifier of the specific query for which you are submitting
    -- feedback. The query ID is returned in the response to the @Query@ API.
    SubmitFeedback -> Text
queryId :: Prelude.Text
  }
  deriving (SubmitFeedback -> SubmitFeedback -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SubmitFeedback -> SubmitFeedback -> Bool
$c/= :: SubmitFeedback -> SubmitFeedback -> Bool
== :: SubmitFeedback -> SubmitFeedback -> Bool
$c== :: SubmitFeedback -> SubmitFeedback -> Bool
Prelude.Eq, ReadPrec [SubmitFeedback]
ReadPrec SubmitFeedback
Int -> ReadS SubmitFeedback
ReadS [SubmitFeedback]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [SubmitFeedback]
$creadListPrec :: ReadPrec [SubmitFeedback]
readPrec :: ReadPrec SubmitFeedback
$creadPrec :: ReadPrec SubmitFeedback
readList :: ReadS [SubmitFeedback]
$creadList :: ReadS [SubmitFeedback]
readsPrec :: Int -> ReadS SubmitFeedback
$creadsPrec :: Int -> ReadS SubmitFeedback
Prelude.Read, Int -> SubmitFeedback -> ShowS
[SubmitFeedback] -> ShowS
SubmitFeedback -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SubmitFeedback] -> ShowS
$cshowList :: [SubmitFeedback] -> ShowS
show :: SubmitFeedback -> String
$cshow :: SubmitFeedback -> String
showsPrec :: Int -> SubmitFeedback -> ShowS
$cshowsPrec :: Int -> SubmitFeedback -> ShowS
Prelude.Show, forall x. Rep SubmitFeedback x -> SubmitFeedback
forall x. SubmitFeedback -> Rep SubmitFeedback x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep SubmitFeedback x -> SubmitFeedback
$cfrom :: forall x. SubmitFeedback -> Rep SubmitFeedback x
Prelude.Generic)

-- |
-- Create a value of 'SubmitFeedback' 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:
--
-- 'clickFeedbackItems', 'submitFeedback_clickFeedbackItems' - Tells Amazon Kendra that a particular search result link was chosen by
-- the user.
--
-- 'relevanceFeedbackItems', 'submitFeedback_relevanceFeedbackItems' - Provides Amazon Kendra with relevant or not relevant feedback for
-- whether a particular item was relevant to the search.
--
-- 'indexId', 'submitFeedback_indexId' - The identifier of the index that was queried.
--
-- 'queryId', 'submitFeedback_queryId' - The identifier of the specific query for which you are submitting
-- feedback. The query ID is returned in the response to the @Query@ API.
newSubmitFeedback ::
  -- | 'indexId'
  Prelude.Text ->
  -- | 'queryId'
  Prelude.Text ->
  SubmitFeedback
newSubmitFeedback :: Text -> Text -> SubmitFeedback
newSubmitFeedback Text
pIndexId_ Text
pQueryId_ =
  SubmitFeedback'
    { $sel:clickFeedbackItems:SubmitFeedback' :: Maybe [ClickFeedback]
clickFeedbackItems =
        forall a. Maybe a
Prelude.Nothing,
      $sel:relevanceFeedbackItems:SubmitFeedback' :: Maybe [RelevanceFeedback]
relevanceFeedbackItems = forall a. Maybe a
Prelude.Nothing,
      $sel:indexId:SubmitFeedback' :: Text
indexId = Text
pIndexId_,
      $sel:queryId:SubmitFeedback' :: Text
queryId = Text
pQueryId_
    }

-- | Tells Amazon Kendra that a particular search result link was chosen by
-- the user.
submitFeedback_clickFeedbackItems :: Lens.Lens' SubmitFeedback (Prelude.Maybe [ClickFeedback])
submitFeedback_clickFeedbackItems :: Lens' SubmitFeedback (Maybe [ClickFeedback])
submitFeedback_clickFeedbackItems = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SubmitFeedback' {Maybe [ClickFeedback]
clickFeedbackItems :: Maybe [ClickFeedback]
$sel:clickFeedbackItems:SubmitFeedback' :: SubmitFeedback -> Maybe [ClickFeedback]
clickFeedbackItems} -> Maybe [ClickFeedback]
clickFeedbackItems) (\s :: SubmitFeedback
s@SubmitFeedback' {} Maybe [ClickFeedback]
a -> SubmitFeedback
s {$sel:clickFeedbackItems:SubmitFeedback' :: Maybe [ClickFeedback]
clickFeedbackItems = Maybe [ClickFeedback]
a} :: SubmitFeedback) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Provides Amazon Kendra with relevant or not relevant feedback for
-- whether a particular item was relevant to the search.
submitFeedback_relevanceFeedbackItems :: Lens.Lens' SubmitFeedback (Prelude.Maybe [RelevanceFeedback])
submitFeedback_relevanceFeedbackItems :: Lens' SubmitFeedback (Maybe [RelevanceFeedback])
submitFeedback_relevanceFeedbackItems = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SubmitFeedback' {Maybe [RelevanceFeedback]
relevanceFeedbackItems :: Maybe [RelevanceFeedback]
$sel:relevanceFeedbackItems:SubmitFeedback' :: SubmitFeedback -> Maybe [RelevanceFeedback]
relevanceFeedbackItems} -> Maybe [RelevanceFeedback]
relevanceFeedbackItems) (\s :: SubmitFeedback
s@SubmitFeedback' {} Maybe [RelevanceFeedback]
a -> SubmitFeedback
s {$sel:relevanceFeedbackItems:SubmitFeedback' :: Maybe [RelevanceFeedback]
relevanceFeedbackItems = Maybe [RelevanceFeedback]
a} :: SubmitFeedback) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The identifier of the index that was queried.
submitFeedback_indexId :: Lens.Lens' SubmitFeedback Prelude.Text
submitFeedback_indexId :: Lens' SubmitFeedback Text
submitFeedback_indexId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SubmitFeedback' {Text
indexId :: Text
$sel:indexId:SubmitFeedback' :: SubmitFeedback -> Text
indexId} -> Text
indexId) (\s :: SubmitFeedback
s@SubmitFeedback' {} Text
a -> SubmitFeedback
s {$sel:indexId:SubmitFeedback' :: Text
indexId = Text
a} :: SubmitFeedback)

-- | The identifier of the specific query for which you are submitting
-- feedback. The query ID is returned in the response to the @Query@ API.
submitFeedback_queryId :: Lens.Lens' SubmitFeedback Prelude.Text
submitFeedback_queryId :: Lens' SubmitFeedback Text
submitFeedback_queryId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SubmitFeedback' {Text
queryId :: Text
$sel:queryId:SubmitFeedback' :: SubmitFeedback -> Text
queryId} -> Text
queryId) (\s :: SubmitFeedback
s@SubmitFeedback' {} Text
a -> SubmitFeedback
s {$sel:queryId:SubmitFeedback' :: Text
queryId = Text
a} :: SubmitFeedback)

instance Core.AWSRequest SubmitFeedback where
  type
    AWSResponse SubmitFeedback =
      SubmitFeedbackResponse
  request :: (Service -> Service) -> SubmitFeedback -> Request SubmitFeedback
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.postJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy SubmitFeedback
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse SubmitFeedback)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
AWSResponse a
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveNull SubmitFeedbackResponse
SubmitFeedbackResponse'

instance Prelude.Hashable SubmitFeedback where
  hashWithSalt :: Int -> SubmitFeedback -> Int
hashWithSalt Int
_salt SubmitFeedback' {Maybe [ClickFeedback]
Maybe [RelevanceFeedback]
Text
queryId :: Text
indexId :: Text
relevanceFeedbackItems :: Maybe [RelevanceFeedback]
clickFeedbackItems :: Maybe [ClickFeedback]
$sel:queryId:SubmitFeedback' :: SubmitFeedback -> Text
$sel:indexId:SubmitFeedback' :: SubmitFeedback -> Text
$sel:relevanceFeedbackItems:SubmitFeedback' :: SubmitFeedback -> Maybe [RelevanceFeedback]
$sel:clickFeedbackItems:SubmitFeedback' :: SubmitFeedback -> Maybe [ClickFeedback]
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [ClickFeedback]
clickFeedbackItems
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [RelevanceFeedback]
relevanceFeedbackItems
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
indexId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
queryId

instance Prelude.NFData SubmitFeedback where
  rnf :: SubmitFeedback -> ()
rnf SubmitFeedback' {Maybe [ClickFeedback]
Maybe [RelevanceFeedback]
Text
queryId :: Text
indexId :: Text
relevanceFeedbackItems :: Maybe [RelevanceFeedback]
clickFeedbackItems :: Maybe [ClickFeedback]
$sel:queryId:SubmitFeedback' :: SubmitFeedback -> Text
$sel:indexId:SubmitFeedback' :: SubmitFeedback -> Text
$sel:relevanceFeedbackItems:SubmitFeedback' :: SubmitFeedback -> Maybe [RelevanceFeedback]
$sel:clickFeedbackItems:SubmitFeedback' :: SubmitFeedback -> Maybe [ClickFeedback]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [ClickFeedback]
clickFeedbackItems
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [RelevanceFeedback]
relevanceFeedbackItems
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
indexId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
queryId

instance Data.ToHeaders SubmitFeedback where
  toHeaders :: SubmitFeedback -> [Header]
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"X-Amz-Target"
              forall a. ToHeader a => HeaderName -> a -> [Header]
Data.=# ( ByteString
"AWSKendraFrontendService.SubmitFeedback" ::
                          Prelude.ByteString
                      ),
            HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> [Header]
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON SubmitFeedback where
  toJSON :: SubmitFeedback -> Value
toJSON SubmitFeedback' {Maybe [ClickFeedback]
Maybe [RelevanceFeedback]
Text
queryId :: Text
indexId :: Text
relevanceFeedbackItems :: Maybe [RelevanceFeedback]
clickFeedbackItems :: Maybe [ClickFeedback]
$sel:queryId:SubmitFeedback' :: SubmitFeedback -> Text
$sel:indexId:SubmitFeedback' :: SubmitFeedback -> Text
$sel:relevanceFeedbackItems:SubmitFeedback' :: SubmitFeedback -> Maybe [RelevanceFeedback]
$sel:clickFeedbackItems:SubmitFeedback' :: SubmitFeedback -> Maybe [ClickFeedback]
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"ClickFeedbackItems" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [ClickFeedback]
clickFeedbackItems,
            (Key
"RelevanceFeedbackItems" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [RelevanceFeedback]
relevanceFeedbackItems,
            forall a. a -> Maybe a
Prelude.Just (Key
"IndexId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
indexId),
            forall a. a -> Maybe a
Prelude.Just (Key
"QueryId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
queryId)
          ]
      )

instance Data.ToPath SubmitFeedback where
  toPath :: SubmitFeedback -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/"

instance Data.ToQuery SubmitFeedback where
  toQuery :: SubmitFeedback -> QueryString
toQuery = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

-- | /See:/ 'newSubmitFeedbackResponse' smart constructor.
data SubmitFeedbackResponse = SubmitFeedbackResponse'
  {
  }
  deriving (SubmitFeedbackResponse -> SubmitFeedbackResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SubmitFeedbackResponse -> SubmitFeedbackResponse -> Bool
$c/= :: SubmitFeedbackResponse -> SubmitFeedbackResponse -> Bool
== :: SubmitFeedbackResponse -> SubmitFeedbackResponse -> Bool
$c== :: SubmitFeedbackResponse -> SubmitFeedbackResponse -> Bool
Prelude.Eq, ReadPrec [SubmitFeedbackResponse]
ReadPrec SubmitFeedbackResponse
Int -> ReadS SubmitFeedbackResponse
ReadS [SubmitFeedbackResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [SubmitFeedbackResponse]
$creadListPrec :: ReadPrec [SubmitFeedbackResponse]
readPrec :: ReadPrec SubmitFeedbackResponse
$creadPrec :: ReadPrec SubmitFeedbackResponse
readList :: ReadS [SubmitFeedbackResponse]
$creadList :: ReadS [SubmitFeedbackResponse]
readsPrec :: Int -> ReadS SubmitFeedbackResponse
$creadsPrec :: Int -> ReadS SubmitFeedbackResponse
Prelude.Read, Int -> SubmitFeedbackResponse -> ShowS
[SubmitFeedbackResponse] -> ShowS
SubmitFeedbackResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SubmitFeedbackResponse] -> ShowS
$cshowList :: [SubmitFeedbackResponse] -> ShowS
show :: SubmitFeedbackResponse -> String
$cshow :: SubmitFeedbackResponse -> String
showsPrec :: Int -> SubmitFeedbackResponse -> ShowS
$cshowsPrec :: Int -> SubmitFeedbackResponse -> ShowS
Prelude.Show, forall x. Rep SubmitFeedbackResponse x -> SubmitFeedbackResponse
forall x. SubmitFeedbackResponse -> Rep SubmitFeedbackResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep SubmitFeedbackResponse x -> SubmitFeedbackResponse
$cfrom :: forall x. SubmitFeedbackResponse -> Rep SubmitFeedbackResponse x
Prelude.Generic)

-- |
-- Create a value of 'SubmitFeedbackResponse' 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.
newSubmitFeedbackResponse ::
  SubmitFeedbackResponse
newSubmitFeedbackResponse :: SubmitFeedbackResponse
newSubmitFeedbackResponse = SubmitFeedbackResponse
SubmitFeedbackResponse'

instance Prelude.NFData SubmitFeedbackResponse where
  rnf :: SubmitFeedbackResponse -> ()
rnf SubmitFeedbackResponse
_ = ()