Class: RailsOnboarding::MilestonesController
- Inherits:
-
ApplicationController
- Object
- ApplicationController
- ApplicationController
- RailsOnboarding::MilestonesController
- Includes:
- RateLimitable
- Defined in:
- app/controllers/rails_onboarding/milestones_controller.rb
Instance Method Summary collapse
- #achieve ⇒ Object
- #available ⇒ Object
- #check ⇒ Object
- #index ⇒ Object
- #progress ⇒ Object
- #recent ⇒ Object
- #show ⇒ Object
- #trigger ⇒ Object
Instance Method Details
#achieve ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'app/controllers/rails_onboarding/milestones_controller.rb', line 40 def achieve milestone = MilestoneService.claim_if_eligible(current_user, params[:milestone_key]) if milestone render json: { success: true, milestone: milestone, total_points: current_user.total_milestone_points, celebration: true } else render json: { success: false, error: "Milestone could not be achieved" }, status: :forbidden end end |
#available ⇒ Object
107 108 109 110 |
# File 'app/controllers/rails_onboarding/milestones_controller.rb', line 107 def available available_milestones = current_user.milestones_available || [] render json: available_milestones end |
#check ⇒ Object
70 71 72 73 74 75 |
# File 'app/controllers/rails_onboarding/milestones_controller.rb', line 70 def check milestone_id = params[:id] achieved = current_user.milestone_achieved?(milestone_id) render json: { achieved: achieved } end |
#index ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'app/controllers/rails_onboarding/milestones_controller.rb', line 8 def index achieved_milestones = current_user.achieved_milestones.map do |key| RailsOnboarding.configuration.milestone_by_key(key) end.compact available_milestones = current_user.milestones_available total_points = current_user.total_milestone_points respond_to do |format| format.html do @achieved_milestones = achieved_milestones @available_milestones = available_milestones @total_points = total_points end format.json do render json: (achieved_milestones + available_milestones) end end end |
#progress ⇒ Object
63 64 65 66 67 68 |
# File 'app/controllers/rails_onboarding/milestones_controller.rb', line 63 def progress render json: { points: current_user.milestone_points || 0, achieved: current_user.milestones_achieved.map { |m| m["key"] || m[:key] }.compact } end |
#recent ⇒ Object
58 59 60 61 |
# File 'app/controllers/rails_onboarding/milestones_controller.rb', line 58 def recent @recent_milestones = current_user.recent_milestones(limit: params[:limit]&.to_i || 5) render json: @recent_milestones end |
#show ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 |
# File 'app/controllers/rails_onboarding/milestones_controller.rb', line 28 def show milestone_key = params[:id] @milestone = RailsOnboarding.configuration.milestone_by_key(milestone_key) unless @milestone redirect_to milestones_path, alert: "Milestone not found" return end @achieved = current_user.milestone_achieved?(milestone_key) end |
#trigger ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'app/controllers/rails_onboarding/milestones_controller.rb', line 77 def trigger milestone_id = params[:milestone_id] # Check if milestone is already achieved if current_user.milestone_achieved?(milestone_id) render json: { success: false, message: "Milestone already achieved" } return end # Award the milestone only if the user actually qualifies for it milestone = MilestoneService.claim_if_eligible(current_user, milestone_id) if milestone render json: { success: true, celebration: true, points_awarded: milestone[:points] || 0, total_points: current_user.milestone_points || 0 } else render json: { success: false, error: "You are not eligible for this milestone yet" }, status: :forbidden end end |