public async Task <IServiceResult> BuyGameAsync([FromRoute] string id, [FromBody] LikeGameDTOs LikeGameDTOs) { try { // add game and user into user game table var userId = id.ToGuid(); var game = await _context.Games.SingleOrDefaultAsync(g => g.Id == LikeGameDTOs.Id); UserGame userGame = new UserGame() { GameId = LikeGameDTOs.Id, PurchaseDate = DateTime.Now, UserId = userId }; _context.UserGames.Add(userGame); // update money for publisher Publisher publisher = await _context.Publishers.SingleOrDefaultAsync(p => p.Id == game.PublisherId); publisher.Money += game.Price; // update money for user User user = await _context.Users.SingleOrDefaultAsync(p => p.Id == userId); user.Money -= game.Price; if (user.Money < 0) { return(new ServiceResult(false, message: "Your account don't enought money to buy this game")); } // save change if (!await _unitOfWork.CompleteAsync()) { throw new SaveFailedException(nameof(userGame)); } _logger.LogInformation($"User {userGame.UserId} bought game id: {userGame.GameId} ."); return(new ServiceResult(payload: userGame.GameId)); } catch (Exception e) { _logger.LogError($"Can't create a free code {LikeGameDTOs.Id}. {e.Message}"); return(new ServiceResult(false, message: e.Message)); } }
public async Task <IServiceResult> LikeGameAsync([FromRoute] string id, [FromBody] LikeGameDTOs LikeGameDTOs) { try { var userId = id.ToGuid(); WishGame wishGame = new WishGame() { GameId = LikeGameDTOs.Id, UserId = userId }; _context.WishGame.Add(wishGame); if (!await _unitOfWork.CompleteAsync()) { throw new SaveFailedException(nameof(wishGame)); } _logger.LogInformation($"User {wishGame.UserId} like game id: {wishGame.GameId} ."); return(new ServiceResult(payload: wishGame.GameId)); } catch (Exception e) { _logger.LogError($"Can't create a free code {LikeGameDTOs.Id}. {e.Message}"); return(new ServiceResult(false, message: e.Message)); } }