class Api::V1::LeaderboardController < ApplicationController
|
|
skip_before_action :verify_authenticity_token
|
|
skip_before_action :authenticate
|
|
|
|
ACCESS_TOKEN = "ikea-tomato-2026"
|
|
|
|
before_action :set_cors_headers, :set_locale_to_default, :verify_access_token
|
|
|
|
def index
|
|
request.format = :json
|
|
|
|
data = Rails.cache.fetch("api/v1/leaderboard", expires_in: 1.minute) do
|
|
DemoActivity.simulate! # TEMP: fake gameplay so the banner has moving numbers
|
|
leaderboard = LeaderboardScore.call
|
|
{
|
|
leaderboard: leaderboard,
|
|
badges: LeaderboardBadges.call(leaderboard),
|
|
updated_at: Time.current
|
|
}
|
|
end
|
|
|
|
@leaderboard = data[:leaderboard]
|
|
@badges = data[:badges]
|
|
@updated_at = data[:updated_at]
|
|
end
|
|
|
|
private
|
|
|
|
def set_locale_to_default
|
|
I18n.locale = I18n.default_locale
|
|
end
|
|
|
|
|
|
def verify_access_token
|
|
unless request.headers["Authorization"] == "Bearer #{ACCESS_TOKEN}"
|
|
render json: { error: "Unauthorized" }, status: :unauthorized
|
|
end
|
|
end
|
|
|
|
def set_cors_headers
|
|
response.headers["Access-Control-Allow-Origin"] = "*"
|
|
end
|
|
end
|