示例#1
0
        // Atualizar cesta de compras do usuário
        // se ela não existir retornar uma nova cesta
        public async Task <CestaCliente> UpdateBasketAsync(CestaCliente basket)
        {
            var created = await _database.StringSetAsync(basket.Id, JsonConvert.SerializeObject(basket), TimeSpan.FromDays(30));

            if (!created)
            {
                return(null);
            }

            return(await GetBasketAsync(basket.Id));
        }
        public async Task <Ordem> CriarOrdemAsync(string emailComprador, string cestaId)
        {
            // Obter cesta de compras
            CestaCliente cesta = await _basketRepository.GetBasketAsync(cestaId);

            // Obter itens
            var itens = new List <VagaAlugada>();

            foreach (BasketItem item in cesta.ItensCestaCliente)
            {
                //Estacionamento estacionamento = await _dataContext.Estacionamentos.FindAsync(item.Id);
                //Estacionamento estacionamento = await _context.Estacionamentos.Include(e => e.Endereco).FirstOrDefaultAsync(x => x.Id == item.Id);
                var            spec           = new EstacionamentoComEnderecoSpecification(item.Id);
                Estacionamento estacionamento = await _unitOfWork.Repositorio <Estacionamento>().ObterEntidadeComSpec(spec);

                VagaOrdenada vagaOrdenada = new VagaOrdenada(estacionamento.NomeEstacionamento, estacionamento.Endereco.NomeLogradouro, estacionamento.Endereco.Numero, estacionamento.Endereco.Cep, estacionamento.Endereco.Bairro, estacionamento.Endereco.Cidade, estacionamento.Endereco.Estado);
                VagaAlugada  vagaAlugada  = new VagaAlugada(vagaOrdenada, (decimal)estacionamento.PrecoHora, item.Quantidade);
                itens.Add(vagaAlugada);
            }

            // Calcular total
            var total = itens.Sum(ItensCestaCliente => ItensCestaCliente.Preco * ItensCestaCliente.Quantidade);

            // verificar se a ordem já existe

            // Criar ordem nova
            Ordem ordem = new Ordem(itens, emailComprador, total /*cestaCliente.PaymentIntentId*/);

            _unitOfWork.Repositorio <Ordem>().Adicionar(ordem);

            // salvar no banco de dados
            var resultado = await _unitOfWork.Complete();

            // Se o resultado for zero retornar null
            if (resultado <= 0)
            {
                return(null);
            }

            // Deletar cesta de compras (por que a ordem já foi retornada e salva)
            await _basketRepository.DeleteBasketAsync(cestaId);

            //retorna nova ordem
            return(ordem);
        }
示例#3
0
        public async Task <ActionResult <CestaCliente> > UpdateBasket(CestaCliente basket)
        {
            CestaCliente updatedBasket = await _basketRepository.UpdateBasketAsync(basket);

            return(Ok(updatedBasket));
        }
示例#4
0
        public async Task <ActionResult <CestaCliente> > GetBasketById(string id)
        {
            CestaCliente basket = await _basketRepository.GetBasketAsync(id);

            return(Ok(basket ?? new CestaCliente(id)));
        }