public async Task BuyOfferForUser(string id, string userId, BuyInput buyInput)
        {
            var offer = await this.offerService.GetOfferByIdAsync(id);

            if (offer == null)
            {
                return;
            }

            var order = new Order()
            {
                OfferId       = id,
                OfferName     = offer.Name,
                OfferPrice    = offer.Price,
                OfferPicUrl   = offer.PicUrl,
                UserId        = userId,
                SellerId      = offer.CreatorId,
                DeliveryEmail = buyInput.Email,
                UserFirstName = buyInput.FirstName,
                UserLastName  = buyInput.LastName,
            };

            this.context.Orders.Add(order);
            this.context.SaveChanges();

            await this.emailSender.SendEmailAsync(
                order.DeliveryEmail,
                "Order Details",
                $"{order.Id.ToString()}");
        }
示例#2
0
        public ActionResult Buy([FromBody] BuyInput userParam)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest("Invalid body given"));
            }

            var drink = dbcontext.Drink.FirstOrDefault(d => d.Id == userParam.DrinkId);

            if (drink == null)
            {
                return(NotFound("Getränk nicht gefunden"));
            }

            var rfid = dbcontext.Rfid.Include(x => x.User).FirstOrDefault(r => r.rfId == userParam.RfId);

            if (rfid == null)
            {
                return(NotFound("Rfid nicht gefunden"));
            }

            var user = rfid.User;

            if (user == null)
            {
                return(NotFound("User nicht gefunden"));
            }

            var proceed = new Proceed {
                UserId = user.Id, DrinkId = drink.Id, Price = drink.Price
            };

            if (drink.Quantity == 0)
            {
                return(BadRequest("Can not get drink since there should be no more drinks available"));
            }

            if (user.Balance < drink.Price)
            {
                return(BadRequest("Balance is insufficient"));
            }

            dbcontext.Proceed.Add(proceed);
            user.Balance   -= drink.Price;
            user.Balance    = Math.Round(user.Balance, 2);
            drink.Quantity -= 1;

            dbcontext.Update(user);
            dbcontext.Update(drink);
            dbcontext.SaveChanges();

            return(Ok(new Order()
            {
                user = user.UserName,
                drink = drink.Name,
                price = drink.Price
            }));
        }
        public override Empty Buy(BuyInput input)
        {
            Assert(IsValidSymbol(input.Symbol), "Invalid symbol.");
            var fromConnector = State.Connectors[State.BaseTokenSymbol.Value];
            var toConnector   = State.Connectors[input.Symbol];

            Assert(toConnector != null, "Can't find connector.");
            var amountToPay = BancorHelpers.GetAmountToPayFromReturn(
                GetSelfBalance(fromConnector), GetWeight(fromConnector),
                GetSelfBalance(toConnector), GetWeight(toConnector),
                input.Amount);
            var fee = Convert.ToInt64(amountToPay * GetFeeRate());

            var amountToPayPlusFee = amountToPay.Add(fee);

            Assert(input.PayLimit == 0 || amountToPayPlusFee <= input.PayLimit, "Price not good.");

            // Pay fee
            if (fee > 0)
            {
                State.TokenContract.TransferFrom.Send(
                    new TransferFromInput()
                {
                    Symbol = State.BaseTokenSymbol.Value,
                    From   = Context.Sender,
                    To     = State.FeeReceiverAddress.Value,
                    Amount = fee
                });
            }

            // Transafer base token
            State.TokenContract.TransferFrom.Send(
                new TransferFromInput()
            {
                Symbol = State.BaseTokenSymbol.Value,
                From   = Context.Sender,
                To     = Context.Self,
                Amount = amountToPay
            });

            // Transafer bought token
            State.TokenContract.Transfer.Send(
                new TransferInput()
            {
                Symbol = input.Symbol,
                To     = Context.Sender,
                Amount = input.Amount
            });
            Context.Fire(new TokenBought()
            {
                Symbol       = input.Symbol,
                BoughtAmount = input.Amount,
                BaseAmount   = amountToPay,
                FeeAmount    = fee
            });
            return(new Empty());
        }
示例#4
0
        public override Empty Buy(BuyInput input)
        {
            Assert(IsValidSymbol(input.Symbol), "Invalid symbol.");

            var toConnector = State.Connectors[input.Symbol];

            Assert(toConnector != null, "Can't find to connector.");
            Assert(!string.IsNullOrEmpty(toConnector.RelatedSymbol), "can't find related symbol'");
            var fromConnector = State.Connectors[toConnector.RelatedSymbol];

            Assert(toConnector != null, "Can't find from connector.");
            var amountToPay = BancorHelper.GetAmountToPayFromReturn(
                GetSelfBalance(fromConnector), GetWeight(fromConnector),
                GetSelfBalance(toConnector), GetWeight(toConnector),
                input.Amount);
            var fee = Convert.ToInt64(amountToPay * GetFeeRate());

            var amountToPayPlusFee = amountToPay.Add(fee);

            Assert(input.PayLimit == 0 || amountToPayPlusFee <= input.PayLimit, "Price not good.");

            // Pay fee
            if (fee > 0)
            {
                HandleFee(fee);
            }

            // Transfer base token
            State.TokenContract.TransferFrom.Send(
                new TransferFromInput()
            {
                Symbol = State.BaseTokenSymbol.Value,
                From   = Context.Sender,
                To     = Context.Self,
                Amount = amountToPay,
            });
            State.DepositBalance[fromConnector.Symbol] = State.DepositBalance[fromConnector.Symbol].Add(amountToPay);
            // Transfer bought token
            State.TokenContract.Transfer.Send(
                new TransferInput
            {
                Symbol = input.Symbol,
                To     = Context.Sender,
                Amount = input.Amount
            });

            Context.Fire(new TokenBought
            {
                Symbol       = input.Symbol,
                BoughtAmount = input.Amount,
                BaseAmount   = amountToPay,
                FeeAmount    = fee
            });
            return(new Empty());
        }
示例#5
0
        public ApiResult <BuyOutput> Buy([FromBody] BuyInput parameter)
        {
            if (!this.IsFormValid())
            {
                return(ApiResult.Failure <BuyOutput>(this.FormInvalidReason(),
                                                     MessageCodes.ParameterValidationFailure));
            }

            IList <StoreOrderItem> StoreOrders = new List <StoreOrderItem>();

            var result = Resolve <IOrderBuyServcie>().Buy(parameter);

            if (!result.Item1.Succeeded)
            {
                return(ApiResult.Failure <BuyOutput>(result.Item1.ToString(), MessageCodes.ServiceFailure));
            }

            return(ApiResult.Success(result.Item2));
        }
示例#6
0
        /// <summary>
        ///     删除购物车数据
        /// </summary>
        /// <param name="orderBuyInput"></param>
        public void DeleteCartBuyOrder(BuyInput orderBuyInput)
        {
            var storeList   = new List <ObjectId>();
            var productSkus = new List <long>();

            orderBuyInput.StoreOrders = orderBuyInput.StoreOrderJson.Deserialize <StoreOrderItem>();
            orderBuyInput.StoreOrders.ToList().ForEach(e =>
            {
                storeList.Add(e.StoreId);
                productSkus.AddRange(e.ProductSkuItems.Select(a => a.ProductSkuId));
            });
            //find
            var cars = Resolve <ICartService>().GetList(e =>
                                                        e.UserId == orderBuyInput.UserId && storeList.Contains(e.StoreId) &&
                                                        productSkus.Contains(e.ProductSkuId)).ToList();

            cars.ForEach(item =>
            {
                item.Status = Status.Deleted;
                Resolve <ICartService>().Update(item);
            });
        }