Preview:
//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);
}
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