1<?php ...
 2 
 3namespace Thunk\Verbs\Examples\Monopoly\Events\Setup;
 4 
 5use Thunk\Verbs\Attributes\Autodiscovery\AppliesToState;
 6use Thunk\Verbs\Event;
 7use Thunk\Verbs\Examples\Monopoly\Game\Bank;
 8use Thunk\Verbs\Examples\Monopoly\Game\Board;
 9use Thunk\Verbs\Examples\Monopoly\States\GameState; 
10 
11#[AppliesToState(GameState::class)]
12class GameStarted extends Event
13{
14    public function __construct(
15        public ?int $game_id = null,
16    ) {}
17 
18    public function validate(GameState $game)
19    {
20        $this->assert(! $game->started, 'The game has already started');
21    }
22 
23    public function applyToGame(GameState $game)
24    {
25        $game->started = true;
26        $game->started_at = now()->toImmutable();
27        $game->player_ids = [];
28        $game->board = new Board;
29        $game->bank = new Bank;
30    }
31}