Arie/serveme

View on GitHub
app/controllers/pages_controller.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

class PagesController < ApplicationController
  skip_before_action :authenticate_user!, except: %i[recent_reservations statistics]
  skip_before_action :redirect_if_country_banned, only: %i[no_to_war welcome no_vatnik]
  before_action :require_admin_or_streamer, only: :recent_reservations

  def welcome
    return unless current_user

    @users_reservations = current_user.reservations.includes(user: :groups, server: :location).ordered.first(5)
    @users_games        = Reservation.played_in(current_user.uid).includes(user: :groups, server: :location).limit(5)
  end

  def credits; end

  def recent_reservations
    @recent_reservations = Reservation.order('starts_at DESC').includes(user: :groups, server: :location).paginate(page: params[:page], per_page: 50)
  end

  def statistics
    @top_10_users_hash   = Statistic.top_10_users
    @top_10_servers_hash = Statistic.top_10_servers
  end

  def stats
    servers_count = Server.active.count
    servers_for_non_premium_count = Server.active.without_group.count
    servers_for_premium_count = Server.for_donators.active.count
    current_reservations_count = Reservation.current.count
    servers_for_non_premium_in_use = Reservation.current.where(server_id: Server.without_group).count
    servers_for_premium_in_use = Reservation.current.where(server_id: Server.for_donators).count
    current_players_count = PlayerStatistic.joins(:reservation_player).where('created_at > ?', 90.seconds.ago).pluck('reservation_players.steam_uid').uniq.count

    render json: {
      current_reservations: current_reservations_count,
      current_players: current_players_count,
      servers: servers_count,
      servers_for_premium: servers_for_premium_count,
      servers_for_non_premium: servers_for_non_premium_count,
      servers_for_premium_in_use: servers_for_premium_in_use,
      servers_for_non_premium_in_use: servers_for_non_premium_in_use
    }
  end

  def server_providers; end

  def faq; end

  def private_servers; end

  def no_vatnik
    cookies.permanent[:not_a_vatnik] = (params[:not_a_vatnik] == 'true')
    redirect_to root_path
  end

  def not_found
    render 'not_found', status: 404, formats: :html
  end

  def error
    Sentry.capture_exception(request.env['action_dispatch.exception']) if Rails.env.production? && request.env['action_dispatch.exception']
    render 'error', status: 500, formats: :html
  end
end