diff --git a/app/controllers/api/v1/migrations/external_controller.rb b/app/controllers/api/v1/migrations/external_controller.rb index 22d3f204c0166d0eaf9cac230cd44f49ef099477..b56dc58b48b1ad1cfc97c3bfc37d7a4114aabf3d 100644 --- a/app/controllers/api/v1/migrations/external_controller.rb +++ b/app/controllers/api/v1/migrations/external_controller.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +# rubocop:disable Metrics/PerceivedComplexity + module Api module V1 module Migrations @@ -102,22 +104,31 @@ module Api return render_error(status: :bad_request, errors: room&.errors&.to_a) unless room.save - # Finds all the RoomMeetingOptions that need to be updated - room_meeting_options_temp = RoomMeetingOption.includes(:meeting_option) - .where(room_id: room.id, 'meeting_options.name': room_hash[:room_settings].keys) - .pluck(:id, :'meeting_options.name') - .to_h - # Re-structure the data so it is in the format: { <room_meeting_option_id>: { value: <room_meeting_option_new_value> } } - room_meeting_options = room_meeting_options_temp.transform_values { |v| { value: room_hash[:room_settings][v.to_sym] } } - RoomMeetingOption.update!(room_meeting_options.keys, room_meeting_options.values) + if room_hash[:room_settings].any? + # Finds all the RoomMeetingOptions that need to be updated + room_meeting_options_joined = RoomMeetingOption.includes(:meeting_option) + .where(room_id: room.id, 'meeting_options.name': room_hash[:room_settings].keys) + + okay = true + room_meeting_options_joined.each do |room_meeting_option| + option_name = room_meeting_option.meeting_option.name + okay = false unless room_meeting_option.update(value: room_hash[:room_settings][option_name]) + end + + return render_error status: :bad_request, errors: 'Something went wrong when migrating the room settings.' unless okay + end return render_data status: :created unless room_hash[:shared_users_emails].any? # Finds all the users that have a SharedAccess to the Room - users_ids = User.where(email: room_hash[:shared_users_emails]).pluck(:id) - # Re-structure the data so it is in the format: { { room_id:, user_id: } } - shared_accesses = users_ids.map { |user_id| { room_id: room.id, user_id: } } - SharedAccess.create!(shared_accesses) + shared_with_users = User.where(email: room_hash[:shared_users_emails]) + + okay = true + shared_with_users.each do |shared_with_user| + okay = false unless SharedAccess.new(room_id: room.id, user_id: shared_with_user.id).save + end + + return render_error status: :bad_request, errors: 'Something went wrong when sharing the room.' unless okay render_data status: :created end @@ -172,8 +183,9 @@ module Api end def room_params - decrypted_params.require(:room).permit(:name, :friendly_id, :meeting_id, :last_session, :owner_email, room_settings: {}, - shared_users_emails: []) + decrypted_params.require(:room).permit(:name, :friendly_id, :meeting_id, :last_session, :owner_email, + shared_users_emails: [], + room_settings: %w[record muteOnStart guestPolicy glAnyoneCanStart glAnyoneJoinAsModerator]) end def settings_params @@ -208,3 +220,4 @@ module Api end end end +# rubocop:enable Metrics/PerceivedComplexity