From 1bd954d20e72195a13e25bd04ab1a672eee6081c Mon Sep 17 00:00:00 2001 From: FinnIckler Date: Wed, 24 Jul 2024 23:28:17 +0200 Subject: [PATCH 1/2] add import route --- app/controllers/internal_controller.rb | 56 ++++++++++++++++++++++++++ config/routes.rb | 1 + 2 files changed, 57 insertions(+) diff --git a/app/controllers/internal_controller.rb b/app/controllers/internal_controller.rb index f90c2608..012cae53 100644 --- a/app/controllers/internal_controller.rb +++ b/app/controllers/internal_controller.rb @@ -82,4 +82,60 @@ def show_registration registration = Registration.find(attendee_id) render json: registration end + + def import_registrations + competition_id = params.require(:competition_id) + to_create = params[:create] || [] + to_update = params[:update] || [] + to_delete = params[:delete] || [] + if to_create.any? + puts(to_create.map { |r| { attendee_id: r["attendee_id"], entries: [{ 'changed_attributes' => + { event_ids: r["event_ids"], status: r["competing_status"] }, + 'actor_type' => r["actor_type"], + 'actor_id' => r["actor_id"], + 'action' => 'Import', + 'timestamp' => Time.now }] } }.inspect) + RegistrationHistory.import(to_create.map do |r| + { + attendee_id: r["attendee_id"], + entries: [History.new({ + 'changed_attributes' => { + event_ids: r["event_ids"], + status: r["competing_status"] + }, + 'actor_type' => r["actor_type"], + 'actor_id' => r["actor_id"], + 'action' => 'Import', + 'timestamp' => Time.now + })] + } + end) + Registration.import(to_create.map do |r| + { + attendee_id: r["attendee_id"], + competition_id: competition_id, + user_id: r["user_id"], + competing_status: r["competing_status"], + lanes: [ + LaneFactory.competing_lane( + event_ids: r["event_ids"], + registration_status: r["competing_status"] + ) + ] + } + end) + end + to_update.each do |r| + registration = Registration.find(r["attendee_id"]) + registration.update(r["attendee_id"], competing_status: r["competing_status"], lanes: [LaneFactory.competing_lane(event_ids: r["event_ids"], registration_status: r["competing_status"])]) + registration.history.add_entry({ event_ids: r["event_ids"], status: r["competing_status"] }, r["actor_type"], r["actor_id"], "import") + end + to_delete.each do |r| + Registration.update(r["attendee_id"], competing_status: "cancelled", lanes: [LaneFactory.competing_lane(event_ids: r["event_ids"], registration_status: "cancelled" )]) + registration.history.add_entry({ event_ids: r["event_ids"], status: "cancelled" }, r["actor_type"], r["actor_id"], "import") + end + render json: { errors: [] } + rescue StandardError => e + return render json: { errors: [e.to_s] }, status: :unprocessable_entity + end end diff --git a/config/routes.rb b/config/routes.rb index 9ad3b78f..fe44d338 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -11,6 +11,7 @@ get '/healthcheck', to: 'healthcheck#index' post '/api/internal/v1/update_payment', to: 'internal#update_payment_status' get '/api/internal/v1/:competition_id/registrations', to: 'internal#list_registrations' + post '/api/internal/v1/:competition_id/registrations/import', to: 'internal#import_registrations' get '/api/internal/v1/:attendee_id', to: 'internal#show_registration' get '/api/internal/v1/users/:user_id/registrations', to: 'internal#registrations_for_user' get '/api/v1/register', to: 'registration#show' From e62bd93dbff4d5a1c387c0b264dec51a1901e843 Mon Sep 17 00:00:00 2001 From: FinnIckler Date: Fri, 26 Jul 2024 12:02:15 +0200 Subject: [PATCH 2/2] rub rubocop --- app/controllers/internal_controller.rb | 54 ++++++++++++-------------- 1 file changed, 24 insertions(+), 30 deletions(-) diff --git a/app/controllers/internal_controller.rb b/app/controllers/internal_controller.rb index 012cae53..6d35a0d6 100644 --- a/app/controllers/internal_controller.rb +++ b/app/controllers/internal_controller.rb @@ -89,53 +89,47 @@ def import_registrations to_update = params[:update] || [] to_delete = params[:delete] || [] if to_create.any? - puts(to_create.map { |r| { attendee_id: r["attendee_id"], entries: [{ 'changed_attributes' => - { event_ids: r["event_ids"], status: r["competing_status"] }, - 'actor_type' => r["actor_type"], - 'actor_id' => r["actor_id"], - 'action' => 'Import', - 'timestamp' => Time.now }] } }.inspect) RegistrationHistory.import(to_create.map do |r| { - attendee_id: r["attendee_id"], + attendee_id: r['attendee_id'], entries: [History.new({ - 'changed_attributes' => { - event_ids: r["event_ids"], - status: r["competing_status"] - }, - 'actor_type' => r["actor_type"], - 'actor_id' => r["actor_id"], - 'action' => 'Import', - 'timestamp' => Time.now - })] + 'changed_attributes' => { + event_ids: r['event_ids'], + status: r['competing_status'], + }, + 'actor_type' => r['actor_type'], + 'actor_id' => r['actor_id'], + 'action' => 'Import', + 'timestamp' => Time.zone.now, + })], } end) Registration.import(to_create.map do |r| { - attendee_id: r["attendee_id"], + attendee_id: r['attendee_id'], competition_id: competition_id, - user_id: r["user_id"], - competing_status: r["competing_status"], + user_id: r['user_id'], + competing_status: r['competing_status'], lanes: [ LaneFactory.competing_lane( - event_ids: r["event_ids"], - registration_status: r["competing_status"] - ) - ] + event_ids: r['event_ids'], + registration_status: r['competing_status'], + ), + ], } end) end to_update.each do |r| - registration = Registration.find(r["attendee_id"]) - registration.update(r["attendee_id"], competing_status: r["competing_status"], lanes: [LaneFactory.competing_lane(event_ids: r["event_ids"], registration_status: r["competing_status"])]) - registration.history.add_entry({ event_ids: r["event_ids"], status: r["competing_status"] }, r["actor_type"], r["actor_id"], "import") + registration = Registration.find(r['attendee_id']) + registration.update(r['attendee_id'], competing_status: r['competing_status'], lanes: [LaneFactory.competing_lane(event_ids: r['event_ids'], registration_status: r['competing_status'])]) + registration.history.add_entry({ event_ids: r['event_ids'], status: r['competing_status'] }, r['actor_type'], r['actor_id'], 'import') end to_delete.each do |r| - Registration.update(r["attendee_id"], competing_status: "cancelled", lanes: [LaneFactory.competing_lane(event_ids: r["event_ids"], registration_status: "cancelled" )]) - registration.history.add_entry({ event_ids: r["event_ids"], status: "cancelled" }, r["actor_type"], r["actor_id"], "import") + Registration.update(r['attendee_id'], competing_status: 'cancelled', lanes: [LaneFactory.competing_lane(event_ids: r['event_ids'], registration_status: 'cancelled')]) + registration.history.add_entry({ event_ids: r['event_ids'], status: 'cancelled' }, r['actor_type'], r['actor_id'], 'import') end - render json: { errors: [] } + render json: { errors: [] } rescue StandardError => e - return render json: { errors: [e.to_s] }, status: :unprocessable_entity + render json: { errors: [e.to_s] }, status: :unprocessable_entity end end