MCPcopy Create free account
hub / github.com/TryCatchLearn/Restore-v2 / CreateOrder

Method CreateOrder

API/Controllers/OrdersController.cs:41–91  ·  view source on GitHub ↗
(CreateOrderDto orderDto)

Source from the content-addressed store, hash-verified

39 }
40
41 [HttpPost]
42 public async Task<ActionResult<Order>> CreateOrder(CreateOrderDto orderDto)
43 {
44 var basket = await context.Baskets.GetBasketWithItems(Request.Cookies["basketId"]);
45
46 if (basket == null || basket.Items.Count == 0 || string.IsNullOrEmpty(basket.PaymentIntentId))
47 return BadRequest("Basket is empty or not found");
48
49 var items = CreateOrderItems(basket.Items);
50 if (items == null) return BadRequest("Some items out of stock");
51
52 var subtotal = items.Sum(x => x.Price * x.Quantity);
53 var deliveryFee = CalculateDeliveryFee(subtotal);
54 long discount = 0;
55
56 if (basket.Coupon != null)
57 {
58 discount = await discountService.CalculateDiscountFromAmount(basket.Coupon, subtotal);
59 }
60
61 var order = await context.Orders
62 .Include(x => x.OrderItems)
63 .FirstOrDefaultAsync(x => x.PaymentIntentId == basket.PaymentIntentId);
64
65 if (order == null)
66 {
67 order = new Order
68 {
69 OrderItems = items,
70 BuyerEmail = User.GetUsername(),
71 ShippingAddress = orderDto.ShippingAddress,
72 DeliveryFee = deliveryFee,
73 Subtotal = subtotal,
74 Discount = discount,
75 PaymentSummary = orderDto.PaymentSummary,
76 PaymentIntentId = basket.PaymentIntentId
77 };
78
79 context.Orders.Add(order);
80 }
81 else
82 {
83 order.OrderItems = items;
84 }
85
86 var result = await context.SaveChangesAsync() > 0;
87
88 if (!result) return BadRequest("Problem creating order");
89
90 return CreatedAtAction(nameof(GetOrderDetails), new { id = order.Id }, order.ToDto());
91 }
92
93 private long CalculateDeliveryFee(long subtotal)
94 {

Callers

nothing calls this directly

Calls 4

GetBasketWithItemsMethod · 0.80
GetUsernameMethod · 0.80
ToDtoMethod · 0.45

Tested by

no test coverage detected