public UserHandDto GetUserCards(UserCardViewModel userCardVm) { var cardsInHand = new UserHandDto(); var whiteCards = GetWhiteCards(userCardVm.userId, userCardVm.gameId); if (whiteCards.Any()) { cardsInHand.whiteCards = whiteCards; cardsInHand.blackCard = GetBlackCard(userCardVm.gameId); return(cardsInHand); } var takenCards = GetTakenCards(userCardVm.gameId) .IgnoreQueryFilters() .Select(userCard => userCard.CardId) .ToList(); cardsInHand.whiteCards = GetNewWhiteCards(takenCards, userCardVm.gameId, userCardVm.userId); if (IsUserTurn(userCardVm.userId, userCardVm.gameId)) { cardsInHand.blackCard = GetNewBlackCard(userCardVm, takenCards); } else { cardsInHand.blackCard = GetBlackCard(userCardVm.gameId); } return(cardsInHand); }
public UserHandDto SetupNextRound(UserCardViewModel userCardVm) { var nextRoundBlackCard = new UserHandDto(); var result = SoftDeleteUserCards(userCardVm); if (result < 0) { return(nextRoundBlackCard); } var gameUsers = _context.GameUsers.Where(gUser => gUser.GameId == userCardVm.gameId) .Include(gUser => gUser.User) .OrderBy(gUser => gUser.User.Email) .ToList(); var turnIdx = gameUsers.FindIndex(gUser => gUser.IsTurn); gameUsers[turnIdx].IsTurn = false; _context.SaveChanges(); turnIdx = turnIdx == gameUsers.Count() - 1 ? 0 : ++turnIdx; gameUsers[turnIdx].IsTurn = true; _context.SaveChanges(); userCardVm.userId = gameUsers[turnIdx].UserId; var takenBlackCards = GetTakenCards(userCardVm.gameId) .IgnoreQueryFilters() .Include(uCard => uCard.Card) .Where(uCard => uCard.Card.TypeId == GetBlackType().Id) .Select(userCard => userCard.CardId) .ToList(); nextRoundBlackCard.blackCard = GetNewBlackCard(userCardVm, takenBlackCards); return(nextRoundBlackCard); }