Skip to content

Commit

Permalink
Merge pull request #5116 from sul-dlss/solr_endpoint
Browse files Browse the repository at this point in the history
Adds endpoint for getting solr doc for a user version.
  • Loading branch information
jcoyne authored Jul 3, 2024
2 parents 4e268b3 + 367704c commit 6df5a6e
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 9 deletions.
25 changes: 17 additions & 8 deletions app/controllers/user_versions_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@
# Controller for user versions
class UserVersionsController < ApplicationController
before_action :find_repository_object
before_action :find_user_version, only: %i[show update solr]

def index
render json: { user_versions: @repository_object.user_versions.map(&:as_json) }
end

def show
user_version = @repository_object.user_versions.find_by!(version: params[:id])
render json: user_version.repository_object_version.to_cocina_with_metadata
render json: @user_version.repository_object_version.to_cocina_with_metadata
rescue RepositoryObjectVersion::NoCocina
json_api_error(status: :not_found, message: 'No Cocina for specified version')
end
Expand All @@ -26,22 +26,31 @@ def create
end

def update
user_version = @repository_object.user_versions.find_by!(version: params[:id])
user_version.withdrawn = params[:withdrawn] if params.key?(:withdrawn)
@user_version.withdrawn = params[:withdrawn] if params.key?(:withdrawn)
if params.key?(:version)
repository_object_version = @repository_object.versions.find_by!(version: params[:version])
user_version.repository_object_version = repository_object_version
@user_version.repository_object_version = repository_object_version
end
if user_version.save
render json: user_version.as_json
if @user_version.save
render json: @user_version.as_json
else
json_api_error(status: :unprocessable_entity, message: user_version.errors.full_messages.to_sentence)
json_api_error(status: :unprocessable_entity, message: @user_version.errors.full_messages.to_sentence)
end
end

def solr
render json: Indexing::Builders::DocumentBuilder.for(
model: @user_version.repository_object_version.to_cocina_with_metadata
).to_solr
end

private

def find_repository_object
@repository_object = RepositoryObject.find_by!(external_identifier: params[:object_id])
end

def find_user_version
@user_version = @repository_object.user_versions.find_by!(version: params[:id])
end
end
6 changes: 5 additions & 1 deletion config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,11 @@
end
end

resources :user_versions, only: %i[index show create update]
resources :user_versions, only: %i[index show create update] do
member do
get 'solr'
end
end

resources :release_tags, only: [:create, :index]
end
Expand Down
32 changes: 32 additions & 0 deletions openapi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1236,6 +1236,38 @@ paths:
required: true
schema:
type: string
"/v1/objects/{object_id}/user_versions/{version_id}/solr":
get:
tags:
- versions
summary: Show solr document for a particular user version
operationId: "user_versions#solr"
responses:
"200":
description: OK
content:
application/json:
schema:
type: object
"404":
description: Not found
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorResponse"
parameters:
- name: object_id
in: path
description: ID of object
required: true
schema:
$ref: "#/components/schemas/Druid"
- name: version_id
in: path
description: ID of the version
required: true
schema:
type: string
/v1/objects:
post:
tags:
Expand Down
29 changes: 29 additions & 0 deletions spec/requests/show_user_version_solr_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# frozen_string_literal: true

require 'rails_helper'

RSpec.describe 'Show single user version' do
let(:druid) { 'druid:mx123qw2323' }

let(:workflows) do
instance_double(Indexing::Indexers::WorkflowsIndexer, to_solr: { 'wf_ssim' => ['accessionWF'] })
end

context 'when found' do
before do
repository_object = create(:repository_object, :with_repository_object_version, :closed, external_identifier: druid)
create(:user_version, version: 1, repository_object_version: repository_object.versions.first)
allow(Indexing::Indexers::WorkflowsIndexer).to receive(:new).and_return(workflows)
allow(Indexing::WorkflowFields).to receive(:for).and_return({ milestones_ssim: %w[foo bar] })
end

it 'returns a 200' do
get "/v1/objects/#{druid}/user_versions/1/solr",
headers: { 'Authorization' => "Bearer #{jwt}" }

expect(response).to have_http_status(:ok)
expect(response.parsed_body).to include(id: druid)
expect(response.parsed_body).to include(rights_descriptions_ssim: ['world', 'dark (file)'])
end
end
end

0 comments on commit 6df5a6e

Please sign in to comment.