canvas-lms/app/controllers/sis_import_errors_api_contr...

90 lines
3.1 KiB
Ruby

#
# Copyright (C) 2018 - present Instructure, Inc.
#
# This file is part of Canvas.
#
# Canvas is free software: you can redistribute it and/or modify it under
# the terms of the GNU Affero General Public License as published by the Free
# Software Foundation, version 3 of the License.
#
# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# You should have received a copy of the GNU Affero General Public License along
# with this program. If not, see <http://www.gnu.org/licenses/>.
#
# @API SIS Import Errors
#
#
# @model SisImportError
# {
# "id": "SisImportError",
# "description": "",
# "properties": {
# "sis_import_id": {
# "description": "The unique identifier for the SIS import.",
# "example": "1",
# "type": "integer"
# },
# "file": {
# "description": "The file where the error message occurred.",
# "example": "courses.csv",
# "type": "string"
# },
# "message": {
# "description": "The error message that from the record.",
# "example": "No short_name given for course C001",
# "type": "string"
# },
# "row": {
# "description": "The line number where the error occurred. Some Importers do not yet support this. This is a 1 based index starting with the header row.",
# "example": "34",
# "type": "integer"
# }
# }
# }
#
class SisImportErrorsApiController < ApplicationController
before_action :get_context
before_action :check_account
include Api::V1::SisImportError
def check_account
return render json: {errors: ["SIS imports can only be executed on root accounts"]}, status: :bad_request unless @account.root_account?
return render json: {errors: ["SIS imports are not enabled for this account"]}, status: :forbidden unless @account.allow_sis_import
end
# @API Get SIS import error list
#
# Returns the list of SIS import errors for an account or a SIS import. Import
# errors are only stored for 30 days.
#
# Example:
# curl 'https://<canvas>/api/v1/accounts/<account_id>/sis_imports/<id>/sis_import_errors' \
# -H "Authorization: Bearer <token>"
#
# Example:
# curl 'https://<canvas>/api/v1/accounts/<account_id>/sis_import_errors' \
# -H "Authorization: Bearer <token>"
#
# @returns [SisImportError]
def index
if authorized_action(@account, @current_user, %i(import_sis manage_sis))
scope = @account.sis_batch_errors.order('created_at DESC')
if params[:id]
batch = @account.sis_batches.find(params[:id])
scope = scope.where(sis_batch_id: batch)
end
url = api_v1_sis_batch_import_errors_url if params[:id]
url ||= api_v1_account_sis_import_errors_url
errors = Api.paginate(scope, self, url)
render json: {sis_import_errors: sis_import_errors_json(errors)}
end
end
end