38 lines
1.2 KiB
Ruby
38 lines
1.2 KiB
Ruby
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
|