public async Task <ShipPart> SaveAsync() { var shipPart = _context.ShipParts.Add(_shipPart); await _context.SaveChangesAsync(CancellationToken.None); return(shipPart.Entity); }
public async Task <Game> SaveAsync() { var game = _context.Games.Add(_game); await _context.SaveChangesAsync(CancellationToken.None); return(game.Entity); }
public async Task <Board> SaveAsync() { var board = _context.Boards.Add(_board); await _context.SaveChangesAsync(CancellationToken.None); return(board.Entity); }
public async Task <Player> SaveAsync() { var player = _context.Players.Add(_player); await _context.SaveChangesAsync(CancellationToken.None); return(player.Entity); }
public async Task <Model> Handle(Command request, CancellationToken cancellationToken) { var attacker = await _context.Players.FindAsync(request.AttackerPlayerId); if (attacker == null) { throw new NotFoundException(nameof(Player), request.AttackerPlayerId); } var lastAttack = await _context.Shots .OrderByDescending(x => x.ShotId) .FirstOrDefaultAsync(); if (lastAttack?.Player == attacker) { throw new OutOfTurnException(attacker.Name); } var board = await _context.Boards.FindAsync(request.BoardId); if (board == null) { throw new NotFoundException(nameof(Board), request.BoardId); } // TODO: Ensure the attacker is attacking opponent board in the current game. // Check hit or miss var part = await _context.ShipParts .Where(x => x.Ship.Board == board) .Where(x => x.X == request.AttackX && x.Y == request.AttackY) .FirstOrDefaultAsync(); var viewModel = new Model(); if (part != null) { part.Hit = true; viewModel = _mapper.Map <Model>(part); } // Record shot. var shot = new Shot { Player = attacker, Board = board, AttackX = request.AttackX, AttackY = request.AttackY, Hit = part?.Hit ?? false, ShipPartHit = part }; await _context.Shots.AddAsync(shot); await _context.SaveChangesAsync(cancellationToken); return(viewModel); }
public async Task <Model> Handle(Command request, CancellationToken cancellationToken) { var player = await _context.Players.FindAsync(request.PlayerId); if (player == null) { throw new NotFoundException(nameof(Player), request.PlayerId); } var entity = new Board { Player = player, DimensionX = request.DimensionX, DimensionY = request.DimensionY, }; _context.Boards.Add(entity); await _context.SaveChangesAsync(cancellationToken); var model = _mapper.Map <Model>(entity); return(model); }