// Dear 383 student, below is an example of async / await // further reading: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/ public async Task <ActionResult <FarmFieldTicketDto> > CreateTicket(FarmFieldTicketDto targetValue) { if (targetValue.TicketTimeSlot < DateTimeOffset.UtcNow || !await context.FarmFields.AnyAsync(x => x.Active && x.Id == targetValue.FarmFieldId)) { return(BadRequest()); } var user = await userManager.GetUserAsync(User); if (user == null) { return(BadRequest()); } var addedItem = context.Set <FarmFieldTicket>().Add(new FarmFieldTicket { UserId = user.Id, FarmFieldId = targetValue.FarmFieldId, TicketTimeSlot = targetValue.TicketTimeSlot }); await context.SaveChangesAsync(); targetValue.Id = addedItem.Entity.Id; return(Created(string.Empty, targetValue)); }
// Dear 383 student, below is an example of async / await // further reading: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/ public async Task <ActionResult <FarmFieldTicketDto> > CreateTicket(FarmFieldTicketDto targetValue) { if (!await context.FarmFields.AnyAsync(x => x.Active && x.Id == targetValue.FarmFieldId)) { return(BadRequest()); } var addedItem = context.Set <FarmFieldTicket>().Add(new FarmFieldTicket { FarmFieldId = targetValue.FarmFieldId }); await context.SaveChangesAsync(); targetValue.Id = addedItem.Entity.Id; return(Created(string.Empty, targetValue)); }
//helper method---creating farmfield tickets of respective farm(~~following initial design, wasn't really needed) private int CreateFarmFieldTickets(FarmFieldTicketDto farmfieldticketdto) { if (_context.FarmFields.Any(x => x.Active && x.Id == farmfieldticketdto.FarmFieldId)) { var addedItem = _context.FarmFieldTickets.Add(new FarmFieldTicket { FarmFieldId = farmfieldticketdto.FarmFieldId }); _context.SaveChanges(); return(addedItem.Entity.Id); } else { return(0); } }
//[Authorize(Roles = Roles.Customer)] // Dear 383 student, below is an example of async / await // further reading: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/ public async Task <ActionResult <FarmFieldTicketDto> > CreateTicket(FarmFieldTicketDto targetValue) { if (targetValue.TicketTimeSlot < DateTimeOffset.UtcNow || !await context.FarmFields.AnyAsync(x => x.Active && x.Id == targetValue.FarmFieldId)) { return(BadRequest()); } var addedItem = context.Set <FarmFieldTicket>().Add(new FarmFieldTicket { FarmFieldId = targetValue.FarmFieldId, TicketTimeSlot = targetValue.TicketTimeSlot, UserId = targetValue.UserId, SmallBucketQty = targetValue.SmallBucketQty, MediumBucketQty = targetValue.MediumBucketQty, LargeBucketQty = targetValue.LargeBucketQty }); await context.SaveChangesAsync(); targetValue.Id = addedItem.Entity.Id; return(Created(string.Empty, targetValue)); }
public async Task <ActionResult> CreateTransaction(List <ItemDto> itemDto) { //finding out logged in user and his cart id var currentlyLoggedInCustomer = Int32.Parse(User.FindFirstValue(ClaimTypes.NameIdentifier)); Nullable <int> cartId = _context.Set <Cart>().Where(x => x.UserId == currentlyLoggedInCustomer).Select(y => y.Id).FirstOrDefault(); //if the user is admin, he has no cart.......cart only for customers if (cartId == null || itemDto[0].FarmFieldId == 0) { return(BadRequest()); } // creating farm field tickets first for items table from the farmfieldId var listOfTicketIds = new List <int>(); for (int i = 0; i < itemDto.Count; i++) { var farmfieldticketdto = new FarmFieldTicketDto(); farmfieldticketdto.FarmFieldId = itemDto[i].FarmFieldId; var farmFieldTicketId = CreateFarmFieldTickets(farmfieldticketdto); //sending dto to another method to create tickets if (farmFieldTicketId == 0) { return(BadRequest()); } else { listOfTicketIds.Add(farmFieldTicketId); } } //creating list of items for transaction table var listOfItems = new List <Item>(); var totalPrice = 0; //total price for transaction table for (int i = 0; i < listOfTicketIds.Count; i++) { var unitPrice = itemDto[i].Price; var tempSizeId = _context.UnitPrices.Where(x => x.farmFieldId == itemDto[i].FarmFieldId && x.rate == unitPrice).Select(y => y.sizeId).FirstOrDefault(); var item = new Item { farmFieldTicketId = listOfTicketIds[i], SizeId = tempSizeId, Quantity = itemDto[i].Quantity, Price = unitPrice * (itemDto[i].Quantity) }; totalPrice += item.Price; listOfItems.Add(item); _context.Items.Add(item); } //Finally creating transaction from above created entities var newTransaction = new Transaction() { Items = listOfItems, TotalPrice = totalPrice, cartId = (int)cartId, Redeemed = false, Date = System.DateTime.Now }; _context.Transactions.Add(newTransaction); await _context.SaveChangesAsync(); // return new TransactionDto(); return(Ok()); }