request->getJSON(true); if (!isset($request['compId'])) { return $this->respond([ 'status' => 'fail', 'message' => 'filter(compId)가 누락되었습니다.' ], 400); } // ADM_LIST 테이블 모든 레코드 가져오기 $status = isset($request['status']) ? $request['status'] : null; $compId = $request['compId']; $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']); } $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 mngSearch() { $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 mngRegister() { // 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); $mngData = [ '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($mngData)) { return $this->respond(['message' => '관리자 등록 성공'], 201); } else { return $this->respond(['error' => '등록 실패'], 500); } } //아이디 중복체크 public function mngIDChk(){ $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 mngUpdate(){ $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']; $mngData = [ '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'])) { $mngData['PASSWORD'] = password_hash($request['password'], PASSWORD_DEFAULT); } $updated = $db->table('ADM_LIST')->where('ID', $id)->update($mngData); if ($updated) { return $this->respond([ 'status' => 'success', 'message' => '관리자 정보가 수정되었습니다.' ], 200); } else { return $this->respond([ 'status' => 'fail', 'message' => '수정에 실패했습니다.' ], 500); } } //관리자 상세 public function mngDetail($id) { // DB 객체 얻기 $db = \Config\Database::connect(); $builder = $db->table('ADM_LIST'); $mng = $builder->where('id', $id)->get()->getRowArray(); if($mng){ // 보안상 패스워드는 반환 X unset($mng['password']); return $this->respond($mng, 200); } else { return $this->respond([ 'status' => 'fail', 'message' => '해당 ID의 관리자가 존재하지 않습니다.' ], 404); } } //관리자 상태 변경(삭제, 복원) public function mngStatusUpdate($id){ $db = \Config\Database::connect(); $mng = $db->table('ADM_LIST')->select('STATUS')->where('ID', $id)->get()->getRowArray(); $currentStatus = (int) $mng['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' => '상태 변경 실패']); } } //관리자 삭제 public function mngDelete($id) { $db = \Config\Database::connect(); //관리자 삭제 $deleted = $db->table('ADM_LIST')->where('ID', $id)->delete(); if ($deleted) { return $this->respond(['status' => 'success', 'message' => '관리자 영구 삭제!'], 200); } else { return $this->respond(['status' => 'fail', 'message' => '삭제 실패!'], 500); } } }