checkpoint

This commit is contained in:
2024-11-16 12:37:56 -06:00
parent 13e79eb490
commit 460dfd608e
10 changed files with 139 additions and 49 deletions

View File

@@ -129,4 +129,38 @@ public class ShogiApplication(
return userManager.Users.FirstOrDefault(u => u.Id == userId)?.UserName!;
}
public async Task<IActionResult> ReadSessionSnapshots(string sessionId)
{
var session = this.ReadSession(sessionId);
if (session == null)
{
return new NotFoundResult();
}
var snapshots = await queryRepository.ReadSessionSnapshots(sessionId);
var boardStates = snapshots.Select(snap => new Contracts.Types.BoardState
{
Board = snap.Board.ToDictionary(
kvp => kvp.Key,
kvp => kvp.Value == null
? null
: new Contracts.Types.Piece
{
IsPromoted = kvp.Value.IsPromoted,
Owner = (Contracts.Types.WhichPlayer)kvp.Value.Owner,
WhichPiece = (Contracts.Types.WhichPiece)kvp.Value.WhichPiece,
}),
Player1Hand = snap.Player1Hand.Cast<Contracts.Types.WhichPiece>().ToArray(),
Player2Hand = snap.Player2Hand.Cast<Contracts.Types.WhichPiece>().ToArray(),
PlayerInCheck = snap.PlayerInCheck == null ? null : (Contracts.Types.WhichPlayer)snap.PlayerInCheck,
Victor = snap.IsGameOver
? snap.PlayerInCheck == Repositories.Dto.SessionState.WhichPlayer.Player1 ? Contracts.Types.WhichPlayer.Player2 : Contracts.Types.WhichPlayer.Player1
: null,
WhoseTurn = (Contracts.Types.WhichPlayer)snap.WhoseTurn,
});
return new OkObjectResult(boardStates.ToArray());
}
}