フロントエンドプレイアブル
This commit is contained in:
87
app/controllers/participants_controller.rb
Normal file
87
app/controllers/participants_controller.rb
Normal file
@@ -0,0 +1,87 @@
|
||||
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
|
||||
Reference in New Issue
Block a user