From 89d60b04392d217806049aab2d415d46e610e41e Mon Sep 17 00:00:00 2001 From: Zzz212zzZ <2120020201@qq.com> Date: Sat, 20 Apr 2024 17:44:33 -0700 Subject: [PATCH] Refactor to pass the Codeclimate --- .../api/v1/assignments_controller.rb | 51 ++++++++++--------- .../api/v1/assignments_controller_spec.rb | 6 +-- 2 files changed, 29 insertions(+), 28 deletions(-) diff --git a/app/controllers/api/v1/assignments_controller.rb b/app/controllers/api/v1/assignments_controller.rb index 07f9bed..769cfd7 100644 --- a/app/controllers/api/v1/assignments_controller.rb +++ b/app/controllers/api/v1/assignments_controller.rb @@ -9,51 +9,52 @@ def index # POST /courses/:course_id/lms/:lms_id/assignments def create - assignment_name = params[:name] - external_assignment_id = params[:external_assignment_id] - course_id = params[:course_id] - lms_id = params[:lms_id] + # Check if the course_to_lms association exists + course_to_lms = fetch_course_to_lms(params[:course_id], params[:lms_id]) + return unless course_to_lms + # Check if the assignment already exists + return if assignment_exists?(course_to_lms, params[:name], params[:external_assignment_id]) + # Create and render the assignment + create_and_render_assignment(course_to_lms, params[:name], params[:external_assignment_id]) + end - # Retrieve the course_to_lms entry - course_to_lms = CourseToLms.find_by(course_id: course_id, lms_id: lms_id) + def destroy + render json: 'not yet implemented', status: 501 + end + + private + def fetch_course_to_lms(course_id, lms_id) + course_to_lms = CourseToLms.find_by(course_id: course_id, lms_id: lms_id) unless course_to_lms - render json: { error: 'Course to LMS association not found' }, status: :not_found - return + render json: { error: 'No such Course_LMS association' }, status: :not_found end + course_to_lms + end - # Check this assignment doesn't already exist + def assignment_exists?(course_to_lms, assignment_name, external_assignment_id) existing_assignment = Assignment.find_by(course_to_lms_id: course_to_lms.id, name: assignment_name, external_assignment_id: external_assignment_id) if existing_assignment - render json: { message: 'The assignment with the specified external ID already exists.' }, status: :ok - return + render json: { message: 'Record already exists' }, status: :ok + return true end + false + end - # Create the assignment - assignment = Assignment.new( - course_to_lms_id: course_to_lms.id, - name: assignment_name, - external_assignment_id: external_assignment_id - ) - + def create_and_render_assignment(course_to_lms, assignment_name, external_assignment_id) + assignment = Assignment.new(course_to_lms_id: course_to_lms.id, name: assignment_name, external_assignment_id: external_assignment_id) if assignment.save render json: assignment, status: :created else render json: assignment.errors, status: :unprocessable_entity end - - end - - def destroy - render json: 'not yet implemented', status: 501 end def validate_ids! if params[:name].blank? || params[:external_assignment_id].blank? || params[:course_id].blank? || params[:lms_id].blank? - render json: { error: 'Course ID, LMS ID, name, and external assignment ID are required' }, status: :bad_request + render json: { error: 'Params required' }, status: :bad_request end end end end end - \ No newline at end of file diff --git a/spec/controllers/api/v1/assignments_controller_spec.rb b/spec/controllers/api/v1/assignments_controller_spec.rb index 621c804..27f5245 100644 --- a/spec/controllers/api/v1/assignments_controller_spec.rb +++ b/spec/controllers/api/v1/assignments_controller_spec.rb @@ -11,7 +11,7 @@ def json_response let(:mock_course_to_lms) { CourseToLms.create!(course_id: mock_course.id, lms_id: mock_lms.id) } let(:valid_params) { { name: "Test Assignment", external_assignment_id: "123ABC", course_id: mock_course.id, lms_id: mock_lms.id } } - + before do mock_course mock_lms @@ -46,7 +46,7 @@ def json_response it 'returns status :not_found' do post :create, params: { course_id: -1, lms_id: -1, name: "Test Assignment", external_assignment_id: "123ABC" } expect(response).to have_http_status(:not_found) - expect(response.body).to include('Course to LMS association not found') + expect(response.body).to include('No such Course_LMS association') end end @@ -55,7 +55,7 @@ def json_response Assignment.create!(course_to_lms_id: mock_course_to_lms.id, name: "Test Assignment", external_assignment_id: "123ABC") post :create, params: valid_params expect(response).to have_http_status(:ok) - expect(response.body).to include('The assignment with the specified external ID already exists.') + expect(response.body).to include('Record already exists') end end