Files
kondiplo_front/app/controllers/participants_controller.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

88 lines
2.3 KiB
Ruby

class ParticipantsController < ApplicationController
before_action :set_game
# POST /games/:game_id/participants
def create
# パスワード確認
if @game.password_protected?
unless @game.authenticate_password(params[:password])
redirect_to @game, alert: "パスワードが正しくありません"
return
end
end
# 参加処理
@participant = @game.participants.build(
user: current_user,
is_administrator: false
)
if @participant.save
# 定員到達チェック
if @game.participants.count == @game.participants_count
@game.update(status: "power_selection")
end
redirect_to @game, notice: "ゲームに参加しました"
else
redirect_to @game, alert: @participant.errors.full_messages.join(", ")
end
end
# PATCH /games/:game_id/participants/:id/select_power
def select_power
@participant = @game.participants.find(params[:id])
unless @participant.user == current_user
redirect_to @game, alert: "権限がありません"
return
end
if @participant.update(power: params[:power])
# 全員が国を選択したかチェック
if @game.all_powers_assigned?
service = GameSetupService.new(@game)
result = service.setup_initial_turn
if result[:success]
@game.update(status: "in_progress")
flash[:notice] = "国を選択し、ゲームが開始されました!"
else
flash[:alert] = "ゲーム開始に失敗しました: #{result[:message]}"
end
else
flash[:notice] = "国を選択しました"
end
redirect_to @game
else
redirect_to @game, alert: @participant.errors.full_messages.join(", ")
end
end
# DELETE /games/:game_id/participants/:id
def destroy
@participant = @game.participants.find(params[:id])
unless @participant.user == current_user || current_user&.admin?
redirect_to @game, alert: "権限がありません"
return
end
@participant.destroy
# ゲーム状態を更新
if @game.status == "power_selection"
@game.update(status: "recruiting")
end
redirect_to games_path, notice: "ゲームから退出しました"
end
private
def set_game
@game = Game.find(params[:game_id])
end
end