示例#1
0
        public string SolicitaResgatePremio(int idPremio)
        {
            Usuario       u             = (Usuario)Session["UserProfile"];
            UsuarioPremio usuarioPremio = new UsuarioPremio
            {
                UsuarioId = u.Id,
                PremioId  = idPremio
            };

            using (var client = new HttpClient())
            {
                string url = "https://apipuccoins.azurewebsites.net/api/ResgataPremio";

                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(string.Format("{0}:{1}", u.Email, u.Senha))));

                var uri      = new Uri(url);
                var data     = JsonConvert.SerializeObject(usuarioPremio);
                var content  = new StringContent(data, Encoding.UTF8, "application/json");
                var response = client.PostAsync(uri, content).Result;

                if (response.IsSuccessStatusCode)
                {
                    return("Pedido de Resgate de Prêmio realizado com sucesso.");
                }
                else
                {
                    return("Erro no resgate de Prêmio");
                }
            }
        }
        public IHttpActionResult ResgataPremio(UsuarioPremio usuarioPremio)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            usuarioPremio.DataSolicitacao = DateTime.Now;
            usuarioPremio.DataEntrega     = DateTime.Now.AddDays(10);

            int idUser = Convert.ToInt32(Thread.CurrentPrincipal.Identity.Name);

            Premio premio = db.Premios.AsNoTracking().Where(a => a.Id == usuarioPremio.PremioId).FirstOrDefault();
            Conta  conta  = db.Contas.AsNoTracking().Where(a => a.UsuarioId == idUser).FirstOrDefault();

            if (conta.Saldo < premio.Preco)
            {
                return(BadRequest("Saldo Insuficiente"));
            }

            usuarioPremio.UsuarioId = idUser;

            db.UsuarioPremio.Add(usuarioPremio);
            db.SaveChanges();

            DiminuiSaldo(conta, premio.Preco);
            DiminuiQuantidade(premio);

            return(Ok("Prêmio resgatado!"));
        }
示例#3
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);
        }