フロントエンドプレイアブル
This commit is contained in:
37
app/services/game_setup_service.rb
Normal file
37
app/services/game_setup_service.rb
Normal file
@@ -0,0 +1,37 @@
|
||||
class GameSetupService
|
||||
def initialize(game, client: GameApiClient.new)
|
||||
@game = game
|
||||
@client = client
|
||||
end
|
||||
|
||||
def setup_initial_turn
|
||||
initial_response = @client.api_game_initial_state
|
||||
|
||||
unless initial_response && initial_response["game_state"]
|
||||
return { success: false, message: "初期状態の取得に失敗しました。" }
|
||||
end
|
||||
|
||||
initial_state = initial_response["game_state"]
|
||||
svg_render = @client.api_render(initial_state)
|
||||
possible_orders = @client.api_calculate_possible_orders(initial_state, by_power: true)
|
||||
|
||||
@game.turns.build(
|
||||
number: 1,
|
||||
game_state: initial_state,
|
||||
possible_orders: possible_orders,
|
||||
phase: initial_state&.dig("name"),
|
||||
svg_date: svg_render,
|
||||
# Initialize svg_orders with NONE (and standard rendering as default)
|
||||
svg_orders: { "NONE" => svg_render }
|
||||
)
|
||||
|
||||
if @game.save
|
||||
{ success: true, message: "ゲームが初期化されました。" }
|
||||
else
|
||||
{ success: false, message: "初期ターンの作成に失敗しました: #{@game.errors.full_messages.join(', ')}" }
|
||||
end
|
||||
rescue StandardError => e
|
||||
Rails.logger.error("Game setup failed: #{e.message}")
|
||||
{ success: false, message: "予期せぬエラーが発生しました。" }
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user