Files
kondiplo_front/app/models/game_participant.rb
kontei f25fd6f802
Some checks failed
CI / scan_ruby (push) Has been cancelled
CI / scan_js (push) Has been cancelled
CI / lint (push) Has been cancelled
CI / test (push) Has been cancelled
CI / system-test (push) Has been cancelled
フロントエンドプレイアブル
2026-02-15 14:57:17 +09:00

53 lines
1.2 KiB
Ruby

class GameParticipant < ApplicationRecord
belongs_to :game
belongs_to :user
validates :status, inclusion: { in: %w[joined ready finished] }
validates :user_id, uniqueness: { scope: :game_id }
validates :power, uniqueness: { scope: :game_id }, allow_nil: true
# ステータス管理メソッド
def joined?
status == 'joined'
end
def ready?
status == 'ready'
end
def finished?
status == 'finished'
end
# パワー選択関連
def has_selected_power?
power.present?
end
def select_power!(power_name)
update!(power: power_name, status: 'ready')
end
# ゲーム参加メソッド
class << self
def join_game!(game, user, password = nil)
# パスワードチェック(プレイヤーモードの場合)
if game.player_mode? && game.password.present?
raise "Invalid password" unless game.password == password
end
# 既存参加チェック
if game.game_participants.exists?(user_id: user.id)
raise "Already joined this game"
end
# 定員チェック
if game.player_mode? && game.full?
raise "Game is full"
end
create!(game: game, user: user, joined_at: Time.current, status: 'joined')
end
end
end