ontohub/ontohub-backend

View on GitHub
app/controllers/rest/documents_controller.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

module Rest
  # Handles requests for branch read operations
  class DocumentsController < Rest::ApplicationController
    # rubocop:disable Metrics/BlockLength
    graphql :show do
      # rubocop:enable Metrics/BlockLength
      arguments do
        organizational_unit_id = params[:organizational_unit_id]
        repository_id = params[:repository_id]
        {'repository' => "#{organizational_unit_id}/#{repository_id}",
         'revision' => params[:revision],
         'documentLocId' => params[:document_loc_id]}
      end

      query <<-QUERY
        query ($repository: ID!, $revision: ID, $documentLocId: ID!) {
          repository(id: $repository) {
            commit(revision: $revision) {
              document(locId: $documentLocId) {
                __typename
                locId
                documentLinks {
                  source {
                    __typename
                    locId
                  }
                  target {
                    __typename
                    locId
                  }
                }
              }
            }
          }
        }
      QUERY

      plain do |_graphql_executor, variables, _context|
        repository = RepositoryCompound.first(slug: variables['repository'])
        git = repository.git
        commit = git.commit(variables['revision'] || git.default_branch)
        document =
          Document.where_commit_sha(commit_sha: commit&.id,
                                    loc_id: variables['documentLocId']).first
        if document
          path = document.file_version.path
          content = GitFile.new(commit, path, load_all_data: true).content
          [content, :ok]
        else
          ['', :not_found]
        end
      end
    end
  end
end