From ba54f42d2f94e5a736fb5eb593b8f9f8970bfe63 Mon Sep 17 00:00:00 2001 From: Oleksii Kriuchykhin Date: Wed, 31 Aug 2022 17:19:29 +0200 Subject: [PATCH] Wrap unsaring actions in transaction [SCI-6918] --- app/controllers/team_repositories_controller.rb | 17 ++++++++++------- .../multiple_share_update_service.rb | 10 ++++++---- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/app/controllers/team_repositories_controller.rb b/app/controllers/team_repositories_controller.rb index 2a50473dc..e0bf0ed48 100644 --- a/app/controllers/team_repositories_controller.rb +++ b/app/controllers/team_repositories_controller.rb @@ -6,16 +6,19 @@ class TeamRepositoriesController < ApplicationController # DELETE :team_id/repositories/:repository_id/team_repositories/:id def destroy - team_shared_object = @repository.team_shared_objects.find_by(id: destory_params[:id]) - - if team_shared_object + team_shared_object = @repository.team_shared_objects.find(destory_params[:id]) + ActiveRecord::Base.transaction do log_activity(:unshare_inventory, team_shared_object) team_shared_object.destroy! - render json: {}, status: :no_content - else - render json: { message: I18n.t('repositories.multiple_share_service.nothing_to_delete') }, - status: :unprocessable_entity end + render json: {}, status: :no_content + rescue ActiveRecord::RecordNotFound + render json: { message: I18n.t('repositories.multiple_share_service.nothing_to_delete') }, + status: :unprocessable_entity + rescue StandardError => e + Rails.logger.error(e.message) + Rails.logger.error(e.backtrace.join("\n")) + render json: { message: I18n.t('general.error') }, status: :unprocessable_entity end # POST :team_id/repositories/:repository_id/update diff --git a/app/services/repositories/multiple_share_update_service.rb b/app/services/repositories/multiple_share_update_service.rb index 26453a0f8..bedf4c00d 100644 --- a/app/services/repositories/multiple_share_update_service.rb +++ b/app/services/repositories/multiple_share_update_service.rb @@ -51,14 +51,16 @@ module Repositories end @team_ids_for_unshare.each do |team_id| - team_shared_object = @repository.team_shared_objects.find_by(team_id: team_id) - - if team_shared_object + @repository.transaction do + team_shared_object = @repository.team_shared_objects.find_by!(team_id: team_id) log_activity(:unshare_inventory, team_shared_object) team_shared_object.destroy! - else + rescue StandardError => e + Rails.logger.error(e.message) + Rails.logger.error(e.backtrace.join("\n")) warnings << I18n.t('repositories.multiple_share_service.unable_to_unshare', repository: @repository.name, team: team_id) + raise ActiveRecord::Rollback end end