Значительно изменил бд и генерацию так же добавил роли

This commit is contained in:
2026-03-25 20:44:28 +05:00
parent 0aeffffa56
commit d16af289fe
14 changed files with 485 additions and 67 deletions

View File

@@ -4,13 +4,41 @@ require_relative "../config/app"
Hanami.app.prepare
repo = ClashDeckGenerator2::Repos::CardsRepo.new
cards = repo.all.select { |card| card.rarity == "common" }
roles_repo = ClashDeckGenerator2::Services::CardRolesRepository.new
raise "No common cards found in DB." if cards.empty?
raise "Not enough common cards to build a deck. Need at least 8, got #{cards.size}." if cards.size < 8
puts roles_repo.roles_for("Knight").inspect
puts roles_repo.roles_for("Hog Rider").inspect
puts roles_repo.has_role?("Hog Rider", "win_condition")
puts roles_repo.has_role?("Tesla", "win_condition")
puts roles_repo.meta.inspect
deck = cards.sample(8)
cards = repo.all
cards = cards.last if cards.is_a?(Array) && cards.first == :cards
rarity_counts = cards.group_by(&:rarity).transform_values(&:size)
puts "RARITY COUNTS:"
rarity_counts.each do |rarity, count|
puts "#{rarity}: #{count}"
end
puts "========================================"
puts "POOL DIAGNOSTICS"
puts "========================================"
puts "Total cards: #{cards.size}"
puts "Spells: #{cards.count { |c| c.type == 'spell' }}"
puts "Troops: #{cards.count { |c| c.type == 'troop' }}"
puts "Buildings: #{cards.count { |c| c.type == 'building' }}"
puts "Champions: #{cards.count { |c| c.rarity == 'champion' }}"
puts "Heroes: #{cards.count { |c| c.rarity == 'hero' }}"
puts "Evolutions: #{cards.count { |c| c.rarity == 'evolution' }}"
puts "Avg elixir all cards: #{(cards.sum(&:elixir_cost).to_f / cards.size).round(2)}"
puts "========================================"
generator = ClashDeckGenerator2::Services::DeckGenerator.new(cards_repo: repo)
deck = generator.call
deck = deck.last if deck.is_a?(Array) && deck.first == :cards
puts "========================================"
puts "DECK GENERATED SUCCESSFULLY"
@@ -28,4 +56,10 @@ puts "Unique cards count: #{names.uniq.size}"
avg_elixir = deck.sum(&:elixir_cost).to_f / deck.size
puts "Average elixir: #{avg_elixir.round(2)}"
puts "Spells count: #{deck.count { |c| c.type == 'spell' }}"
puts "Troops count: #{deck.count { |c| c.type == 'troop' }}"
puts "Buildings count: #{deck.count { |c| c.type == 'building' }}"
puts "Champions count: #{deck.count { |c| c.rarity == 'champion' }}"
puts "Heroes count: #{deck.count { |c| c.rarity == 'hero' }}"
puts "Evolutions count: #{deck.count { |c| c.rarity == 'evolution' }}"
puts "========================================"