Refactor MergeRequests::ApprovalService to return reason
## Summary As of this writing, when `MergeRequests::ApprovalService#execute` is called and it fails, it returns `nil` or `false` and the consumer doesn't know what's the reason for it. This was initially brought up in https://gitlab.com/gitlab-org/gitlab/-/issues/372972#note_1094005013. ## Improvements Once https://gitlab.com/gitlab-org/gitlab/-/merge_requests/97541 is merged, we can refactor the `MergeRequests::ApprovalService` ## Risks Approval failure handling at consumer level (controller and API endpoint) may break. This can be mitigated by making sure failure cases are covered in tests of specific consumers. ## Involved components Service - `app/services/merge_requests/approval_service.rb` - `ee/app/services/ee/merge_requests/approval_service.rb` Consumers - `app/controllers/projects/merge_requests/drafts_controller.rb` - `lib/api/merge_request_approvals.rb` - `lib/gitlab/quick_actions/merge_request_actions.rb`
issue