//CreateOrder Method [HttpPost] [Route("CreateOrder")] public async Task<IActionResult> CreateOrder([FromBody] OrderViewModel ov) { // Validate input if (ov == null || ov.OrderLines == null || !ov.OrderLines.Any()) { return BadRequest("OrderViewModel or OrderLines field is required."); } // Extract user ID from claims var userId = User.FindFirstValue("userId"); if (userId == null) { return Unauthorized("User not logged in"); } // Retrieve member var member = await _context.Members.FirstOrDefaultAsync(m => m.User_ID == int.Parse(userId)); if (member == null) { return Unauthorized("User is not a member"); } // Create and save the order var order = new Order { Member_ID = member.Member_ID, Order_Date = DateTime.UtcNow, Order_Status_ID = ov.Order_Status_ID, // Use the Order_Status_ID from the view model IsCollected = ov.IsCollected, Total_Price = ov.Total_Price // Ensure Total_Price is also set }; _context.Orders.Add(order); await _context.SaveChangesAsync(); // Save to get Order_ID // Add order lines var orderLines = ov.OrderLines.Select(ol => new Order_Line { Product_ID = ol.Product_ID, Quantity = ol.Quantity, Unit_Price = ol.Unit_Price, Order_ID = order.Order_ID // Link to the created order }).ToList(); _context.Order_Lines.AddRange(orderLines); await _context.SaveChangesAsync(); // Save order lines // Clear the member's cart var cart = await _context.Carts .Include(c => c.Cart_Items) .FirstOrDefaultAsync(c => c.Member_ID == member.Member_ID); if (cart != null) { _context.Cart_Items.RemoveRange(cart.Cart_Items); await _context.SaveChangesAsync(); } return Ok(order); }
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter