Skip to content

Commit 65e679e

Browse files
committed
fix: solve lobby serializer issue
1 parent ec93e67 commit 65e679e

2 files changed

Lines changed: 36 additions & 30 deletions

File tree

Lines changed: 30 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
# frozen_string_literal: true
2+
3+
# Serializes ScrimRequest records for API responses, including org summaries.
14
class ScrimRequestSerializer < Blueprinter::Base
25
identifier :id
36

@@ -24,9 +27,9 @@ class ScrimRequestSerializer < Blueprinter::Base
2427

2528
class << self
2629
TIER_SCORE = {
27-
'CHALLENGER' => 9, 'GRANDMASTER' => 8, 'MASTER' => 7,
28-
'DIAMOND' => 6, 'EMERALD' => 5, 'PLATINUM' => 4,
29-
'GOLD' => 3, 'SILVER' => 2, 'BRONZE' => 1
30+
'CHALLENGER' => 9, 'GRANDMASTER' => 8, 'MASTER' => 7,
31+
'DIAMOND' => 6, 'EMERALD' => 5, 'PLATINUM' => 4,
32+
'GOLD' => 3, 'SILVER' => 2, 'BRONZE' => 1
3033
}.freeze
3134

3235
TIER_LABEL = {
@@ -35,33 +38,36 @@ class << self
3538
3 => 'Gold', 2 => 'Silver', 1 => 'Bronze', 0 => 'Iron'
3639
}.freeze
3740

38-
def serialize_org(org)
41+
def serialize_org(org) # rubocop:disable Metrics/MethodLength
3942
players = org.players.active.select(:summoner_name, :role, :solo_queue_tier)
40-
41-
scores = players.map { |p| TIER_SCORE[p.solo_queue_tier.to_s.upcase] || 0 }
42-
avg_score = scores.empty? ? 0 : (scores.sum.to_f / scores.size).round
43-
avg_tier = TIER_LABEL[avg_score] || 'Iron'
43+
avg_tier = compute_avg_tier(players)
4444

4545
{
46-
id: org.id,
47-
name: org.name,
48-
slug: org.slug,
49-
region: org.region,
50-
tier: org.tier,
46+
id: org.id,
47+
name: org.name,
48+
slug: org.slug,
49+
region: org.region,
50+
tier: org.tier,
5151
public_tagline: org.public_tagline,
5252
discord_server: org.discord_invite_url,
53-
scrims_won: org.scrims_won || 0,
54-
scrims_lost: org.scrims_lost || 0,
55-
total_scrims: org.total_scrims || 0,
56-
avg_tier: avg_tier,
57-
roster: players.map do |p|
58-
{
59-
summoner_name: p.summoner_name,
60-
role: p.role,
61-
tier: p.solo_queue_tier
62-
}
63-
end
53+
scrims_won: 0,
54+
scrims_lost: 0,
55+
total_scrims: 0,
56+
avg_tier: avg_tier,
57+
roster: serialize_roster(players)
6458
}
6559
end
60+
61+
private
62+
63+
def compute_avg_tier(players)
64+
scores = players.map { |p| TIER_SCORE[p.solo_queue_tier.to_s.upcase] || 0 }
65+
avg_score = scores.empty? ? 0 : (scores.sum.to_f / scores.size).round
66+
TIER_LABEL[avg_score] || 'Iron'
67+
end
68+
69+
def serialize_roster(players)
70+
players.map { |p| { summoner_name: p.summoner_name, role: p.role, tier: p.solo_queue_tier } }
71+
end
6672
end
6773
end

app/modules/scrims/controllers/lobby_controller.rb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@ class LobbyController < Api::V1::BaseController
1616
# Public feed of open scrims — no auth required
1717
def index
1818
scrims = Scrim.unscoped
19-
.joins(:organization)
20-
.where(visibility: 'public')
21-
.where('organizations.is_public = ?', true)
19+
.eager_load(:organization)
20+
.includes(:opponent_team)
21+
.where(scrims: { visibility: 'public' })
22+
.where(organizations: { is_public: true })
2223
.where('scrims.scheduled_at >= ?', Time.current)
23-
.includes(:organization, :opponent_team)
24-
.order(scheduled_at: :asc)
24+
.order('scrims.scheduled_at ASC')
2525

2626
scrims = scrims.where(game: params[:game]) if params[:game].present? && ALLOWED_GAMES.include?(params[:game])
2727

@@ -49,7 +49,7 @@ def filter_by_tier(scrims, tier)
4949
when 'semi_pro' then %w[semi_pro]
5050
else %w[free amateur]
5151
end
52-
scrims.joins(:organization).where(organizations: { subscription_plan: tier_plans })
52+
scrims.where(organizations: { subscription_plan: tier_plans })
5353
end
5454

5555
def serialize_lobby_scrim(scrim)

0 commit comments

Comments
 (0)