{-# 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.DeletePrincipalMapping
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Deletes a group so that all users and sub groups that belong to the
-- group can no longer access documents only available to that group.
--
-- For example, after deleting the group \"Summer Interns\", all interns
-- who belonged to that group no longer see intern-only documents in their
-- search results.
--
-- If you want to delete or replace users or sub groups of a group, you
-- need to use the @PutPrincipalMapping@ operation. For example, if a user
-- in the group \"Engineering\" leaves the engineering team and another
-- user takes their place, you provide an updated list of users or sub
-- groups that belong to the \"Engineering\" group when calling
-- @PutPrincipalMapping@. You can update your internal list of users or sub
-- groups and input this list when calling @PutPrincipalMapping@.
--
-- @DeletePrincipalMapping@ is currently not supported in the Amazon Web
-- Services GovCloud (US-West) region.
module Amazonka.Kendra.DeletePrincipalMapping
  ( -- * Creating a Request
    DeletePrincipalMapping (..),
    newDeletePrincipalMapping,

    -- * Request Lenses
    deletePrincipalMapping_dataSourceId,
    deletePrincipalMapping_orderingId,
    deletePrincipalMapping_indexId,
    deletePrincipalMapping_groupId,

    -- * Destructuring the Response
    DeletePrincipalMappingResponse (..),
    newDeletePrincipalMappingResponse,
  )
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:/ 'newDeletePrincipalMapping' smart constructor.
data DeletePrincipalMapping = DeletePrincipalMapping'
  { -- | The identifier of the data source you want to delete a group from.
    --
    -- A group can be tied to multiple data sources. You can delete a group
    -- from accessing documents in a certain data source. For example, the
    -- groups \"Research\", \"Engineering\", and \"Sales and Marketing\" are
    -- all tied to the company\'s documents stored in the data sources
    -- Confluence and Salesforce. You want to delete \"Research\" and
    -- \"Engineering\" groups from Salesforce, so that these groups cannot
    -- access customer-related documents stored in Salesforce. Only \"Sales and
    -- Marketing\" should access documents in the Salesforce data source.
    DeletePrincipalMapping -> Maybe Text
dataSourceId :: Prelude.Maybe Prelude.Text,
    -- | The timestamp identifier you specify to ensure Amazon Kendra does not
    -- override the latest @DELETE@ action with previous actions. The highest
    -- number ID, which is the ordering ID, is the latest action you want to
    -- process and apply on top of other actions with lower number IDs. This
    -- prevents previous actions with lower number IDs from possibly overriding
    -- the latest action.
    --
    -- The ordering ID can be the UNIX time of the last update you made to a
    -- group members list. You would then provide this list when calling
    -- @PutPrincipalMapping@. This ensures your @DELETE@ action for that
    -- updated group with the latest members list doesn\'t get overwritten by
    -- earlier @DELETE@ actions for the same group which are yet to be
    -- processed.
    --
    -- The default ordering ID is the current UNIX time in milliseconds that
    -- the action was received by Amazon Kendra.
    DeletePrincipalMapping -> Maybe Natural
orderingId :: Prelude.Maybe Prelude.Natural,
    -- | The identifier of the index you want to delete a group from.
    DeletePrincipalMapping -> Text
indexId :: Prelude.Text,
    -- | The identifier of the group you want to delete.
    DeletePrincipalMapping -> Text
groupId :: Prelude.Text
  }
  deriving (DeletePrincipalMapping -> DeletePrincipalMapping -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeletePrincipalMapping -> DeletePrincipalMapping -> Bool
$c/= :: DeletePrincipalMapping -> DeletePrincipalMapping -> Bool
== :: DeletePrincipalMapping -> DeletePrincipalMapping -> Bool
$c== :: DeletePrincipalMapping -> DeletePrincipalMapping -> Bool
Prelude.Eq, ReadPrec [DeletePrincipalMapping]
ReadPrec DeletePrincipalMapping
Int -> ReadS DeletePrincipalMapping
ReadS [DeletePrincipalMapping]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeletePrincipalMapping]
$creadListPrec :: ReadPrec [DeletePrincipalMapping]
readPrec :: ReadPrec DeletePrincipalMapping
$creadPrec :: ReadPrec DeletePrincipalMapping
readList :: ReadS [DeletePrincipalMapping]
$creadList :: ReadS [DeletePrincipalMapping]
readsPrec :: Int -> ReadS DeletePrincipalMapping
$creadsPrec :: Int -> ReadS DeletePrincipalMapping
Prelude.Read, Int -> DeletePrincipalMapping -> ShowS
[DeletePrincipalMapping] -> ShowS
DeletePrincipalMapping -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeletePrincipalMapping] -> ShowS
$cshowList :: [DeletePrincipalMapping] -> ShowS
show :: DeletePrincipalMapping -> String
$cshow :: DeletePrincipalMapping -> String
showsPrec :: Int -> DeletePrincipalMapping -> ShowS
$cshowsPrec :: Int -> DeletePrincipalMapping -> ShowS
Prelude.Show, forall x. Rep DeletePrincipalMapping x -> DeletePrincipalMapping
forall x. DeletePrincipalMapping -> Rep DeletePrincipalMapping x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DeletePrincipalMapping x -> DeletePrincipalMapping
$cfrom :: forall x. DeletePrincipalMapping -> Rep DeletePrincipalMapping x
Prelude.Generic)

