docbrown/app/controllers/admin/badge_achievements_controller.rb
Arit Amana aa5f18b234
Admin Save Confirmation - Removing Badge Achievements (#14684)
* schema file undelete description

* update with main

* update with origin

* update

* create controller; hook up to badge_achievements

* almost done with implementation

* push up what I have

* complete implementation; generalize snackbar usage

* start writing tests

* add confirmation text entry step to test

* Fix delete via JS

* implement danger notice for errors

* complete cypress test

* create ErrorAlert CustomEvent and implement

* fix failing badge_achievements spec

* start applying PR review changes

* hook up Preact Modal

* fix cypress tests

* remove old comment

Co-authored-by: Nick Taylor <nick@forem.com>

* consolidate messaging functions

Co-authored-by: Michael Kohl <citizen428@forem.com>
Co-authored-by: Nick Taylor <nick@forem.com>
2021-09-15 21:25:01 -04:00

48 lines
1.4 KiB
Ruby

module Admin
class BadgeAchievementsController < Admin::ApplicationController
layout "admin"
def index
@q = BadgeAchievement
.includes(:badge)
.includes(:user)
.order(created_at: :desc)
.ransack(params[:q])
@badge_achievements = @q.result.page(params[:page] || 1).per(15)
end
def destroy
@badge_achievement = BadgeAchievement.find(params[:id])
if @badge_achievement.destroy
render json: { message: "Badge achievement has been deleted!" }, status: :ok
else
render json: { error: "Something went wrong." }, status: :unprocessable_entity
end
end
def award
@all_badges = Badge.all.select(:title, :slug)
end
def award_badges
raise ArgumentError, "Please choose a badge to award" if permitted_params[:badge].blank?
usernames = permitted_params[:usernames].downcase.split(/\s*,\s*/)
message = permitted_params[:message_markdown].presence || "Congrats!"
BadgeAchievements::BadgeAwardWorker.perform_async(usernames, permitted_params[:badge], message)
flash[:success] = "Badges are being rewarded. The task will finish shortly."
redirect_to admin_badge_achievements_path
rescue ArgumentError => e
flash[:danger] = e.message
redirect_to admin_badge_achievements_path
end
private
def permitted_params
params.permit(:usernames, :badge, :message_markdown)
end
end
end