public async Task <IActionResult> PurchaseGame([FromBody] PurchaseRoyaleGameRequest request) { var currentUser = await _userManager.FindByNameAsync(User.Identity.Name); if (currentUser is null) { return(BadRequest()); } Maybe <RoyalePublisher> publisher = await _royaleService.GetPublisher(request.PublisherID); if (publisher.HasNoValue) { return(NotFound()); } if (!publisher.Value.User.Equals(currentUser)) { return(Forbid()); } var masterGame = await _interLeagueService.GetMasterGameYear(request.MasterGameID, publisher.Value.YearQuarter.YearQuarter.Year); if (masterGame.HasNoValue) { return(NotFound()); } var purchaseResult = await _royaleService.PurchaseGame(publisher.Value, masterGame.Value); var viewModel = new PlayerClaimResultViewModel(purchaseResult); return(Ok(viewModel)); }
public async Task <IActionResult> PurchaseGame([FromBody] PurchaseRoyaleGameRequest request) { var currentUserResult = await GetCurrentUser(); if (currentUserResult.IsFailure) { return(BadRequest(currentUserResult.Error)); } var currentUser = currentUserResult.Value; RoyalePublisher?publisher = await _royaleService.GetPublisher(request.PublisherID); if (publisher is null) { return(NotFound()); } if (!publisher.User.Equals(currentUser)) { return(Forbid()); } var masterGame = await _interLeagueService.GetMasterGameYear(request.MasterGameID, publisher.YearQuarter.YearQuarter.Year); if (masterGame is null) { return(NotFound()); } await _royaleSemaphore.WaitAsync(); try { var purchaseResult = await _royaleService.PurchaseGame(publisher, masterGame); var viewModel = new PlayerClaimResultViewModel(purchaseResult); return(Ok(viewModel)); } finally { _royaleSemaphore.Release(1); } }