-- |
-- Create a value of 'DeletePrincipalMapping' 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:
--
-- 'dataSourceId', 'deletePrincipalMapping_dataSourceId' - The identifier of the data source you want to delete a group from.
--
-- A group can be tied to multiple data sources. You can delete a group
-- from accessing documents in a certain data source. For example, the
-- groups \"Research\", \"Engineering\", and \"Sales and Marketing\" are
-- all tied to the company\'s documents stored in the data sources
-- Confluence and Salesforce. You want to delete \"Research\" and
-- \"Engineering\" groups from Salesforce, so that these groups cannot
-- access customer-related documents stored in Salesforce. Only \"Sales and
-- Marketing\" should access documents in the Salesforce data source.
--
-- 'orderingId', 'deletePrincipalMapping_orderingId' - The timestamp identifier you specify to ensure Amazon Kendra does not
-- override the latest @DELETE@ action with previous actions. The highest
-- number ID, which is the ordering ID, is the latest action you want to
-- process and apply on top of other actions with lower number IDs. This
-- prevents previous actions with lower number IDs from possibly overriding
-- the latest action.
--
-- The ordering ID can be the UNIX time of the last update you made to a
-- group members list. You would then provide this list when calling
-- @PutPrincipalMapping@. This ensures your @DELETE@ action for that
-- updated group with the latest members list doesn\'t get overwritten by
-- earlier @DELETE@ actions for the same group which are yet to be
-- processed.
--
-- The default ordering ID is the current UNIX time in milliseconds that
-- the action was received by Amazon Kendra.
--
-- 'indexId', 'deletePrincipalMapping_indexId' - The identifier of the index you want to delete a group from.
--
-- 'groupId', 'deletePrincipalMapping_groupId' - The identifier of the group you want to delete.
newDeletePrincipalMapping ::
  -- | 'indexId'
  Prelude.Text ->
  -- | 'groupId'
  Prelude.Text ->
  DeletePrincipalMapping
newDeletePrincipalMapping :: Text -> Text -> DeletePrincipalMapping
newDeletePrincipalMapping Text
pIndexId_ Text
pGroupId_ =
  DeletePrincipalMapping'
    { $sel:dataSourceId:DeletePrincipalMapping' :: Maybe Text
dataSourceId =
        forall a. Maybe a
Prelude.Nothing,
      $sel:orderingId:DeletePrincipalMapping' :: Maybe Natural
orderingId = forall a. Maybe a
Prelude.Nothing,
      $sel:indexId:DeletePrincipalMapping' :: Text
indexId = Text
pIndexId_,
      $sel:groupId:DeletePrincipalMapping' :: Text
groupId = Text
pGroupId_
    }

