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")); }
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)); }