ItemController.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. using Microsoft.AspNetCore.Mvc;
  2. using Microsoft.AspNetCore.WebUtilities;
  3. using Microsoft.AspNetCore.Mvc.Filters;
  4. using economy.Models;
  5. using economy.Helpers;
  6. using economy.Models.Price.Domestic;
  7. using Item = economy.Models.Price.Domestic.Item;
  8. namespace economy.Controllers.Price.Domestic
  9. {
  10. public class ItemController : Controller
  11. {
  12. private readonly DataGoKR _dataGoKR;
  13. private readonly DomesticModel _domesticModel;
  14. private Dictionary<string, string> _queryString;
  15. public ItemController(DataGoKR dataGoKR)
  16. {
  17. _dataGoKR = dataGoKR;
  18. _domesticModel = new DomesticModel(_dataGoKR, null);
  19. _queryString = [];
  20. }
  21. public override void OnActionExecuting(ActionExecutingContext context)
  22. {
  23. _queryString = QueryHelpers.ParseQuery(HttpContext.Request.QueryString.Value).ToDictionary(k => k.Key, v => string.Join(",", v.Value));
  24. ViewBag.QueryString = _queryString;
  25. base.OnActionExecuting(context);
  26. }
  27. public async Task<IActionResult> Index(Item.List.Request request)
  28. {
  29. return await List(request);
  30. }
  31. // 품목별 시세
  32. [HttpGet("Price/Domestic/Item/List.cshtml")]
  33. public async Task<IActionResult> List(Item.List.Request request)
  34. {
  35. if (!ModelState.IsValid)
  36. {
  37. return BadRequest(ModelState);
  38. }
  39. Item.List.Response itemList = await _domesticModel.GetPriceItemList(request);
  40. var viewModel = new View<Item.List.Request, Item.List.Response>();
  41. viewModel.SelectedListPerPage = request.NumOfRows;
  42. viewModel.Request = request;
  43. viewModel.Response = itemList;
  44. var pagination = new Pagination(itemList.Body?.TotalCount, request.PageNo, request.NumOfRows, null);
  45. viewModel.Pagination = pagination;
  46. return View("/Views/Price/Domestic/Item/List.cshtml", viewModel);
  47. }
  48. // 품목 가격 정보
  49. [HttpGet("Price/Domestic/Item/Detail/{item}")]
  50. public async Task<IActionResult> Detail([FromRoute] string item, [Bind] Item.Detail.Request request)
  51. {
  52. request.ItemCode = item;
  53. if (!ModelState.IsValid)
  54. {
  55. return BadRequest(ModelState);
  56. }
  57. Item.Detail.Response itemInfo = await _domesticModel.GetPriceItemInfo(request);
  58. if (itemInfo.Body is not null)
  59. {
  60. int listNum = Common.CalcListNumber(itemInfo.Body.TotalCount, request.PageNo, request.NumOfRows);
  61. itemInfo.Body.Items.ItemList = itemInfo.Body.Items.ItemList.Select((row, index) =>
  62. {
  63. row.Num = listNum - index;
  64. return row;
  65. }).ToList();
  66. }
  67. var viewModel = new View<Item.Detail.Request, Item.Detail.Response>();
  68. viewModel.SelectedListPerPage = request.NumOfRows;
  69. viewModel.Request = request;
  70. viewModel.Response = itemInfo;
  71. var queryString = new
  72. {
  73. sDate = request.StartDate.ToString("yyyy-MM-dd"),
  74. eDate = request.EndDate.ToString("yyyy-MM-dd")
  75. };
  76. var pagination = new Pagination(itemInfo.Body?.TotalCount, request.PageNo, request.NumOfRows, queryString);
  77. viewModel.Pagination = pagination;
  78. return View("/Views/Price/Domestic/Item/Detail.cshtml", viewModel);
  79. }
  80. }
  81. }