3cb-data

Unnamed repository; edit this file 'description' to name the repository.
git clone git://git.alexwennerberg.com/3cb-data.git
Log | Files | Refs | README | LICENSE

commit 9f3bdbfb0812ac6cb32c5f4aea3e12828c710a7d
parent d5ed5a9e86e8a23554044f1d49907cac9609ca9a
Author: alex wennerberg <alex@alexwennerberg.com>
Date:   Sat,  4 Oct 2025 15:42:55 -0400

Revert "vibe coding"

This reverts commit d5ed5a9e86e8a23554044f1d49907cac9609ca9a.

Diffstat:
Mmain.rb | 54++----------------------------------------------------
Mviews/round.erb | 179++++++++-----------------------------------------------------------------------
2 files changed, 19 insertions(+), 214 deletions(-)

diff --git a/main.rb b/main.rb @@ -15,60 +15,10 @@ end get '/round/:id' do |id| @round = db.execute("select * from round where id = ?", id)[0] - - # Get deck data for all players in this round - @player_decks = {} - deck_data = db.execute("SELECT player, card1, card2, card3 FROM deck WHERE round = ?", [id]) - deck_data.each do |deck| - @player_decks[deck["player"]] = [deck["card1"], deck["card2"], deck["card3"]] - end - - # Get group matches organized by group - @group_matches = {} - groups = db.execute("SELECT DISTINCT group_name FROM match WHERE round = ? AND group_name != 'final' AND group_name IS NOT NULL ORDER BY group_name", [id]) - - groups.each do |group| - group_name = group["group_name"] - players = db.execute("SELECT DISTINCT player FROM match WHERE round = ? AND group_name = ? ORDER BY player", [id, group_name]) - matches_data = db.execute("SELECT player, opp_player, score FROM match WHERE round = ? AND group_name = ?", [id, group_name]) - - # Create grid structure - match_grid = {} - matches_data.each do |match| - player = match["player"] - opp = match["opp_player"] - score = match["score"] - match_grid[player] ||= {} - match_grid[player][opp] = score - end - - @group_matches[group_name] = { - 'players' => players.map { |p| p["player"] }, - 'matches' => match_grid - } - end - - # Get finals matches - finals_players = db.execute("SELECT DISTINCT player FROM match WHERE round = ? AND group_name = 'final' ORDER BY player", [id]) - @finals_matches = {} - @finals_players = [] - - if finals_players.length > 0 - @finals_players = finals_players.map { |p| p["player"] } - finals_data = db.execute("SELECT player, opp_player, score FROM match WHERE round = ? AND group_name = 'final'", [id]) - - finals_data.each do |match| - player = match["player"] - opp = match["opp_player"] - score = match["score"] - @finals_matches[player] ||= {} - @finals_matches[player][opp] = score - end - end - + @matches = db.execute "select * from round_score where round = ? order by final_score desc,prelim_score desc", id @banned_cards = db.execute("select name from ban").map { |row| row["name"] } @subtitle = "round " + id - erb :round + erb :matches end get '/card' do diff --git a/views/round.erb b/views/round.erb @@ -1,165 +1,21 @@ <%= erb :header %> -<% if @round %> -<a href='https://docs.google.com/spreadsheets/d/<%= @round["fileid"] %>/'>Google Sheet</a><% end %> - -<style> -.match-grid { - margin-bottom: 30px; -} -.match-grid h2 { - margin-bottom: 10px; -} -.grid-table { - border-collapse: collapse; - margin-bottom: 20px; -} -.grid-table th, .grid-table td { - border: 1px solid #ccc; - padding: 8px; - text-align: center; - min-width: 80px; -} -.grid-table .opponent-header, -.grid-table .score-cell:not(:last-child) { - width: 80px; - max-width: 80px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.grid-table th { - background-color: #f0f0f0; - font-weight: bold; -} -.grid-table .player-name { - background-color: #f8f8f8; - font-weight: bold; - text-align: left; - min-width: 120px; -} -.grid-table .diagonal { - background-color: #e0e0e0; -} -.score-cell { - font-weight: bold; -} -.score-0 { color: #ff0000; } -.score-low { color: #ff6600; } -.score-high { color: #0066ff; } -.score-very-high { color: #00aa00; } -</style> - -<% if @group_matches && @group_matches.length > 0 %> -<h1>Group Stage</h1> -<% @group_matches.each do |group_name, group_data| %> -<div class="match-grid"> - <h2>Group <%= group_name %></h2> - <table class="grid-table"> - <thead> - <tr> - <th>vs</th> - <th>Cards</th> - <% group_data['players'].each do |opponent| %> - <th class="opponent-header"><%= opponent %></th> - <% end %> - <th>Total</th> - </tr> - </thead> - <tbody> - <% group_data['players'].each do |player| %> - <tr> - <td class="player-name"> - <a href="/player?name=<%= url_encode(player) %>"><%= player %></a> - </td> - <td class="hover_img"> - <% if @player_decks[player] %> - <% @player_decks[player].each do |card| %> - <a href="/card?name=<%= url_encode(card) %>"><%= card %><span><img src="https://api.scryfall.com/cards/named?exact=<%= url_encode(card) %>&format=image&version=small" alt="<%= card %>" /></span></a><% unless card == @player_decks[player].last %>, <% end %> - <% end %> - <% end %> - </td> - <% player_total = 0 %> - <% group_data['players'].each do |opponent| %> - <% if player == opponent %> - <td class="diagonal">-</td> - <% else %> - <% score = group_data['matches'][player] && group_data['matches'][player][opponent] ? group_data['matches'][player][opponent] : 0 %> - <% player_total += score %> - <% score_class = case score - when 0 then 'score-0' - when 1..2 then 'score-low' - when 3..5 then 'score-high' - else 'score-very-high' - end %> - <td class="score-cell <%= score_class %>"> - <%= score %> - </td> - <% end %> - <% end %> - <td class="score-cell"><strong><%= player_total %></strong></td> - </tr> - <% end %> - </tbody> - </table> + <% if @round %> + <a href='https://docs.google.com/spreadsheets/d/<%= @round["fileid"] %>/'>Google Sheet</a><% end %> +<div class="flextable"> + <% @matches.each do |match| %> + <div class="deck-box" + <% if match["final_score"] %> style="background:#ffffc5"<% end %>> + <div style="width:160px"> + <b><a href='/player/<%= match["player"] %>'><%= match["player"] %></a></b><br> + <a href="/round/<%= match["round"]%>"><%= match["round"] %></a> + <a href="/deck?card=<%= match["card1"] %>&card=<%= match["card2"] %>card= <%= match["card3"]%>>deck</a><br> + Group <%= match["prelim_group"] %>: <%=match["prelim_score"]%><br> + <% if match["final_score"] %>Finals: &nbsp;<%= match["final_score"] %><% end %> +</div> +<div> + <% [match["card1"], match["card2"], match["card3"]].each do |card| %><img alt='<%= card %>' width=146height=204px loading=lazy src="https://api.scryfall.com/cards/named?exact=<%= card %>&format=image&version=small" /><% end %> </div> -<% end %> -<% end %> - -<% if @finals_matches && @finals_players.length > 0 %> -<div class="match-grid"> - <h1>Finals</h1> - <table class="grid-table"> - <thead> - <tr> - <th>vs</th> - <th>Cards</th> - <% @finals_players.each do |opponent| %> - <th class="opponent-header"><%= opponent %></th> - <% end %> - <th>Total</th> - </tr> - </thead> - <tbody> - <% @finals_players.each do |player| %> - <tr> - <td class="player-name"> - <a href="/player?name=<%= url_encode(player) %>"><%= player %></a> - </td> - <td class="hover_img"> - <% if @player_decks[player] %> - <% @player_decks[player].each do |card| %> - <a href="/card?name=<%= url_encode(card) %>"><%= card %><span><img src="https://api.scryfall.com/cards/named?exact=<%= url_encode(card) %>&format=image&version=small" alt="<%= card %>" /></span></a><% unless card == @player_decks[player].last %>, <% end %> - <% end %> - <% end %> - </td> - <% player_total = 0 %> - <% @finals_players.each do |opponent| %> - <% if player == opponent %> - <td class="diagonal">-</td> - <% else %> - <% score = @finals_matches[player] && @finals_matches[player][opponent] ? @finals_matches[player][opponent] : 0 %> - <% player_total += score %> - <% score_class = case score - when 0 then 'score-0' - when 1..2 then 'score-low' - when 3..5 then 'score-high' - else 'score-very-high' - end %> - <td class="score-cell <%= score_class %>"> - <%= score %> - </td> - <% end %> - <% end %> - <td class="score-cell"><strong><%= player_total %></strong></td> - </tr> - <% end %> - </tbody> - </table> </div> <% end %> - -<% if (!@group_matches || @group_matches.length == 0) && (!@finals_matches || @finals_players.length == 0) %> - <p>No matches found for this round.</p> -<% end %> - -<%= erb :footer %> -\ No newline at end of file +</div> +<%= erb :footer %>