| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- <?php
- namespace App\Controllers;
- use CodeIgniter\RESTful\ResourceController;
- class Cs extends ResourceController
- {
- //문의 리스트
- public function csList()
- {
- $db = \Config\Database::connect();
- // POST JSON 파라미터 받기
- $request = $this->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);
- }
- }
|