OrdersController.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. using AutoMapper;
  2. using DutchTreat.Data;
  3. using DutchTreat.Data.Entities;
  4. using DutchTreat.ViewModels;
  5. using Microsoft.AspNetCore.Authentication.JwtBearer;
  6. using Microsoft.AspNetCore.Authorization;
  7. using Microsoft.AspNetCore.Identity;
  8. using Microsoft.AspNetCore.Mvc;
  9. using Microsoft.Extensions.Logging;
  10. using System;
  11. using System.Collections.Generic;
  12. using System.Linq;
  13. using System.Text;
  14. using System.Threading.Tasks;
  15. namespace DutchTreat.Controllers
  16. {
  17. [Route("api/[Controller]")]
  18. [Authorize(AuthenticationSchemes=JwtBearerDefaults.AuthenticationScheme)]
  19. public class OrdersController : Controller
  20. {
  21. private readonly IDutchRepository _repository;
  22. private readonly ILogger<OrdersController> _logger;
  23. private readonly IMapper _mapper;
  24. private readonly UserManager<StoreUser> _userManager;
  25. public OrdersController(IDutchRepository repository, ILogger<OrdersController> logger, IMapper mapper, UserManager<StoreUser> userManager)
  26. {
  27. _repository = repository;
  28. _logger = logger;
  29. _mapper = mapper;
  30. _userManager = userManager;
  31. }
  32. [HttpGet]
  33. public ActionResult<IEnumerable<Order>> Get(bool includedItems = true)
  34. {
  35. try
  36. {
  37. var username = User.Identity.Name;
  38. var result = _repository.GetAllOrdersByUser(username, includedItems);
  39. return Ok(_mapper.Map<IEnumerable<OrderViewModel>>(result));
  40. }
  41. catch (Exception ex)
  42. {
  43. _logger.LogError($"Failed to get orders: {ex}");
  44. return BadRequest("Failed to get orders");
  45. }
  46. }
  47. [HttpGet("{id:int}")]
  48. public ActionResult<Order> Get(int id)
  49. {
  50. try
  51. {
  52. var order = _repository.GetOrderById(User.Identity.Name, id);
  53. if (order != null) return Ok(_mapper.Map<Order, OrderViewModel>(order));
  54. else return NotFound();
  55. }
  56. catch (Exception ex)
  57. {
  58. _logger.LogError($"Failed to get orders: {ex}");
  59. return BadRequest("Failed to get orders");
  60. }
  61. }
  62. [HttpPost]
  63. public async Task<ActionResult> Post([FromBody]OrderViewModel model)
  64. {
  65. try
  66. {
  67. if (ModelState.IsValid)
  68. {
  69. var newOrder = _mapper.Map<OrderViewModel, Order>(model);
  70. if (newOrder.OrderDate == DateTime.MinValue)
  71. {
  72. newOrder.OrderDate = DateTime.Now;
  73. }
  74. var currentUser = await _userManager.FindByNameAsync(User.Identity.Name);
  75. newOrder.User = currentUser;
  76. _repository.AddEntity(newOrder);
  77. if (_repository.SaveAll())
  78. {
  79. return Created($"/api/order/{newOrder.Id}", _mapper.Map<Order, OrderViewModel>(newOrder));
  80. }
  81. }
  82. else
  83. {
  84. return BadRequest(ModelState);
  85. }
  86. }
  87. catch (Exception ex)
  88. {
  89. _logger.LogError($"Failed to save a new order: {ex}");
  90. }
  91. return BadRequest("Failed to save a new order");
  92. }
  93. }
  94. }