-- | The identifier of the data source you want to delete a group from.
--
-- A group can be tied to multiple data sources. You can delete a group
-- from accessing documents in a certain data source. For example, the
-- groups \"Research\", \"Engineering\", and \"Sales and Marketing\" are
-- all tied to the company\'s documents stored in the data sources
-- Confluence and Salesforce. You want to delete \"Research\" and
-- \"Engineering\" groups from Salesforce, so that these groups cannot
-- access customer-related documents stored in Salesforce. Only \"Sales and
-- Marketing\" should access documents in the Salesforce data source.
deletePrincipalMapping_dataSourceId :: Lens.Lens' DeletePrincipalMapping (Prelude.Maybe Prelude.Text)
deletePrincipalMapping_dataSourceId :: Lens' DeletePrincipalMapping (Maybe Text)
deletePrincipalMapping_dataSourceId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeletePrincipalMapping' {Maybe Text
dataSourceId :: Maybe Text
$sel:dataSourceId:DeletePrincipalMapping' :: DeletePrincipalMapping -> Maybe Text
dataSourceId} -> Maybe Text
dataSourceId) (\s :: DeletePrincipalMapping
s@DeletePrincipalMapping' {} Maybe Text
a -> DeletePrincipalMapping
s {$sel:dataSourceId:DeletePrincipalMapping' :: Maybe Text
dataSourceId = Maybe Text
a} :: DeletePrincipalMapping)

-- | The timestamp identifier you specify to ensure Amazon Kendra does not
-- override the latest @DELETE@ action with previous actions. The highest
-- number ID, which is the ordering ID, is the latest action you want to
-- process and apply on top of other actions with lower number IDs. This
-- prevents previous actions with lower number IDs from possibly overriding
-- the latest action.
--
-- The ordering ID can be the UNIX time of the last update you made to a
-- group members list. You would then provide this list when calling
-- @PutPrincipalMapping@. This ensures your @DELETE@ action for that
-- updated group with the latest members list doesn\'t get overwritten by
-- earlier @DELETE@ actions for the same group which are yet to be
-- processed.
--
-- The default ordering ID is the current UNIX time in milliseconds that
-- the action was received by Amazon Kendra.
deletePrincipalMapping_orderingId :: Lens.Lens' DeletePrincipalMapping (Prelude.Maybe Prelude.Natural)
deletePrincipalMapping_orderingId :: Lens' DeletePrincipalMapping (Maybe Natural)
deletePrincipalMapping_orderingId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeletePrincipalMapping' {Maybe Natural
orderingId :: Maybe Natural
$sel:orderingId:DeletePrincipalMapping' :: DeletePrincipalMapping -> Maybe Natural
orderingId} -> Maybe Natural
orderingId) (\s :: DeletePrincipalMapping
s@DeletePrincipalMapping' {} Maybe Natural
a -> DeletePrincipalMapping
s {$sel:orderingId:DeletePrincipalMapping' :: Maybe Natural
orderingId = Maybe Natural
a} :: DeletePrincipalMapping)

-- | The identifier of the index you want to delete a group from.
deletePrincipalMapping_indexId :: Lens.Lens' DeletePrincipalMapping Prelude.Text
deletePrincipalMapping_indexId :: Lens' DeletePrincipalMapping Text
deletePrincipalMapping_indexId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeletePrincipalMapping' {Text
indexId :: Text
$sel:indexId:DeletePrincipalMapping' :: DeletePrincipalMapping -> Text
indexId} -> Text
indexId) (\s :: DeletePrincipalMapping
s@DeletePrincipalMapping' {} Text
a -> DeletePrincipalMapping
s {$sel:indexId:DeletePrincipalMapping' :: Text
indexId = Text
a} :: DeletePrincipalMapping)

