Retrospring/app/controllers/ajax/list_controller.rb

115 lines
3.3 KiB
Ruby

class Ajax::ListController < AjaxController
def create
@response[:status] = :err
unless user_signed_in?
@response[:status] = :noauth
@response[:message] = I18n.t('messages.noauth')
return
end
begin
params.require :name
rescue ActionController::ParameterMissing => e
Sentry.capture_exception(e)
@response[:status] = :toolong
@response[:message] = I18n.t('messages.list.create.noname')
return
end
params.require :user
begin
target_user = User.find_by_screen_name!(params[:user])
list = List.create! user: current_user, display_name: params[:name]
rescue ActiveRecord::RecordInvalid => e
Sentry.capture_exception(e)
@response[:status] = :toolong
@response[:message] = I18n.t('messages.list.create.toolong')
return
rescue ActiveRecord::RecordNotFound => e
Sentry.capture_exception(e)
@response[:status] = :notfound
@response[:message] = I18n.t('messages.list.create.notfound')
return
rescue ActiveRecord::RecordNotUnique => e
Sentry.capture_exception(e)
@response[:status] = :exists
@response[:message] = I18n.t('messages.list.create.exists')
return
end
@response[:status] = :okay
@response[:success] = true
@response[:message] = I18n.t('messages.list.create.okay')
@response[:render] = render_to_string(partial: 'modal/list/item', locals: { list: list, user: target_user })
end
def destroy
@response[:status] = :err
unless user_signed_in?
@response[:status] = :noauth
@response[:message] = I18n.t('messages.noauth')
return
end
params.require :list
begin
List.where(user: current_user, name: params[:list]).first.destroy!
rescue ActiveRecord::RecordNotFound => e
Sentry.capture_exception(e)
@response[:status] = :notfound
@response[:message] = I18n.t('messages.list.destroy.notfound')
return
end
@response[:status] = :okay
@response[:success] = true
@response[:message] = I18n.t('messages.list.destroy.okay')
end
def membership
@response[:status] = :err
unless user_signed_in?
@response[:status] = :noauth
@response[:message] = I18n.t('messages.noauth')
return
end
params.require :user
params.require :list
params.require :add
add = params[:add] == 'true'
begin
list = current_user.lists.find_by_name!(params[:list])
rescue ActiveRecord::RecordNotFound => e
Sentry.capture_exception(e)
@response[:status] = :notfound
@response[:message] = I18n.t('messages.list.membership.notfound')
return
end
target_user = User.find_by_screen_name!(params[:user])
raise Errors::ListingSelfBlockedOther if current_user.blocking?(target_user)
raise Errors::ListingOtherBlockedSelf if target_user.blocking?(current_user)
if add
list.add_member target_user if list.members.find_by_user_id(target_user.id).nil?
@response[:checked] = true
@response[:message] = I18n.t('messages.list.membership.add')
else
list.remove_member target_user unless list.members.find_by_user_id(target_user.id).nil?
@response[:checked] = false
@response[:message] = I18n.t('messages.list.membership.remove')
end
@response[:status] = :okay
@response[:success] = true
end
end