Exemple #1
0
        public async Task <IActionResult> RateGameAsync(RatedGame ratedGame)
        {
            var result = await _validationService.ValidateRateGameAsync(User, ratedGame);

            return(await SendResponseAsync(result,
                                           async() => await CreateOrUpdateRatingAsync(ratedGame)));
        }
        public async Task <bool> RateGameAsync(RatedGame ratedGame)
        {
            return(await TryAccessDatabase(async() =>
            {
                var rating = await _databaseService.FindRatingAsync(ratedGame.UserId, ratedGame.GameId);

                if (rating != null)
                {
                    await _databaseService.UpdateRatingAsync(rating, ratedGame.Rating);

                    return false;
                }

                await _databaseService.AddRatingAsync(ratedGame);

                return true;
            }));
        }
        public async Task <ActionResult> Rate(Game game, int id, ApplicationUser user)
        {
            var gameInDb = _context.Games.Single(c => c.Id == id);
            var userId   = User.Identity.GetUserId();
            var userInDb = userManager.Users.Single(c => c.Id == userId);

            var rate = false;

            foreach (var rates in _context.RatedGames)
            {
                if (rates.ApplicationUserId == userId)
                {
                    if (rates.GameId == game.Id)
                    {
                        rate = true;
                    }
                }
            }

            if (!rate)
            {
                var rateValue = RateList.Find(x => x.Id == game.RatingId).RateValue;
                gameInDb.AllRates += rateValue;
                gameInDb.RatingsCount++;

                var ratedGame = new RatedGame();
                ratedGame.GameId            = gameInDb.Id;
                ratedGame.UsersRate         = rateValue;
                ratedGame.ApplicationUserId = userId;
                _context.RatedGames.Add(ratedGame);
                userInDb.GamesRatedCount++;

                await userManager.UpdateAsync(userInDb);

                var ctx = store.Context;
                ctx.SaveChanges();
                _context.SaveChanges();
            }
            return(RedirectToAction("Index", "Games"));
        }
Exemple #4
0
        public async Task AddRatingAsync(RatedGame ratedGame)
        {
            var user = await FindUserIdentifierAsync(ratedGame.UserId);

            var game = await FindGameIdentifierAsync(ratedGame.GameId);

            var createIdentifier = user == null || game == null;

            if (user == null)
            {
                user = new UserIdentifier {
                    SteamId = ratedGame.UserId
                };

                await _context.Users.AddAsync(user);
            }

            if (game == null)
            {
                game = new GameIdentifier {
                    SteamId = ratedGame.GameId
                };

                await _context.Games.AddAsync(game);
            }

            if (createIdentifier)
            {
                await _context.SaveChangesAsync();
            }

            var rating = new Rating {
                Game = game, User = user, Value = ratedGame.Rating
            };

            await _context.Ratings.AddAsync(rating);

            await _context.SaveChangesAsync();
        }
        public async Task <ValidationResult> ValidateRateGameAsync(ClaimsPrincipal user, RatedGame ratedGame)
        {
            if (!user.Identity.IsAuthenticated)
            {
                return(new ValidationResult(ValidationStatus.Unauthorized, ValidationError.Unauthorized));
            }

            if (ratedGame.UserId != SteamUtils.GetUserIdFromClaim(user))
            {
                return(new ValidationResult(ValidationStatus.Failed, ValidationError.WrongUserId));
            }

            if (ratedGame.Rating < 1 || ratedGame.Rating > 5)
            {
                return(new ValidationResult(
                           ValidationStatus.Failed,
                           string.Format(ValidationError.InvalidRatingPattern, ratedGame.Rating)));
            }

            bool hasGame;

            try
            {
                hasGame = await _gameService.UserHasGameAsync(ratedGame.UserId, ratedGame.GameId);
            }
            catch (Exception e) when(
                e is LibraryUnavailableException ||
                e is ApiUnavailableException)
            {
                return(new ValidationResult(
                           ValidationStatus.Aborted,
                           string.Format(ValidationError.UserHasGameAbortedPattern, e.Message)));
            }

            if (!hasGame)
            {
                return(new ValidationResult(
                           ValidationStatus.Failed,
                           string.Format(ValidationError.UserDoesNotHaveGamePattern, ratedGame.GameId)));
            }

            return(new ValidationResult(ValidationStatus.Ok));
        }