content: {-# LANGUAGE DataKinds #-}
  {-# LANGUAGE DerivingStrategies #-}
  {-# LANGUAGE DuplicateRecordFields #-}
  {-# LANGUAGE ImportQualifiedPost #-}
  {-# LANGUAGE LambdaCase #-}
  {-# LANGUAGE OverloadedStrings #-}
  {-# LANGUAGE PatternSynonyms #-}
  {-# LANGUAGE RecordWildCards #-}
  {-# LANGUAGE StrictData #-}
  {-# LANGUAGE TypeFamilies #-}
  {-# LANGUAGE NoImplicitPrelude #-}
  {-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
  {-# OPTIONS_GHC -fno-warn-name-shadowing #-}
  {-# OPTIONS_GHC -fno-warn-unused-binds #-}
  {-# OPTIONS_GHC -fno-warn-unused-imports #-}
  {-# OPTIONS_GHC -fno-warn-unused-matches #-}
  
  -- |
  -- Module      : Gogol.Healthcare.Projects.Locations.Datasets.FhirStores.Bulkexportgroup
  -- Copyright   : (c) 2015-2025 Brendan Hay
  -- License     : Mozilla Public License, v. 2.0.
  -- Maintainer  : Brendan Hay <brendan.g.hay+gogol@gmail.com>
  --               Toni Cebrián <toni@tonicebrian.com>
  -- Stability   : auto-generated
  -- Portability : non-portable (GHC extensions)
  --
  -- Bulk exports a Group resource and resources in the member field, including related resources for each Patient member. The export for each Patient is identical to a GetPatientEverything request. Implements the FHIR implementation guide <https://build.fhir.org/ig/HL7/bulk-data/export.html#endpoint---group-of-patients $export group of patients>. The following headers must be set in the request: * @Accept@: specifies the format of the @OperationOutcome@ response. Only @application\/fhir+json@ is supported. * @Prefer@: specifies whether the response is immediate or asynchronous. Must be to @respond-async@ because only asynchronous responses are supported. Specify the destination for the server to write result files by setting the Cloud Storage location bulk/export/gcs/destination on the FHIR store. URI of an existing Cloud Storage directory where the server writes result files, in the format gs:\/\/{bucket-id}\/{path\/to\/destination\/dir}. If there is no trailing slash, the service appends one when composing the
  -- object path. The user is responsible for creating the Cloud Storage bucket referenced. Supports the following query parameters: * @_type@: string of comma-delimited FHIR resource types. If provided, only resources of the specified type(s) are exported. * @_since@: if provided, only resources updated after the specified time are exported. * @_outputFormat@: optional, specify ndjson to export data in NDJSON format. Exported file names use the format: {export/id}/{resource/type}.ndjson. * @organizeOutputBy@: resource type to organize the output by. Required and must be set to @Patient@. When specified, output files are organized by instances of the specified resource type, including the resource, referenced resources, and resources that contain references to that resource. On success, the @Content-Location@ header of response is set to a URL that you can use to query the status of the export. The URL is in the format
  -- @projects\/{project_id}\/locations\/{location_id}\/datasets\/{dataset_id}\/fhirStores\/{fhir_store_id}\/operations\/{export_id}@. See get-fhir-operation-status for more information. Errors generated by the FHIR store contain a JSON-encoded @OperationOutcome@ resource describing the reason for the error.
  --
  -- /See:/ <https://cloud.google.com/healthcare Cloud Healthcare API Reference> for @healthcare.projects.locations.datasets.fhirStores.bulkexportgroup@.
  module Gogol.Healthcare.Projects.Locations.Datasets.FhirStores.Bulkexportgroup
    ( -- * Resource
      HealthcareProjectsLocationsDatasetsFhirStoresBulkexportgroupResource,
  
      -- ** Constructing a Request
      HealthcareProjectsLocationsDatasetsFhirStoresBulkexportgroup (..),
      newHealthcareProjectsLocationsDatasetsFhirStoresBulkexportgroup,
    )
  where
  
  import Gogol.Healthcare.Types
  import Gogol.Prelude qualified as Core
  
  -- | A resource alias for @healthcare.projects.locations.datasets.fhirStores.bulkexportgroup@ method which the
  -- 'HealthcareProjectsLocationsDatasetsFhirStoresBulkexportgroup' request conforms to.
  type HealthcareProjectsLocationsDatasetsFhirStoresBulkexportgroupResource =
    "v1"
      Core.:> Core.Capture "name" Core.Text
      Core.:> "$export"
      Core.:> Core.QueryParam "$.xgafv" Xgafv
      Core.:> Core.QueryParam "_since" Core.Text
      Core.:> Core.QueryParam "_type" Core.Text
      Core.:> Core.QueryParam "access_token" Core.Text
      Core.:> Core.QueryParam "callback" Core.Text
      Core.:> Core.QueryParam "organizeOutputBy" Core.Text
      Core.:> Core.QueryParam "outputFormat" Core.Text
      Core.:> Core.QueryParam "uploadType" Core.Text
      Core.:> Core.QueryParam "upload_protocol" Core.Text
      Core.:> Core.QueryParam "alt" Core.AltJSON
      Core.:> Core.Get '[Core.JSON] HttpBody
  
  -- | Bulk exports a Group resource and resources in the member field, including related resources for each Patient member. The export for each Patient is identical to a GetPatientEverything request. Implements the FHIR implementation guide <https://build.fhir.org/ig/HL7/bulk-data/export.html#endpoint---group-of-patients $export group of patients>. The following headers must be set in the request: * @Accept@: specifies the format of the @OperationOutcome@ response. Only @application\/fhir+json@ is supported. * @Prefer@: specifies whether the response is immediate or asynchronous. Must be to @respond-async@ because only asynchronous responses are supported. Specify the destination for the server to write result files by setting the Cloud Storage location bulk/export/gcs/destination on the FHIR store. URI of an existing Cloud Storage directory where the server writes result files, in the format gs:\/\/{bucket-id}\/{path\/to\/destination\/dir}. If there is no trailing slash, the service appends one when composing the
  -- object path. The user is responsible for creating the Cloud Storage bucket referenced. Supports the following query parameters: * @_type@: string of comma-delimited FHIR resource types. If provided, only resources of the specified type(s) are exported. * @_since@: if provided, only resources updated after the specified time are exported. * @_outputFormat@: optional, specify ndjson to export data in NDJSON format. Exported file names use the format: {export/id}/{resource/type}.ndjson. * @organizeOutputBy@: resource type to organize the output by. Required and must be set to @Patient@. When specified, output files are organized by instances of the specified resource type, including the resource, referenced resources, and resources that contain references to that resource. On success, the @Content-Location@ header of response is set to a URL that you can use to query the status of the export. The URL is in the format
  -- @projects\/{project_id}\/locations\/{location_id}\/datasets\/{dataset_id}\/fhirStores\/{fhir_store_id}\/operations\/{export_id}@. See get-fhir-operation-status for more information. Errors generated by the FHIR store contain a JSON-encoded @OperationOutcome@ resource describing the reason for the error.
  --
  -- /See:/ 'newHealthcareProjectsLocationsDatasetsFhirStoresBulkexportgroup' smart constructor.
  data HealthcareProjectsLocationsDatasetsFhirStoresBulkexportgroup = HealthcareProjectsLocationsDatasetsFhirStoresBulkexportgroup
    { -- | V1 error format.
      xgafv :: (Core.Maybe Xgafv),
      -- | Optional. If provided, only resources updated after this time are exported. The time uses the format YYYY-MM-DDThh:mm:ss.sss+zz:zz. For example, @2015-02-07T13:28:17.239+02:00@ or @2017-01-01T00:00:00Z@. The time must be specified to the second and include a time zone.
      since :: (Core.Maybe Core.Text),
      -- | Optional. String of comma-delimited FHIR resource types. If provided, only resources of the specified resource type(s) are exported.
      type' :: (Core.Maybe Core.Text),
      -- | OAuth access token.
      accessToken :: (Core.Maybe Core.Text),
      -- | JSONP
      callback :: (Core.Maybe Core.Text),
      -- | Required. Name of the Group resource that is exported, in format @projects\/{project_id}\/locations\/{location_id}\/datasets\/{dataset_id}\/fhirStores\/{fhir_store_id}\/fhir\/Group\/{group_id}@.
      name :: Core.Text,
      -- | Optional. Required. The FHIR resource type used to organize exported resources. Only supports \"Patient\". When organized by Patient resource, output files are grouped as follows: * Patient file(s) containing the Patient resources. Each Patient is sequentially followed by all resources the Patient references, and all resources that reference the Patient (equivalent to a GetPatientEverything request). * Individual files grouped by resource type for resources in the Group\'s member field and the Group resource itself. Resources may be duplicated across multiple Patients. For example, if two Patient resources reference the same Organization resource, it will appear twice, once after each Patient. The Group resource from the request does not appear in the Patient files.
      organizeOutputBy :: (Core.Maybe Core.Text),
      -- | Optional. Output format of the export. This field is optional and only @application\/fhir+ndjson@ is supported.
      outputFormat :: (Core.Maybe Core.Text),
      -- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
      uploadType :: (Core.Maybe Core.Text),
      -- | Upload protocol for media (e.g. \"raw\", \"multipart\").
      uploadProtocol :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'HealthcareProjectsLocationsDatasetsFhirStoresBulkexportgroup' with the minimum fields required to make a request.
  newHealthcareProjectsLocationsDatasetsFhirStoresBulkexportgroup ::
    -- |  Required. Name of the Group resource that is exported, in format @projects\/{project_id}\/locations\/{location_id}\/datasets\/{dataset_id}\/fhirStores\/{fhir_store_id}\/fhir\/Group\/{group_id}@. See 'name'.
    Core.Text ->
    HealthcareProjectsLocationsDatasetsFhirStoresBulkexportgroup
  newHealthcareProjectsLocationsDatasetsFhirStoresBulkexportgroup
    name =
      HealthcareProjectsLocationsDatasetsFhirStoresBulkexportgroup
        { xgafv =
            Core.Nothing,
          since = Core.Nothing,
          type' = Core.Nothing,
          accessToken = Core.Nothing,
          callback = Core.Nothing,
          name = name,
          organizeOutputBy = Core.Nothing,
          outputFormat = Core.Nothing,
          uploadType = Core.Nothing,
          uploadProtocol = Core.Nothing
        }
  
  instance
    Core.GoogleRequest
      HealthcareProjectsLocationsDatasetsFhirStoresBulkexportgroup
    where
    type
      Rs
        HealthcareProjectsLocationsDatasetsFhirStoresBulkexportgroup =
        HttpBody
    type
      Scopes
        HealthcareProjectsLocationsDatasetsFhirStoresBulkexportgroup =
        '[CloudHealthcare'FullControl, CloudPlatform'FullControl]
    requestClient
      HealthcareProjectsLocationsDatasetsFhirStoresBulkexportgroup {..} =
        go
          name
          xgafv
          since
          type'
          accessToken
          callback
          organizeOutputBy
          outputFormat
          uploadType
          uploadProtocol
          (Core.Just Core.AltJSON)
          healthcareService
        where
          go =
            Core.buildClient
              ( Core.Proxy ::
                  Core.Proxy
                    HealthcareProjectsLocationsDatasetsFhirStoresBulkexportgroupResource
              )
              Core.mempty
  