using System.Security.Claims; using API.Dtos; using API.Errors; using API.Extensions; using AutoMapper; using Core.Entities.OrderAggregate; using Core.Interfaces; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace API.Controllers { [Authorize] public class OrdersController : BaseApiController { private readonly IOrderService _orderService; private readonly IMapper _mapper; public OrdersController(IOrderService orderService, IMapper mapper) { _mapper = mapper; _orderService = orderService; } [HttpPost] public async Task> CreateOrder(OrderDto orderDto){ var email = HttpContext.User.RetrieveEmailFromPrincipal(); var address = _mapper.Map(orderDto.ShipToAddress); var order = await _orderService.CreateOrderAsync(email, orderDto.DeliveryMethodId, orderDto.BasketId, address); if(order == null) return BadRequest(new ApiResponse(400, "Problem creating order")); return Ok(order); } [HttpGet] public async Task>> GetOrdersForUser() { var email = HttpContext.User.RetrieveEmailFromPrincipal(); var orders = await _orderService.GetOrdersForUserAsync(email); return Ok(_mapper.Map, IReadOnlyList>(orders)); } [HttpGet("{id}")] public async Task> GetOrderByIdForUser(int id) { var email = HttpContext.User.RetrieveEmailFromPrincipal(); var order = await _orderService.GetOrderByIdAsync(id, email); if(order == null) return NotFound(new ApiResponse(404)); return _mapper.Map(order); } [HttpGet("deliveryMethods")] public async Task>> GetDeliveryMethod() { return Ok(await _orderService.GetDeliveryMethodsAsync()); } } }