request->getJSON(true); // USER_LIST 테이블 모든 레코드 가져오기 $builder = $db->table('USER_LIST'); $lists = $builder->get()->getResultArray(); // PASSWORD 필드 제거 $filtered = array_map(function($row) { unset($row['PASSWORD']); return $row; }, $lists); // 역순으로 정렬 $filtered = array_reverse($filtered); // JSON 응답 return $this->respond($filtered, 200); } //브랜드 리스트 public function brandlist() { // DB 객체 얻기 $db = \Config\Database::connect(); $request = $this->request->getJSON(true); $builder = $db->table('BRAND_LIST'); $lists = $builder->get()->getResultArray(); // PASSWORD 필드 제거 $filtered = array_map(function($row) { unset($row['PASSWORD']); return $row; }, $lists); // 역순으로 정렬 $filtered = array_reverse($filtered); // JSON 응답 return $this->respond($filtered, 200); } public function userSearch() { $db = \Config\Database::connect(); // 요청 바디에서 filter와 keyword 추출 (예: {filter: "id", keyword: "admin"}) $request = $this->request->getJSON(true); // 필수값 체크 if ( !isset($request['compId']) || !isset($request['filter']) || !isset($request['keyword']) || !in_array($request['filter'], ['id', 'name', 'status']) ) { return $this->respond([ 'status' => 'fail', 'message' => 'filter(id, name, status)와 keyword가 필요합니다.' ], 400); } $filterMap = [ 'id' => 'ID', 'name' => 'NAME', 'status' => 'STATUS' ]; $filterColumn = $filterMap[$request['filter']]; $keyword = $request['keyword']; $status = isset($request['status']) ? $request['status'] : null; if (!isset($request['compId'])) { return $this->respond([ 'status' => 'fail', 'message' => 'filter(compId)가 누락되었습니다.' ], 400); } $compId = $request['compId']; // 평문 검색 (LIKE 연산 사용) $builder = $db->table('ADM_LIST'); if ($compId !== '0-000000') { $builder->where('COMP_ID', $compId); } // 사용중 관리자 리스트 검색, 삭제 관리자 리스트 검색 분리 if ($status === '-1') { $builder->where('STATUS', '-1'); } else { $builder->whereIn('STATUS', ['0', '1']); } $builder->like($filterColumn, $keyword); $lists = $builder->get()->getResultArray(); // PASSWORD 제거 $filtered = array_map(function($row) { unset($row['PASSWORD']); return $row; }, $lists); // 최신순(역순) 정렬 (ID 기준 또는 원하는 기준으로 변경 가능) $filtered = array_reverse($filtered); return $this->respond($filtered, 200); } //관리자 등록 public function userRegister() { // DB 객체 얻기 $db = \Config\Database::connect(); $request = $this->request->getJSON(true); if ( !isset($request['id']) || !isset($request['password']) || !isset($request['name']) || !isset($request['email']) || !isset($request['phone']) ) { return $this->respond([ 'status' => 'fail', 'message' => '필수 값이 누락됐습니다.(id, password, name, email, phone)' ], 400); } // 비밀번호 해시 $hashedPassword = password_hash($request['password'], PASSWORD_DEFAULT); $userData = [ 'id' => $request['id'], 'password' => $hashedPassword, 'name' => $request['name'], 'email' => $request['email'], 'regdate' => date('Y-m-d', strtotime($request['regdate'])), 'phone' => $request['phone'], 'status' => 0, 'comp_name' => $request['comp_name'], 'comp_id' => $request['comp_id'], ]; $builder = $db->table('ADM_LIST'); if ($builder->insert($userData)) { return $this->respond(['message' => '관리자 등록 성공'], 201); } else { return $this->respond(['error' => '등록 실패'], 500); } } //아이디 중복체크 public function userIDChk(){ $db = \Config\Database::connect(); $request = $this->request->getJSON(true); if (!isset($request['id']) || trim($request['id']) === '') { return $this->respond([ 'status' => 'fail', 'message' => 'ID가 없습니다.' ], 400); } $id = $request['id']; // 영어 소문자와 숫자만 허용 (정규식 체크) if (!preg_match('/^[a-z0-9]+$/', $id)) { return $this->respond([ 'status' => 'fail', 'message' => 'ID는 영어 소문자와 숫자만 사용할 수 있습니다.' ], 400); } $builder = $db->table('ADM_LIST'); $exists = $builder->where('id', $id)->countAllResults(); if ($exists > 0) { return $this->respond([ 'status' => 'fail', 'message' => '이미 사용 중인 ID입니다.' ], 409); } return $this->respond([ 'status' => 'success', 'message' => '사용 가능한 ID입니다.' ], 200); } //관리자 수정 public function userUpdate(){ $db = \Config\Database::connect(); $request = $this->request->getJSON(true); if ( !isset($request['id']) || !isset($request['name']) || !isset($request['phone']) || !isset($request['email']) || !isset($request['regdate']) || !isset($request['status']) ) { return $this->respond([ 'status' => 'fail', 'message' => '필수 값이 누락됐습니다.(id, name, phone, email, regdate, status)' ], 400); } $id = $request['id']; $userData = [ 'EMAIL' => $request['email'], 'REGDATE' => date('Y-m-d', strtotime($request['regdate'])), 'PHONE' => $request['phone'], 'STATUS' => $request['status'], 'COMP_NAME' => $request['comp_name'], 'COMP_ID' => $request['comp_id'], ]; //비밀번호 변경시 if (!empty($request['password'])) { $userData['PASSWORD'] = password_hash($request['password'], PASSWORD_DEFAULT); } $updated = $db->table('ADM_LIST')->where('ID', $id)->update($userData); if ($updated) { return $this->respond([ 'status' => 'success', 'message' => '관리자 정보가 수정되었습니다.' ], 200); } else { return $this->respond([ 'status' => 'fail', 'message' => '수정에 실패했습니다.' ], 500); } } //관리자 상세 public function userDetail($id) { // DB 객체 얻기 $db = \Config\Database::connect(); $builder = $db->table('ADM_LIST'); $user = $builder->where('id', $id)->get()->getRowArray(); if($user){ // 보안상 패스워드는 반환 X unset($user['password']); return $this->respond($user, 200); } else { return $this->respond([ 'status' => 'fail', 'message' => '해당 ID의 관리자가 존재하지 않습니다.' ], 404); } } //관리자 상태 변경(삭제, 복원) public function userStatusUpdate($id){ $db = \Config\Database::connect(); $user = $db->table('ADM_LIST')->select('STATUS')->where('ID', $id)->get()->getRowArray(); $currentStatus = (int) $user['STATUS']; if ($currentStatus == -1 ){ // 복원 시 사용중 상태로 변경 $nextStatus = 0; } else { // 삭제 시 삭제 상태로 변경 $nextStatus = -1; } $updated = $db->table('ADM_LIST') ->where('ID', $id) ->update(['STATUS' => $nextStatus, 'REGDATE' => date('Y-m-d') ]); if ($updated) { return $this->respond(['status' => 'success', 'message' => '상태 변경 완료', 'new_status' => $nextStatus], 200); } else { return $this->respond(['status' => 'fail', 'message' => '상태 변경 실패']); } } // contact_inf로 사용자 정보 조회 public function getInfName($seq) { $db = \Config\Database::connect(); // SEQ로 USER_LIST에서 사용자 정보 조회 $builder = $db->table('USER_LIST'); $user = $builder->select('SEQ, NAME, NICK_NAME') ->where('SEQ', $seq) ->get() ->getRowArray(); if ($user) { return $this->respond([ 'status' => 'success', 'data' => [ 'SEQ' => $user['SEQ'], 'NAME' => $user['NAME'], 'NICK_NAME' => $user['NICK_NAME'] ] ], 200); } else { return $this->respond([ 'status' => 'fail', 'message' => '해당 SEQ의 사용자를 찾을 수 없습니다.' ], 404); } } public function getBrdName($seq) { $db = \Config\Database::connect(); $builder = $db->table('BRAND_LIST'); $user = $builder->select('SEQ, COMPANY_NAME') ->where('SEQ', $seq) ->get() ->getRowArray(); if ($user) { return $this->respond([ 'status' => 'success', 'data' => [ 'SEQ' => $user['SEQ'], 'NAME' => $user['COMPANY_NAME'], ] ], 200); } else { return $this->respond([ 'status' => 'fail', 'message' => '해당 SEQ의 사용자를 찾을 수 없습니다.' ], 404); } } }