Sky.Net/API/Controllers/OrdersController.cs
Charles Showalter 344ecb8762 Added Order API
2022-05-24 15:35:03 -07:00

56 lines
2.1 KiB
C#

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<ActionResult<Order>> CreateOrder(OrderDto orderDto){
var email = HttpContext.User.RetrieveEmailFromPrincipal();
var address = _mapper.Map<AddressDto, Address>(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<ActionResult<IReadOnlyList<OrderDto>>> GetOrdersForUser()
{
var email = HttpContext.User.RetrieveEmailFromPrincipal();
var orders = await _orderService.GetOrdersForUserAsync(email);
return Ok(_mapper.Map<IReadOnlyList<Order>, IReadOnlyList<OrderToReturnDto>>(orders));
}
[HttpGet("{id}")]
public async Task<ActionResult<OrderToReturnDto>> 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, OrderToReturnDto>(order);
}
[HttpGet("deliveryMethods")]
public async Task<ActionResult<IReadOnlyList<DeliveryMethod>>> GetDeliveryMethod()
{
return Ok(await _orderService.GetDeliveryMethodsAsync());
}
}
}