Mypage.php 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. <?php
  2. namespace App\Controllers;
  3. use CodeIgniter\RESTful\ResourceController;
  4. use App\Libraries\JwtLib\JWT;
  5. use App\Libraries\JwtLib\Key;
  6. use App\Models\LoginModel;
  7. class Mypage extends ResourceController
  8. {
  9. // 사용자 상세 정보 조회
  10. public function myDetail()
  11. {
  12. // 한국 시간으로 설정
  13. date_default_timezone_set('Asia/Seoul');
  14. $db = \Config\Database::connect();
  15. $request = $this->request->getJSON(true);
  16. $memberType = isset($request['MEMBER_TYPE']) ? $request['MEMBER_TYPE'] : null;
  17. $memberSeq = isset($request['MEMBER_SEQ']) ? $request['MEMBER_SEQ'] : null;
  18. try {
  19. // 멤버 타입에 따라 다른 테이블에서 조회
  20. switch ($memberType) {
  21. case 'INFLUENCER':
  22. case 'I':
  23. $userInfo = $db->table('USER_LIST')
  24. ->where('SEQ', $memberSeq)
  25. ->get()
  26. ->getRowArray();
  27. break;
  28. case 'VENDOR':
  29. case 'V':
  30. $userInfo = $db->table('VENDOR_LIST')
  31. ->where('SEQ', $memberSeq)
  32. ->get()
  33. ->getRowArray();
  34. break;
  35. case 'BRAND':
  36. case 'B':
  37. $userInfo = $db->table('BRAND_LIST')
  38. ->where('SEQ', $memberSeq)
  39. ->get()
  40. ->getRowArray();
  41. break;
  42. default:
  43. return $this->respond([
  44. 'status' => 'fail',
  45. 'message' => '알 수 없는 회원 타입입니다.'
  46. ], 400);
  47. }
  48. if (!$userInfo) {
  49. return $this->respond([
  50. 'status' => 'fail',
  51. 'message' => '사용자 정보를 찾을 수 없습니다.'
  52. ], 404);
  53. }
  54. // MEMBER_TYPE 정규화 (I -> INFLUENCER 등)
  55. if (isset($userInfo['MEMBER_TYPE'])) {
  56. switch ($userInfo['MEMBER_TYPE']) {
  57. case 'I':
  58. $userInfo['MEMBER_TYPE'] = 'INFLUENCER';
  59. break;
  60. case 'V':
  61. $userInfo['MEMBER_TYPE'] = 'VENDOR';
  62. break;
  63. case 'B':
  64. $userInfo['MEMBER_TYPE'] = 'BRAND';
  65. break;
  66. }
  67. }
  68. return $this->respond($userInfo, 200);
  69. } catch (\Exception $e) {
  70. return $this->respond([
  71. 'status' => 'fail',
  72. 'message' => 'DB 오류: ' . $e->getMessage()
  73. ], 500);
  74. }
  75. }
  76. // 사용자 정보 수정
  77. public function myUpdate(){
  78. // 한국 시간으로 설정
  79. date_default_timezone_set('Asia/Seoul');
  80. $db = \Config\Database::connect();
  81. $request = $this->request->getJSON(true);
  82. $memberType = isset($request['MEMBER_TYPE']) ? $request['MEMBER_TYPE'] : null;
  83. $memberSeq = isset($request['MEMBER_SEQ']) ? $request['MEMBER_SEQ'] : null;
  84. try {
  85. // 멤버 타입에 따라 다른 테이블에서 업데이트
  86. switch ($memberType) {
  87. case 'INFLUENCER':
  88. case 'I':
  89. $table = 'USER_LIST';
  90. break;
  91. case 'VENDOR':
  92. case 'V':
  93. $table = 'VENDOR_LIST';
  94. break;
  95. case 'BRAND':
  96. case 'B':
  97. $table = 'BRAND_LIST';
  98. break;
  99. default:
  100. return $this->respond([
  101. 'status' => 'fail',
  102. 'message' => '알 수 없는 회원 타입입니다.'
  103. ], 400);
  104. }
  105. // 업데이트할 데이터
  106. $data = [];
  107. // 공통 필드
  108. if (isset($request['EMAIL'])) {
  109. $data['EMAIL'] = $request['EMAIL'];
  110. }
  111. if (isset($request['PASSWORD']) && !empty($request['PASSWORD'])) {
  112. $data['PASSWORD'] = password_hash($request['PASSWORD'], PASSWORD_DEFAULT);
  113. }
  114. // 인플루언서 전용 필드
  115. if (($memberType === 'INFLUENCER' || $memberType === 'I')) {
  116. if (isset($request['PHONE'])) {
  117. $data['PHONE'] = $request['PHONE'];
  118. }
  119. if (isset($request['NICK_NAME'])) {
  120. $data['NICK_NAME'] = $request['NICK_NAME'];
  121. }
  122. if (isset($request['SNS_TYPE'])) {
  123. $data['SNS_TYPE'] = $request['SNS_TYPE'];
  124. }
  125. if (isset($request['SNS_LINK_ID'])) {
  126. $data['SNS_LINK_ID'] = $request['SNS_LINK_ID'];
  127. }
  128. }
  129. // 벤더/브랜드 전용 필드
  130. if (($memberType !== 'INFLUENCER' && $memberType !== 'I')) {
  131. if (isset($request['COMPANY_NAME'])) {
  132. $data['COMPANY_NAME'] = $request['COMPANY_NAME'];
  133. }
  134. if (isset($request['HP'])) {
  135. $data['HP'] = $request['HP'];
  136. }
  137. }
  138. if (empty($data)) {
  139. return $this->respond([
  140. 'status' => 'fail',
  141. 'message' => '업데이트할 데이터가 없습니다.'
  142. ], 400);
  143. }
  144. // 업데이트 실행
  145. $result = $db->table($table)
  146. ->where('SEQ', $memberSeq)
  147. ->update($data);
  148. if ($result) {
  149. return $this->respond([
  150. 'status' => 'success',
  151. 'message' => '사용자 정보가 성공적으로 업데이트되었습니다.',
  152. 'data' => $data
  153. ], 200);
  154. } else {
  155. return $this->respond([
  156. 'status' => 'fail',
  157. 'message' => '업데이트에 실패했습니다.'
  158. ], 500);
  159. }
  160. } catch (\Exception $e) {
  161. return $this->respond([
  162. 'status' => 'fail',
  163. 'message' => 'DB 오류: ' . $e->getMessage()
  164. ], 500);
  165. }
  166. }
  167. }