-- | The identifier of the group you want to delete.
deletePrincipalMapping_groupId :: Lens.Lens' DeletePrincipalMapping Prelude.Text
deletePrincipalMapping_groupId :: Lens' DeletePrincipalMapping Text
deletePrincipalMapping_groupId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeletePrincipalMapping' {Text
groupId :: Text
$sel:groupId:DeletePrincipalMapping' :: DeletePrincipalMapping -> Text
groupId} -> Text
groupId) (\s :: DeletePrincipalMapping
s@DeletePrincipalMapping' {} Text
a -> DeletePrincipalMapping
s {$sel:groupId:DeletePrincipalMapping' :: Text
groupId = Text
a} :: DeletePrincipalMapping)

instance Core.AWSRequest DeletePrincipalMapping where
  type
    AWSResponse DeletePrincipalMapping =
      DeletePrincipalMappingResponse
  request :: (Service -> Service)
-> DeletePrincipalMapping -> Request DeletePrincipalMapping
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 DeletePrincipalMapping
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DeletePrincipalMapping)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
AWSResponse a
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveNull
      DeletePrincipalMappingResponse
DeletePrincipalMappingResponse'

instance Prelude.Hashable DeletePrincipalMapping where
  hashWithSalt :: Int -> DeletePrincipalMapping -> Int
hashWithSalt Int
_salt DeletePrincipalMapping' {Maybe Natural
Maybe Text
Text
groupId :: Text
indexId :: Text
orderingId :: Maybe Natural
dataSourceId :: Maybe Text
$sel:groupId:DeletePrincipalMapping' :: DeletePrincipalMapping -> Text
$sel:indexId:DeletePrincipalMapping' :: DeletePrincipalMapping -> Text
$sel:orderingId:DeletePrincipalMapping' :: DeletePrincipalMapping -> Maybe Natural
$sel:dataSourceId:DeletePrincipalMapping' :: DeletePrincipalMapping -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
dataSourceId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
orderingId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
indexId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
groupId

instance Prelude.NFData DeletePrincipalMapping where
  rnf :: DeletePrincipalMapping -> ()
rnf DeletePrincipalMapping' {Maybe Natural
Maybe Text
Text
groupId :: Text
indexId :: Text
orderingId :: Maybe Natural
dataSourceId :: Maybe Text
$sel:groupId:DeletePrincipalMapping' :: DeletePrincipalMapping -> Text
$sel:indexId:DeletePrincipalMapping' :: DeletePrincipalMapping -> Text
$sel:orderingId:DeletePrincipalMapping' :: DeletePrincipalMapping -> Maybe Natural
$sel:dataSourceId:DeletePrincipalMapping' :: DeletePrincipalMapping -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
dataSourceId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
orderingId
      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
groupId

instance Data.ToHeaders DeletePrincipalMapping where
  toHeaders :: DeletePrincipalMapping -> [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.DeletePrincipalMapping" ::
                          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 DeletePrincipalMapping where
  toJSON :: DeletePrincipalMapping -> Value
toJSON DeletePrincipalMapping' {Maybe Natural
Maybe Text
Text
groupId :: Text
indexId :: Text
orderingId :: Maybe Natural
dataSourceId :: Maybe Text
$sel:groupId:DeletePrincipalMapping' :: DeletePrincipalMapping -> Text
$sel:indexId:DeletePrincipalMapping' :: DeletePrincipalMapping -> Text
$sel:orderingId:DeletePrincipalMapping' :: DeletePrincipalMapping -> Maybe Natural
$sel:dataSourceId:DeletePrincipalMapping' :: DeletePrincipalMapping -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"DataSourceId" 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 Text
dataSourceId,
            (Key
"OrderingId" 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 Natural
orderingId,
            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
"GroupId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
groupId)
          ]
      )

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

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

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

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

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