public dynamic ViewCards(string gameId, string from, string count) { var gameRequest = new ViewCardsRequest { GameId = gameId, PlayerId = UserId, From = (ViewFrom)Enum.Parse(typeof(ViewFrom), from), Count = string.IsNullOrEmpty(count) ? 0 : int.Parse(count) }; var result = Network.MakePostRequest <List <CardLink> >("cards/viewCards", gameRequest); var cards = result.Data.Result.Select(c => new CardDto(c)).ToList(); var failed = result.StatusCode != HttpStatusCode.OK || result.Data.Failed; return(Json(new { Failed = failed, Error = failed ? result.Content : null, Data = cards })); }
public async Task <dynamic> ViewCards(ViewCardsRequest request) { Guid gameIdGuid; if (!Guid.TryParse(request.GameId, out gameIdGuid)) { return(InvalidGameId(request.GameId)); } var gameQuery = _context.Games .Where(g => g.Id == gameIdGuid) .Include(g => g.FirstPlayer) .Include(g => g.SecondPlayer); switch (request.From) { case ViewFrom.Graveyard: gameQuery = gameQuery.Include(g => g.Grave.Select(i => i.CardLink.Card.rulings)); break; case ViewFrom.Exile: gameQuery = gameQuery.Include(g => g.Exile.Select(i => i.CardLink.Card.rulings)); break; case ViewFrom.TopOfTheDeck: gameQuery = gameQuery.Include(g => g.Top.Select(i => i.CardLink.Card.rulings)); break; case ViewFrom.EnemyHand: break; } var game = await gameQuery.FirstOrDefaultAsync(); if (game == null) { return(GameNotFound(request.GameId)); } var player = await _context.Users.FirstOrDefaultAsync(u => u.Id == request.PlayerId); if (player == null) { return(PlayerNotFound(request.PlayerId)); } if (game.FirstPlayer != player && game.SecondPlayer != player) { return(PlayerNotInGame(request.PlayerId, request.GameId)); } List <CardLink> cardLinks = new List <CardLink>(); switch (request.From) { case ViewFrom.Graveyard: cardLinks = game.Grave.Select(g => g.CardLink).ToList(); break; case ViewFrom.Exile: cardLinks = game.Exile.Select(g => g.CardLink).ToList(); break; case ViewFrom.TopOfTheDeck: if (game.Top.Count < request.Count) { var delta = request.Count - game.Top.Count; var randomCards = await Utils.GetRandomCards(delta, _context); var randomCardLinks = new List <CardLink>(); //save links to DB foreach (var randomCard in randomCards) { var cardLink = new CardLink { Card = randomCard }; _context.CardLinks.Add(cardLink); await _context.SaveChangesAsync(); _context.SaveChanges(); randomCardLinks.Add(cardLink); } foreach (var top in game.Top) { top.Number += delta; } for (int i = 0; i < delta; i++) { game.Top.Add(new Top { CardLink = randomCardLinks[i], Number = i + 1 }); } foreach (var t in game.Top) { _context.Tops.AddOrUpdate(t); } await _context.SaveChangesAsync(); } cardLinks = game.Top.OrderByDescending(t => t.Number).Take(request.Count).OrderBy(t => t.Number).Select(g => g.CardLink).ToList(); break; case ViewFrom.EnemyHand: break; } Utils.FillImages(cardLinks.Select(l => l.Card)); return(Json(new Response <List <CardLink> > { Result = cardLinks })); }