/app/controllers/admin/chat_channels_controller.rb
https://github.com/thepracticaldev/dev.to · Ruby · 58 lines · 49 code · 9 blank · 0 comment · 1 complexity · ed5f2ff37dd20637799d44c6429be8e5 MD5 · raw file
- module Admin
- class ChatChannelsController < Admin::ApplicationController
- layout "admin"
- def index
- @q = ChatChannel.where(channel_type: "invite_only").includes(:users).ransack(params[:q])
- @group_chat_channels = @q.result.page(params[:page]).per(50)
- end
- def create
- ChatChannels::CreateWithUsers.call(
- users: users_by_param,
- channel_type: "invite_only",
- contrived_name: chat_channel_params[:channel_name],
- membership_role: "mod",
- )
- redirect_back(fallback_location: "/admin/chat_channels")
- end
- def update
- @chat_channel = ChatChannel.find(params[:id])
- @chat_channel.invite_users(users: users_by_param)
- redirect_back(fallback_location: "/admin/chat_channels")
- end
- def remove_user
- @chat_channel = ChatChannel.find(params[:id])
- @chat_channel.remove_user(user_by_param)
- redirect_back(fallback_location: "/admin/chat_channels")
- end
- def destroy
- @chat_channel = ChatChannel.find(params[:id])
- if @chat_channel.users.count.zero?
- @chat_channel.destroy
- flash[:success] = "Channel was successfully deleted."
- else
- flash[:alert] = "Channel NOT deleted, because it still has users."
- end
- redirect_back(fallback_location: "/admin/chat_channels")
- end
- private
- def users_by_param
- User.where(username: chat_channel_params[:usernames_string].downcase.delete(" ").split(","))
- end
- def user_by_param
- User.find_by(username: chat_channel_params[:username_string])
- end
- def chat_channel_params
- allowed_params = %i[usernames_string channel_name username_string]
- params.require(:chat_channel).permit(allowed_params)
- end
- end
- end