using Gameboard.ShogiUI.Sockets.Models; using Gameboard.ShogiUI.Sockets.ServiceModels.Socket.Types; namespace Gameboard.ShogiUI.Sockets.Repositories.CouchModels { public class Move { /// /// A board coordinate, like A3 or G6. When null, look for PieceFromHand to exist. /// public string? From { get; set; } public bool IsPromotion { get; set; } /// /// The piece placed from the player's hand. /// public WhichPiece? PieceFromHand { get; set; } /// /// A board coordinate, like A3 or G6. /// public string To { get; set; } /// /// Default constructor and setters are for deserialization. /// public Move() { To = string.Empty; } public Move(Models.Move move) { From = move.From?.ToBoardNotation(); IsPromotion = move.IsPromotion; To = move.To.ToBoardNotation(); PieceFromHand = move.PieceFromHand; } public Models.Move ToDomainModel() => PieceFromHand.HasValue ? new((ServiceModels.Socket.Types.WhichPiece)PieceFromHand, Coords.FromBoardNotation(To)) : new(Coords.FromBoardNotation(From!), Coords.FromBoardNotation(To), IsPromotion); } }