-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathGameProcessUsecase.php
48 lines (41 loc) · 1.32 KB
/
GameProcessUsecase.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
namespace Packages\UseCases\Game;
use Packages\Models\GameOrganizer\Game;
use Packages\Models\Othello\Board\Position\Position;
use Packages\Repositories\Game\GameRepositoryInterface;
class GameProcessUsecase
{
private GameRepositoryInterface $gameRepository;
public function __construct(GameRepositoryInterface $gameRepository)
{
$this->gameRepository = $gameRepository;
}
/**
* @param $gameId
* @param $playerMove
* @return array{success: bool, data: Game, message: string}
*/
public function handle($gameId, $playerMove): array
{
$game = $this->gameRepository->findById($gameId);
try {
// TODO: moveとpositionの定義が曖昧なので整理
$movedPosition = !empty($playerMove) ? Position::make($playerMove) : null;
$processedGame = $game->process($movedPosition);
// 保存
$this->gameRepository->save($processedGame);
// TODO: DTO導入
return [
'success' => true,
'data' => $processedGame,
'message' => '',
];
} catch (\Exception $e) {
return [
'success' => false,
'data' => $game,
'message' => $e->getMessage(),
];
}
}
}