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()}"); }
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()); }
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()); }
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)); }
/// <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); }); }