request->getJSON(true); $userSeq = isset($request['USER_SEQ']) ? $request['USER_SEQ'] : null; $builder = $db->table('CS_BOARD C') ->select('C.*, U.NICK_NAME, U.NAME, V.COMPANY_NAME, V.NAME') ->join('USER_LIST U', 'C.USER_SEQ = U.SEQ', 'left') ->join('VENDOR_LIST V', 'C.USER_SEQ = V.SEQ', 'left'); //userSeq가 0이 아니면 본인이 쓴 글만 조회 if( $userSeq !== 0 ){ $builder->where('C.USER_SEQ', $userSeq); } $builder->orderBy('C.SEQ', 'DESC'); $lists = $builder->get()->getResultArray(); return $this->respond($lists, 200); } //문의 등록 public function csRegister() { $db = \Config\Database::connect(); $request = \Config\Services::request(); $regdate = date('Y-m-d H:i:s'); // 기본 유효성 검사 if ( !$request->getPost('USER_SEQ') || !$request->getPost('CATEGORY') || !$request->getPost('TITLE') || !$request->getPost('CONTENT') ) { return $this->respond([ 'status' => 'fail', 'message' => '필수 값이 누락됐습니다.' ], 400); } $db->transBegin(); // 트랜잭션 시작 try { // 첨부파일 처리 $fileName = null; $fileNameOrigin = null; $files = $request->getFiles(); if (isset($files['files']) && !empty($files['files'])) { $file = $files['files'][0]; // 첫 번째 파일만 처리 if ($file && $file->isValid() && !$file->hasMoved()) { $fileNameOrigin = $file->getClientName(); // 원본 파일명 $fileName = $file->getRandomName(); // 랜덤파일명 생성 $file->move(WRITEPATH . 'uploads/cs/', $fileName); // 저장 } } // CS_BOARD에 문의 정보 등록 $csData = [ 'USER_SEQ' => $request->getPost('USER_SEQ'), 'CATEGORY' => $request->getPost('CATEGORY'), 'TITLE' => $request->getPost('TITLE'), 'CONTENT' => $request->getPost('CONTENT'), 'STATUS' => '0', // 0: 대기중, 1: 답변완료 'REGDATE' => $regdate ]; // 파일이 있으면 파일 정보도 추가 if ($fileName) { $csData['FILE_NAME'] = $fileName; $csData['FILE_NAME_ORIGIN'] = $fileNameOrigin; } $insertResult = $db->table('CS_BOARD')->insert($csData); if (!$insertResult) { $error = $db->error(); return $this->respond([ 'status' => 'fail', 'message' => 'Insert 실패: ' . $error['message'] ], 500); } $csSeq = $db->insertID(); // 생성된 문의 SEQ값 $db->transCommit(); return $this->respond([ 'status' => 'success', 'success' => true, 'cs_seq' => $csSeq ], 201); } catch (\Exception $e) { $db->transRollback(); return $this->respond([ 'status' => 'fail', 'message' => 'DB 오류: ' . $e->getMessage() ], 500); } } //문의 상세 public function csDetail($seq) { // DB 객체 얻기 $db = \Config\Database::connect(); $builder = $db->table('CS_BOARD C') ->select('C.*, U.NICK_NAME, U.NAME, V.COMPANY_NAME, V.NAME') ->join('USER_LIST U', 'C.USER_SEQ = U.SEQ', 'left') ->join('VENDOR_LIST V', 'C.USER_SEQ = V.SEQ', 'left'); $item = $builder->where('C.seq', $seq)->get()->getRowArray(); if($item){ return $this->respond($item, 200); } else { return $this->respond([ 'status' => 'fail', 'message' => '유효하지 않은 seq입니다.' ], 404); } } //답변 등록 public function csAnswer() { $db = \Config\Database::connect(); $request = $this->request->getJSON(true); $answerDate = date('Y-m-d H:i:s'); // 기본 유효성 검사 if ( !isset($request['CS_SEQ']) || !isset($request['ANSWER']) || !isset($request['ADMIN_SEQ']) ) { return $this->respond([ 'status' => 'fail', 'message' => '필수 값이 누락됐습니다.' ], 400); } $db->transBegin(); // 트랜잭션 시작 try { // CS_BOARD 업데이트 $updateData = [ 'ADMIN_ANSWER' => $request['ANSWER'], 'ANSWER_REGDATE' => $answerDate, 'ADMIN_SEQ' => $request['ADMIN_SEQ'], 'STATUS' => '1' // 답변완료 상태로 변경 ]; $updateResult = $db->table('CS_BOARD') ->where('SEQ', $request['CS_SEQ']) ->update($updateData); if (!$updateResult) { throw new \Exception('답변 등록에 실패했습니다.'); } $db->transCommit(); return $this->respond([ 'status' => 'success', 'message' => '답변이 등록되었습니다.' ], 200); } catch (\Exception $e) { $db->transRollback(); return $this->respond([ 'status' => 'fail', 'message' => 'DB 오류: ' . $e->getMessage() ], 500); } } //상세 다운로드 public function file($fileName) { helper('filesystem'); $db = \Config\Database::connect(); $path = WRITEPATH . 'uploads/cs/' . $fileName; if (!file_exists($path)) { return $this->failNotFound('파일을 찾을 수 없습니다.'); } // DB에서 원본 파일명 조회 $fileInfo = $db->table('CS_BOARD') ->select('FILE_NAME_ORIGIN') ->where('FILE_NAME', $fileName) ->get() ->getRowArray(); $originalFileName = $fileInfo && $fileInfo['FILE_NAME_ORIGIN'] ? $fileInfo['FILE_NAME_ORIGIN'] : $fileName; return $this->response ->download($path, null) ->setFileName($originalFileName); } }