Deli.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. <?php
  2. namespace App\Controllers;
  3. use CodeIgniter\RESTful\ResourceController;
  4. class Deli extends ResourceController
  5. {
  6. //아이템 리스트
  7. public function itemlist()
  8. {
  9. $db = \Config\Database::connect();
  10. // POST JSON 파라미터 받기
  11. $request = $this->request->getJSON(true);
  12. $showYn = isset($request['SHOW_YN']) ? $request['SHOW_YN'] : null;
  13. $infSeq = isset($request['INF_SEQ']) ? $request['INF_SEQ'] : null;
  14. // 서브쿼리: INF_SEQ 기준으로 QTY, TOTAL 합계와 최신 REG_DATE 구하기
  15. $subQuery = $db->table('ITEM_ORDER_LIST')
  16. ->select('ITEM_SEQ, SUM(QTY) AS sum_qty, SUM(TOTAL) AS sum_total, MAX(REG_DATE) AS latest_reg_date');
  17. if (!is_null($infSeq)) {
  18. $subQuery->where('INF_SEQ', $infSeq);
  19. }
  20. $subQuery->groupBy('ITEM_SEQ');
  21. // 메인 쿼리: ITEM_LIST와 위 서브쿼리 조인
  22. $builder = $db->table('ITEM_LIST I')
  23. ->select('I.*, O.sum_qty, O.sum_total, O.latest_reg_date')
  24. ->join("(" . $subQuery->getCompiledSelect() . ") O", 'I.SEQ = O.ITEM_SEQ', 'left')
  25. ->where('I.DEL_YN', 'N');
  26. if (!is_null($showYn) && $showYn !== '') {
  27. $builder->where('I.SHOW_YN', $showYn);
  28. }
  29. $builder->orderBy('I.UDPDATE', 'DESC');
  30. $lists = $builder->get()->getResultArray();
  31. return $this->respond($lists, 200);
  32. }
  33. //구매자 리스트
  34. public function delilist()
  35. {
  36. $db = \Config\Database::connect();
  37. $request = $this->request->getJSON(true);
  38. $itemSeq = isset($request['item_seq']) ? $request['item_seq'] : null;
  39. $infSeq = isset($request['inf_seq']) ? $request['inf_seq'] : null;
  40. // 쿼리 빌더
  41. $builder = $db->table('ITEM_ORDER_LIST I');
  42. $builder->select('I.*, U.NICK_NAME');
  43. $builder->join('USER_LIST U', 'I.INF_SEQ = U.SEQ', 'left');
  44. $builder->where('I.ITEM_SEQ', $itemSeq);
  45. if ($infSeq) {
  46. $builder->where('I.INF_SEQ', $infSeq);
  47. }
  48. // 주문일 기준으로 정렬
  49. $builder->orderBy('I.ORDER_DATE', 'DESC');
  50. $lists = $builder->get()->getResultArray();
  51. return $this->respond($lists, 200);
  52. }
  53. //구매자 등록
  54. public function deliRegister()
  55. {
  56. $db = \Config\Database::connect();
  57. $request = $this->request->getJSON(true);
  58. $itemSeq = isset($request['item_seq']) ? $request['item_seq'] : null;
  59. $infSeq = isset($request['inf_seq']) ? $request['inf_seq'] : null;
  60. $deliveryList = $request['deliveryList'] ?? [];
  61. // 🔍 먼저 전체 유효성 검사
  62. foreach ($deliveryList as $index => $delivery) {
  63. $requiredFields = ['buyerName', 'address', 'phone', 'qty', 'total', 'orderDate'];
  64. foreach ($requiredFields as $field) {
  65. if (!isset($delivery[$field]) || $delivery[$field] === '') {
  66. return $this->fail("deliveryList[$index] 항목의 '{$field}' 값이 누락되었습니다.", 400);
  67. }
  68. }
  69. }
  70. // ✅ 유효성 통과 후 삭제 + 삽입
  71. $db->table('ITEM_ORDER_LIST')
  72. ->where('ITEM_SEQ', $itemSeq)
  73. ->where('INF_SEQ', $infSeq)
  74. ->delete();
  75. foreach ($deliveryList as $delivery) {
  76. $data = [
  77. 'ITEM_SEQ' => $itemSeq,
  78. 'INF_SEQ' => $infSeq,
  79. 'BUYER_NAME' => $delivery['buyerName'],
  80. 'ADDRESS' => $delivery['address'],
  81. 'PHONE' => $delivery['phone'],
  82. 'EMAIL' => $delivery['email'],
  83. 'QTY' => $delivery['qty'],
  84. 'TOTAL' => $delivery['total'],
  85. 'DELI_COMP' => $delivery['deliComp'] ?? null,
  86. 'DELI_NUMB' => $delivery['deliNumb'] ?? null,
  87. 'ORDER_DATE' => date('Y-m-d H:i:s', strtotime($delivery['orderDate'])),
  88. 'REG_DATE' => date('Y-m-d'),
  89. ];
  90. $db->table('ITEM_ORDER_LIST')->insert($data);
  91. }
  92. return $this->respond(['message' => '배송 데이터가 성공적으로 저장되었습니다.'], 200);
  93. }
  94. //아이템 상세
  95. public function itemDetail($seq)
  96. {
  97. // DB 객체 얻기
  98. $db = \Config\Database::connect();
  99. $builder = $db->table('ITEM_LIST');
  100. $item = $builder->where('seq', $seq)->get()->getRowArray();
  101. if($item){
  102. return $this->respond($item, 200);
  103. } else {
  104. return $this->respond([
  105. 'status' => 'fail',
  106. 'message' => '유효하지 않은 seq입니다.'
  107. ], 404);
  108. }
  109. }
  110. //아이템 삭제
  111. public function itemDelete($seq)
  112. {
  113. $db = \Config\Database::connect();
  114. $db->transBegin();
  115. //아이템 삭제
  116. $deleted = $db->table('ITEM_LIST')
  117. ->where('SEQ', $seq)
  118. ->update(['DEL_YN' => 'Y']);
  119. if ($db->transStatus() === false || !$deleted) {
  120. $db->transRollback();
  121. return $this->respond(['status' => 'fail', 'message' => '이벤트 삭제 중 오류가 발생했습니다.']);
  122. }
  123. $db->transCommit();
  124. return $this->respond(['status' => 'success', 'message' => '이벤트가 삭제되었습니다.'], 200);
  125. }
  126. }