public async Task <ResponseContract <ResgateViewModel> > MakeRedemptionAsync(ResgateViewModel request) { var response = new ResponseContract <ResgateViewModel>(); response.SetContent(request); try { var product = await _produtoCampanhaRepository.FindByAsync(request.ProdutoCampanhaId, request.CampanhaProdutoId, request.ProdutoId, _user.GetCampaignId(), _user.GetWallet()); if (product == null || product.CampanhaProduto == null) { response.AddError(Resources.ProductInvalid); return(response); } if (product.CampanhaProduto.Campanha == null || product.CampanhaProduto.Campanha.DesabilitaResgate.GetValueOrDefault()) { response.AddError(Resources.CampaignInvalid); return(response); } if (await _usuarioPremioRepository.HasPrizeAsync(_user.GetUserId())) { response.AddError(Resources.UserAlreadyRedemption); return(response); } _usuarioPremioRepository.BeginTransaction(); var usuarioPremio = new UsuarioPremio(_user.GetUserId(), request.CampanhaProdutoId, Enum.UsuarioPremioStatus.AGUARDANDO_PROCESSAMENTO.GetHashCode(), DateTime.Now); usuarioPremio = await _usuarioPremioRepository.InsertAsync(usuarioPremio); _usuarioPremioRepository.Commit(); response.SetValid(); _logger.LogWarning($"[UsuarioId: {_user.GetUserId()}] [CPF: {_user.GetUserDocument()}] realizou o resgate - [CampanhaProduto: {request.CampanhaProdutoId}] [Produto: {request.ProdutoId}] ."); await _authService.RefreshClaims(); } catch (Exception ex) { _logger.LogError(ex.Message, ex); _usuarioPremioRepository.Rollback(); response.AddError(Resources.ErrorOnMakeWish); } return(response); }
public async Task <bool> CanRedemption() { return(!await _usuarioPremioRepository .HasPrizeAsync(_user.GetUserId()) && await _usuarioStatusRepository.CanPrizeAsync(_user.GetUserId())); }