diff --git a/app/controllers/external_controller.rb b/app/controllers/external_controller.rb index a00b4c689a4f839b071d962b565a679f0b241837..fd36ad4ac98a0d2be9d5e1a9d8a2c5222702df30 100644 --- a/app/controllers/external_controller.rb +++ b/app/controllers/external_controller.rb @@ -99,10 +99,14 @@ class ExternalController < ApplicationController # Increments a rooms recordings_processing if the meeting was recorded def meeting_ended # TODO: - ahmad: Add some sort of validation - return render json: {} unless params[:recordingmarks] == 'true' - @room = Room.find_by(meeting_id: extract_meeting_id) - @room.update(recordings_processing: @room.recordings_processing + 1, online: false) + return render json: {}, status: :ok unless @room + + recordings_processing = params[:recordingmarks] == 'true' ? @room.recordings_processing + 1 : @room.recordings_processing + + unless @room.update(recordings_processing:, online: false) + Rails.logger.error "Failed to update room(id): #{@room.id}, model errors: #{@room.errors}" + end render json: {}, status: :ok end diff --git a/lib/tasks/server_recordings_sync.rake b/lib/tasks/server_recordings_sync.rake deleted file mode 100644 index bcee11b88bfe0f6ce4ea953e2fd09f3dfac7f535..0000000000000000000000000000000000000000 --- a/lib/tasks/server_recordings_sync.rake +++ /dev/null @@ -1,32 +0,0 @@ -# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/. -# -# Copyright (c) 2022 BigBlueButton Inc. and by respective authors (see below). -# -# This program is free software; you can redistribute it and/or modify it under the -# terms of the GNU Lesser General Public License as published by the Free Software -# Foundation; either version 3.0 of the License, or (at your option) any later -# version. -# -# Greenlight is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License along -# with Greenlight; if not, see <http://www.gnu.org/licenses/>. - -# frozen_string_literal: true - -desc 'Server Recordings sync with BBB server' - -task server_recordings_sync: :environment do - Recording.destroy_all - - Room.select(:id, :meeting_id).in_batches(of: 25) do |rooms| - meeting_ids = rooms.pluck(:meeting_id) - - recordings = BigBlueButtonApi.new(provider: 'greenlight').get_recordings(meeting_ids:) - recordings[:recordings].each do |recording| - RecordingCreator.new(recording:).call - end - end -end diff --git a/spec/controllers/external_controller_spec.rb b/spec/controllers/external_controller_spec.rb index 8e7123e59feece0b29926e37d8bd9a8471358dd3..04ae4cc73d06ddbd5cb5ef494acd2f188fe5c1bc 100644 --- a/spec/controllers/external_controller_spec.rb +++ b/spec/controllers/external_controller_spec.rb @@ -349,18 +349,45 @@ RSpec.describe ExternalController, type: :controller do end describe '#meeting_ended' do - let(:room) { create(:room) } + let(:room) { create(:room, online: true) } - it 'increments a rooms recordings processing value if the meeting was recorded' do - get :meeting_ended, params: { meetingID: room.meeting_id, recordingmarks: 'true' } - expect(room.reload.recordings_processing).to eq(1) - get :meeting_ended, params: { meetingID: room.meeting_id, recordingmarks: 'true' } - expect(room.reload.recordings_processing).to eq(2) + context 'Recorded session' do + it 'sets online to false' do + get :meeting_ended, params: { meetingID: room.meeting_id, recordingmarks: 'true' } + + expect(room.reload.online).to be(false) + expect(response).to have_http_status(:ok) + expect(JSON.parse(response.body)).to eq({}) + end + + it 'increments a rooms recordings processing value if the meeting was recorded' do + get :meeting_ended, params: { meetingID: room.meeting_id, recordingmarks: 'true' } + expect(room.reload.recordings_processing).to eq(1) + + get :meeting_ended, params: { meetingID: room.meeting_id, recordingmarks: 'true' } + expect(room.reload.recordings_processing).to eq(2) + end end - it 'does not increment a rooms recordings processing value if the meeting was not recorded' do - get :meeting_ended, params: { meetingID: room.meeting_id, recordingmarks: 'false' } - expect(room.reload.recordings_processing).to eq(0) + context 'Unrecorded session' do + it 'sets online to false without incrementing a rooms recordings processing' do + expect do + get :meeting_ended, params: { meetingID: room.meeting_id, recordingmarks: 'false' } + end.not_to(change { room.reload.recordings_processing }) + + expect(room.online).to be(false) + expect(response).to have_http_status(:ok) + expect(JSON.parse(response.body)).to eq({}) + end + end + + context 'Inexistent room' do + it 'silently fail' do + get :meeting_ended, params: { meetingID: '404', recordingmarks: 'false' } + + expect(response).to have_http_status(:ok) + expect(JSON.parse(response.body)).to eq({}) + end end end