AdvisorController.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. <?php
  2. namespace App\Controllers\Api;
  3. use CodeIgniter\HTTP\ResponseInterface;
  4. class AdvisorController extends BaseApiController
  5. {
  6. /**
  7. * Get service center name from code
  8. */
  9. private function getServiceCenterName($code)
  10. {
  11. $centers = [
  12. 'CA' => '성수서비스센터',
  13. 'CB' => '수원서비스센터',
  14. 'CC' => '대전서비스센터',
  15. 'CD' => '광주서비스센터'
  16. ];
  17. return $centers[$code] ?? $code;
  18. }
  19. /**
  20. * Get service center codes from search keyword
  21. */
  22. private function getServiceCenterCodes($keyword)
  23. {
  24. $centers = [
  25. 'CA' => '성수서비스센터',
  26. 'CB' => '수원서비스센터',
  27. 'CC' => '대전서비스센터',
  28. 'CD' => '광주서비스센터'
  29. ];
  30. $matchedCodes = [];
  31. foreach ($centers as $code => $name) {
  32. // 코드 또는 이름에 키워드가 포함되어 있으면 추가
  33. if (stripos($code, $keyword) !== false || stripos($name, $keyword) !== false) {
  34. $matchedCodes[] = $code;
  35. }
  36. }
  37. return $matchedCodes;
  38. }
  39. /**
  40. * Get advisor list
  41. */
  42. public function index()
  43. {
  44. $auth = $this->requireAuth();
  45. if ($auth instanceof ResponseInterface) {
  46. return $auth;
  47. }
  48. $params = $this->getPaginationParams();
  49. $builder = $this->getDB()->table('advisors');
  50. // Search
  51. $searchType = $this->request->getGet('search_type');
  52. $searchKeyword = $this->request->getGet('search_keyword');
  53. if ($searchKeyword) {
  54. if ($searchType === 'name') {
  55. $builder->like('name', $searchKeyword);
  56. } elseif ($searchType === 'service_center') {
  57. // 서비스센터 검색: 코드나 이름으로 검색
  58. $matchedCodes = $this->getServiceCenterCodes($searchKeyword);
  59. if (!empty($matchedCodes)) {
  60. $builder->whereIn('service_center', $matchedCodes);
  61. } else {
  62. // 매칭되는 것이 없으면 결과 없음
  63. $builder->where('1=0');
  64. }
  65. } elseif ($searchType === 'all' || !$searchType) {
  66. // 전체 검색: 이름, 서비스센터(코드+이름), 대표번호에서 검색
  67. $matchedCodes = $this->getServiceCenterCodes($searchKeyword);
  68. $builder->groupStart()
  69. ->like('name', $searchKeyword)
  70. ->orLike('main_phone', $searchKeyword);
  71. // 서비스센터 코드 매칭이 있으면 추가
  72. if (!empty($matchedCodes)) {
  73. $builder->orWhereIn('service_center', $matchedCodes);
  74. }
  75. $builder->groupEnd();
  76. }
  77. }
  78. $builder->orderBy('id', 'DESC');
  79. $result = $this->paginatedResponse($builder, $params);
  80. // Add service_center_name to each item
  81. if (isset($result['items'])) {
  82. foreach ($result['items'] as &$item) {
  83. $item->service_center_name = $this->getServiceCenterName($item->service_center);
  84. }
  85. }
  86. return $this->respondSuccess($result);
  87. }
  88. /**
  89. * Get single advisor
  90. */
  91. public function show($id = null)
  92. {
  93. $auth = $this->requireAuth();
  94. if ($auth instanceof ResponseInterface) {
  95. return $auth;
  96. }
  97. $builder = $this->getDB()->table('advisors');
  98. $advisor = $builder->where('id', $id)->get()->getRow();
  99. if (!$advisor) {
  100. return $this->respondError('어드바이저를 찾을 수 없습니다.', ResponseInterface::HTTP_NOT_FOUND);
  101. }
  102. // Add service_center_name
  103. $advisor->service_center_name = $this->getServiceCenterName($advisor->service_center);
  104. return $this->respondSuccess($advisor);
  105. }
  106. /**
  107. * Create advisor
  108. */
  109. public function create()
  110. {
  111. $auth = $this->requireAuth();
  112. if ($auth instanceof ResponseInterface) {
  113. return $auth;
  114. }
  115. $json = $this->request->getJSON();
  116. $data = [
  117. 'service_center' => $json->service_center ?? '',
  118. 'name' => $json->name ?? '',
  119. 'main_phone' => $json->main_phone ?? '',
  120. 'direct_phone' => $json->direct_phone ?? '',
  121. 'photo_url' => $json->photo_url ?? '',
  122. 'created_at' => date('Y-m-d H:i:s')
  123. ];
  124. $builder = $this->getDB()->table('advisors');
  125. $builder->insert($data);
  126. return $this->respondSuccess(['id' => $this->getDB()->insertID()], '어드바이저가 등록되었습니다.');
  127. }
  128. /**
  129. * Update advisor
  130. */
  131. public function update($id = null)
  132. {
  133. $auth = $this->requireAuth();
  134. if ($auth instanceof ResponseInterface) {
  135. return $auth;
  136. }
  137. $json = $this->request->getJSON();
  138. $data = [
  139. 'service_center' => $json->service_center ?? '',
  140. 'name' => $json->name ?? '',
  141. 'main_phone' => $json->main_phone ?? '',
  142. 'direct_phone' => $json->direct_phone ?? '',
  143. 'photo_url' => $json->photo_url ?? '',
  144. 'updated_at' => date('Y-m-d H:i:s')
  145. ];
  146. $builder = $this->getDB()->table('advisors');
  147. $builder->where('id', $id)->update($data);
  148. return $this->respondSuccess(null, '어드바이저가 수정되었습니다.');
  149. }
  150. /**
  151. * Delete advisor
  152. */
  153. public function delete($id = null)
  154. {
  155. $auth = $this->requireAuth();
  156. if ($auth instanceof ResponseInterface) {
  157. return $auth;
  158. }
  159. $builder = $this->getDB()->table('advisors');
  160. $builder->where('id', $id)->delete();
  161. return $this->respondSuccess(null, '어드바이저가 삭제되었습니다.');
  162. }
  163. }