lujanfernaud/prevy

View on GitHub
app/controllers/groups/roles_controller.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

class Groups::RolesController < ApplicationController
  before_action :find_group
  after_action  :verify_authorized

  def index
    authorize :group_role

    @organizers_and_moderators = find_organizers_and_moderators
    @members = find_members
  end

  def create
    authorize :group_role

    @user = User.find(params[:user_id])
    @role = find_role

    add_role_to_user
    notify_user_with_new_role

    redirect_back fallback_location: group_roles_path(@group)
  end

  def destroy
    authorize :group_role

    @user = User.find(params[:id])
    @role = find_role

    remove_role_from_user
    notify_user_with_removed_role

    redirect_back fallback_location: group_roles_path(@group)
  end

  private

    def find_organizers_and_moderators
      OrganizersAndModeratorsQuery.call(@group)
    end

    def find_members
      User.with_role(:member, @group).order(:name)
    end

    def find_group
      @group = Group.find(params[:group_id])
    end

    def find_role
      params[:role]
    end

    def add_role_to_user
      GroupRoleAdder.call(@group, @user, @role)
    end

    def notify_user_with_new_role
      return if @group.sample_group?

      NewGroupRoleNotifier.call(user: @user, group: @group, role: @role)
    end

    def remove_role_from_user
      GroupRoleRemover.call(@group, @user, @role)
    end

    def notify_user_with_removed_role
      return if @group.sample_group?

      RemovedGroupRoleNotifier.call(user: @user, group: @group, role: @role)
    end
end