示例#1
0
        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);
        }
示例#2
0
 public async Task <bool> CanRedemption()
 {
     return(!await _usuarioPremioRepository
            .HasPrizeAsync(_user.GetUserId()) && await _usuarioStatusRepository.CanPrizeAsync(_user.GetUserId()));
 }