예제 #1
0
        public async Task <object> MoveSoldierAsync(Guid id, MoveSoldierModel model, string userId)
        {
            var game = await Repository.GetByIdAsync(id.ToString());

            if (game == null)
            {
                throw new KeyNotFoundException("Game not found");
            }
            var moveSoldierEvent = new MoveSoldierEvent(
                new Guid(model.CastleId),
                model.Soldiers,
                userId,
                DateTime.UtcNow, DateTime.UtcNow);

            _domain.AddEvent(id, moveSoldierEvent);
            return(moveSoldierEvent.Id.ToString());
        }
예제 #2
0
        public async Task <IHttpActionResult> MoveSoldier(string id, MoveSoldierModel model)
        {
            var game = await _gameService.Build(new Guid(id), User.Identity.GetUserId(), -1);

            if (game == null || game.HasError)
            {
                return(NotFound());
            }
            var castle = game.Castles?.FirstOrDefault(e => e.Id == model.CastleId);

            if (castle == null)
            {
                return(NotFound());
            }
            var userId = User.Identity.GetUserId();

            if (castle.OwnerUserId != userId)
            {
                return(BadRequest("You don't have permission to performance this action on the castle"));
            }

            model.Soldiers = (game.UserId == userId ? game.UserSoldiers : game.OpponentSoldiers)?.Select(e => e.Id).ToList() ?? new List <string>();
            return(Ok(await _gameService.MoveSoldierAsync(game.Id, model, User.Identity.GetUserId())));
        }
예제 #3
0
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='id'>
 /// </param>
 /// <param name='model'>
 /// </param>
 /// <param name='cancellationToken'>
 /// The cancellation token.
 /// </param>
 public static async Task <string> MoveSoldierAsync(this IGame operations, string id, MoveSoldierModel model, CancellationToken cancellationToken = default(CancellationToken))
 {
     using (var _result = await operations.MoveSoldierWithHttpMessagesAsync(id, model, null, cancellationToken).ConfigureAwait(false))
     {
         return(_result.Body);
     }
 }
예제 #4
0
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='id'>
 /// </param>
 /// <param name='model'>
 /// </param>
 public static string MoveSoldier(this IGame operations, string id, MoveSoldierModel model)
 {
     return(operations.MoveSoldierAsync(id, model).GetAwaiter().GetResult());
 }