diff options
Diffstat (limited to 'app/services/users/set_status_service.rb')
-rw-r--r-- | app/services/users/set_status_service.rb | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/app/services/users/set_status_service.rb b/app/services/users/set_status_service.rb new file mode 100644 index 00000000000..89008368d5f --- /dev/null +++ b/app/services/users/set_status_service.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +module Users + class SetStatusService + include Gitlab::Allowable + + attr_reader :current_user, :target_user, :params + + def initialize(current_user, params) + @current_user, @params = current_user, params.dup + @target_user = params.delete(:user) || current_user + end + + def execute + return false unless can?(current_user, :update_user_status, target_user) + + if params[:emoji].present? || params[:message].present? + set_status + else + remove_status + end + end + + private + + def set_status + params[:emoji] = UserStatus::DEFAULT_EMOJI if params[:emoji].blank? + user_status.update(params) + end + + def remove_status + UserStatus.delete(target_user.id) + end + + def user_status + target_user.status || target_user.build_status + end + end +end |