HomeController.cs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. using Microsoft.AspNetCore.Mvc;
  2. using System.Diagnostics;
  3. using goods.Models;
  4. using goods.Models.Coupang;
  5. using Product = goods.Models.Coupang.Product;
  6. using Search = goods.Models.Coupang.Search;
  7. namespace goods.Controllers
  8. {
  9. public class HomeController : Controller
  10. {
  11. private readonly ILogger<HomeController> _logger;
  12. private readonly CoupangPartners _coupangPartners;
  13. private readonly DBContext _context;
  14. public HomeController(ILogger<HomeController> logger, CoupangPartners coupangPartners, DBContext context)
  15. {
  16. _logger = logger;
  17. _coupangPartners = coupangPartners;
  18. _context = context;
  19. }
  20. // 홈(메인)
  21. [HttpGet("/")]
  22. public IActionResult Index()
  23. {
  24. return View();
  25. }
  26. // 이벤트
  27. [HttpGet("/Event")]
  28. public IActionResult Event()
  29. {
  30. var data = new(int key, string href, string src, string alt)[]
  31. {
  32. (1, "https://link.coupang.com/a/b69T8Q", "/image/1.png", "패션 LAST SALE! 최대 70% 할인"),
  33. (2, "https://link.coupang.com/a/b69UJh", "/image/2.png", "기분 좋은 선물! E쿠폰/기프티콘"),
  34. (3, "https://link.coupang.com/a/b69UPW", "/image/3.png", "골드박스"),
  35. (4, "https://link.coupang.com/a/b69UUT", "/image/4.png", "펜션/풀빌라 와우회원 할인"),
  36. (5, "https://link.coupang.com/a/b69UYJ", "/image/5.png", "로켓프레시, 맛있는 최저가"),
  37. (6, "https://link.coupang.com/a/b69U57", "/image/6.png", "[모바일 전용] 쿠팡라이브 럭키박스"),
  38. (7, "https://link.coupang.com/a/b69VaS", "/image/7.png", "로켓패션, 역대급 할인 아울렛관"),
  39. (8, "https://link.coupang.com/a/b69VfM", "/image/8.png", "로켓프레시, 마트 기획전"),
  40. (9, "https://link.coupang.com/a/b69VkQ", "/image/9.png", "로켓프레시, 식단관리"),
  41. (10, "https://link.coupang.com/a/b69VsR", "/image/10.png", "로켓프레시, 가격역전"),
  42. (11, "https://link.coupang.com/a/b69Vwb", "/image/11.png", "홈인테리어, 공간별 인테리어 추천"),
  43. (12, "https://link.coupang.com/a/b69VGB", "/image/12.png", "로켓패션, 로켓배송 금주의 신상"),
  44. (13, "https://link.coupang.com/a/b69VKU", "/image/13.png", "가전디지털, 가성비 게이밍 모니터"),
  45. (14, "https://link.coupang.com/a/b69VOH", "/image/14.png", "가전디지털, 갤럭시 버즈"),
  46. (15, "https://link.coupang.com/a/b69VU1", "/image/15.png", "가전디지털, 프리미엄 게이밍 노트북"),
  47. (16, "https://link.coupang.com/a/b69V3V", "/image/16.png", "가전디지털, 게이밍 노트북"),
  48. (17, "https://link.coupang.com/a/b69V6U", "/image/17.png", "가전/디지털, 프리미엄 오디오"),
  49. (18, "https://link.coupang.com/a/b69Wb9", "/image/18.png", "로켓패션, 반품 마켓"),
  50. (19, "https://link.coupang.com/a/b69WhM", "/image/19.png", "쿠팡트래블, 매일 만나는 여행 특가"),
  51. (20, "https://link.coupang.com/a/b69Wlr", "/image/20.png", "도서/문구, 책 한잔")
  52. };
  53. var random = new Random();
  54. ViewBag.Data = data.OrderBy(row => random.Next()).ToArray(); ;
  55. return View();
  56. }
  57. // 골드박스
  58. [HttpGet("/GoldBox")]
  59. public async Task<IActionResult> GoldBox()
  60. {
  61. CoupangModel coupangModel = new CoupangModel(_coupangPartners);
  62. Product.Response itemList = await coupangModel.GetGoldBoxProduct();
  63. return View(itemList);
  64. }
  65. // 인가상품
  66. [HttpGet("/category/{id}")]
  67. public async Task<IActionResult> Category([FromRoute] int id)
  68. {
  69. // Enum을 이용한 유효성 검사
  70. if (!Enum.IsDefined(typeof(Request.Categories), id))
  71. {
  72. return BadRequest("잘못된 접근입니다.");
  73. }
  74. CoupangModel coupangModel = new CoupangModel(_coupangPartners);
  75. Product.Response itemList = await coupangModel.GetCategoryProduct(id);
  76. // 현재 카테고리 이름 조회
  77. var category = (Request.Categories)id;
  78. var categoryName = category.GetDisplayName();
  79. ViewBag.CategoryName = categoryName;
  80. return View(itemList);
  81. }
  82. // 쿠팡PL
  83. [HttpGet("/pl/{id}")]
  84. public async Task<IActionResult> Pl([FromRoute] int id)
  85. {
  86. // Enum을 이용한 유효성 검사
  87. if (!Enum.IsDefined(typeof(Request.Brand), id))
  88. {
  89. return BadRequest("잘못된 접근입니다.");
  90. }
  91. CoupangModel coupangModel = new CoupangModel(_coupangPartners);
  92. Product.Response itemList = await coupangModel.GetPlProduct(id);
  93. // 현재 PL 이름 조회
  94. var pl = (Request.Brand)id;
  95. var plName = pl.GetDisplayName();
  96. ViewBag.PlName = plName;
  97. return View(itemList);
  98. }
  99. // 상품 검색
  100. [HttpGet("/search")]
  101. public async Task<IActionResult> Search(string? keyword)
  102. {
  103. // 검색어 처리 로직
  104. if (string.IsNullOrEmpty(keyword))
  105. {
  106. return BadRequest("검색어를 입력해주세요.");
  107. }
  108. CoupangModel coupangModel = new CoupangModel(_coupangPartners);
  109. Search.Response itemList = await coupangModel.GetSearchProduct(keyword);
  110. ViewBag.Keyword = keyword;
  111. // 검색 키워드를 DB에 저장
  112. await _context.SearchKeyword.AddAsync(new SearchKeyword {
  113. Keyword = keyword,
  114. IPAddress = Request.HttpContext.Connection.RemoteIpAddress.ToString(),
  115. UserAgent = Request.Headers["User-Agent"],
  116. CreatedAt = DateTime.Now
  117. });
  118. await _context.SaveChangesAsync();
  119. return View(itemList);
  120. }
  121. [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
  122. public IActionResult Error()
  123. {
  124. return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
  125. }
  126. }
  127. }