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.Classroom.Courses.CourseWork.StudentSubmissions.List
  -- 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)
  --
  -- Returns a list of student submissions that the requester is permitted to view, factoring in the OAuth scopes of the request. @-@ may be specified as the @course_work_id@ to include student submissions for multiple course work items. Course students may only view their own work. Course teachers and domain administrators may view all student submissions. This method returns the following error codes: * @PERMISSION_DENIED@ if the requesting user is not permitted to access the requested course or course work, or for access errors. * @INVALID_ARGUMENT@ if the request is malformed. * @NOT_FOUND@ if the requested course does not exist.
  --
  -- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.courseWork.studentSubmissions.list@.
  module Gogol.Classroom.Courses.CourseWork.StudentSubmissions.List
    ( -- * Resource
      ClassroomCoursesCourseWorkStudentSubmissionsListResource,
  
      -- ** Constructing a Request
      ClassroomCoursesCourseWorkStudentSubmissionsList (..),
      newClassroomCoursesCourseWorkStudentSubmissionsList,
    )
  where
  
  import Gogol.Classroom.Types
  import Gogol.Prelude qualified as Core
  
  -- | A resource alias for @classroom.courses.courseWork.studentSubmissions.list@ method which the
  -- 'ClassroomCoursesCourseWorkStudentSubmissionsList' request conforms to.
  type ClassroomCoursesCourseWorkStudentSubmissionsListResource =
    "v1"
      Core.:> "courses"
      Core.:> Core.Capture "courseId" Core.Text
      Core.:> "courseWork"
      Core.:> Core.Capture "courseWorkId" Core.Text
      Core.:> "studentSubmissions"
      Core.:> Core.QueryParam "$.xgafv" Xgafv
      Core.:> Core.QueryParam "access_token" Core.Text
      Core.:> Core.QueryParam "callback" Core.Text
      Core.:> Core.QueryParam "late" CoursesCourseWorkStudentSubmissionsListLate
      Core.:> Core.QueryParam "pageSize" Core.Int32
      Core.:> Core.QueryParam "pageToken" Core.Text
      Core.:> Core.QueryParams
                "states"
                CoursesCourseWorkStudentSubmissionsListStates
      Core.:> Core.QueryParam "uploadType" Core.Text
      Core.:> Core.QueryParam "upload_protocol" Core.Text
      Core.:> Core.QueryParam "userId" Core.Text
      Core.:> Core.QueryParam "alt" Core.AltJSON
      Core.:> Core.Get '[Core.JSON] ListStudentSubmissionsResponse
  
  -- | Returns a list of student submissions that the requester is permitted to view, factoring in the OAuth scopes of the request. @-@ may be specified as the @course_work_id@ to include student submissions for multiple course work items. Course students may only view their own work. Course teachers and domain administrators may view all student submissions. This method returns the following error codes: * @PERMISSION_DENIED@ if the requesting user is not permitted to access the requested course or course work, or for access errors. * @INVALID_ARGUMENT@ if the request is malformed. * @NOT_FOUND@ if the requested course does not exist.
  --
  -- /See:/ 'newClassroomCoursesCourseWorkStudentSubmissionsList' smart constructor.
  data ClassroomCoursesCourseWorkStudentSubmissionsList = ClassroomCoursesCourseWorkStudentSubmissionsList
    { -- | V1 error format.
      xgafv :: (Core.Maybe Xgafv),
      -- | OAuth access token.
      accessToken :: (Core.Maybe Core.Text),
      -- | JSONP
      callback :: (Core.Maybe Core.Text),
      -- | Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.
      courseId :: Core.Text,
      -- | Identifier of the student work to request. This may be set to the string literal @\"-\"@ to request student work for all course work in the specified course.
      courseWorkId :: Core.Text,
      -- | Requested lateness value. If specified, returned student submissions are restricted by the requested value. If unspecified, submissions are returned regardless of @late@ value.
      late :: (Core.Maybe CoursesCourseWorkStudentSubmissionsListLate),
      -- | Maximum number of items to return. Zero or unspecified indicates that the server may assign a maximum. The server may return fewer than the specified number of results.
      pageSize :: (Core.Maybe Core.Int32),
      -- | nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token.
      pageToken :: (Core.Maybe Core.Text),
      -- | Requested submission states. If specified, returned student submissions match one of the specified submission states.
      states :: (Core.Maybe [CoursesCourseWorkStudentSubmissionsListStates]),
      -- | 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),
      -- | Optional argument to restrict returned student work to those owned by the student with the specified identifier. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal @\"me\"@, indicating the requesting user
      userId :: (Core.Maybe Core.Text)
    }
    deriving (Core.Eq, Core.Show, Core.Generic)
  
  -- | Creates a value of 'ClassroomCoursesCourseWorkStudentSubmissionsList' with the minimum fields required to make a request.
  newClassroomCoursesCourseWorkStudentSubmissionsList ::
    -- |  Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias. See 'courseId'.
    Core.Text ->
    -- |  Identifier of the student work to request. This may be set to the string literal @\"-\"@ to request student work for all course work in the specified course. See 'courseWorkId'.
    Core.Text ->
    ClassroomCoursesCourseWorkStudentSubmissionsList
  newClassroomCoursesCourseWorkStudentSubmissionsList
    courseId
    courseWorkId =
      ClassroomCoursesCourseWorkStudentSubmissionsList
        { xgafv =
            Core.Nothing,
          accessToken = Core.Nothing,
          callback = Core.Nothing,
          courseId = courseId,
          courseWorkId = courseWorkId,
          late = Core.Nothing,
          pageSize = Core.Nothing,
          pageToken = Core.Nothing,
          states = Core.Nothing,
          uploadType = Core.Nothing,
          uploadProtocol = Core.Nothing,
          userId = Core.Nothing
        }
  
  instance
    Core.GoogleRequest
      ClassroomCoursesCourseWorkStudentSubmissionsList
    where
    type
      Rs ClassroomCoursesCourseWorkStudentSubmissionsList =
        ListStudentSubmissionsResponse
    type
      Scopes ClassroomCoursesCourseWorkStudentSubmissionsList =
        '[ Classroom'Coursework'Me,
           Classroom'Coursework'Me'Readonly,
           Classroom'Coursework'Students,
           Classroom'Coursework'Students'Readonly,
           Classroom'StudentSubmissions'Me'Readonly,
           Classroom'StudentSubmissions'Students'Readonly
         ]
    requestClient ClassroomCoursesCourseWorkStudentSubmissionsList {..} =
      go
        courseId
        courseWorkId
        xgafv
        accessToken
        callback
        late
        pageSize
        pageToken
        (states Core.^. Core._Default)
        uploadType
        uploadProtocol
        userId
        (Core.Just Core.AltJSON)
        classroomService
      where
        go =
          Core.buildClient
            ( Core.Proxy ::
                Core.Proxy
                  ClassroomCoursesCourseWorkStudentSubmissionsListResource
            )
            Core.mempty
  