
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
package com.takensoft.cms.bbs.web;
import com.takensoft.cms.bbs.service.BbsCnService;
import com.takensoft.cms.bbs.service.BbsMngService;
import com.takensoft.cms.bbs.service.CmntService;
import com.takensoft.cms.bbs.vo.BbsCnVO;
import com.takensoft.cms.bbs.vo.BbsMngVO;
import com.takensoft.cms.bbs.vo.CmntVO;
import com.takensoft.common.file.service.FileService;
import com.takensoft.common.file.vo.FileVO;
import com.takensoft.common.message.MessageCode;
import com.takensoft.common.util.ResponseData;
import com.takensoft.common.util.ResponseUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import jakarta.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author 하석형
* @since 2024.05.09
* @modification
* since | author | description
* 2024.05.09 | 하석형 | 최초 등록
*
* 게시판 내용 관련 컨트롤러
*/
@RestController
@RequiredArgsConstructor
@Slf4j
@RequestMapping(value="/sys/bbsCn")
public class BbsCnController {
private final ResponseUtil resUtil;
private final BbsCnService bbsCnService;
private final BbsMngService bbsMngService;
private final FileService fileService;
/**
* @author 하석형
* @since 2024.05.09
* @param bbsCnVO
* @return
* @throws Exception
*
* 게시판 내용 등록
*/
// @PostMapping("/saveProc.json")
// public ResponseEntity<?> saveProc(@RequestBody BbsCnVO bbsCnVO) throws Exception {
// // 응답 처리
// HttpHeaders headers = new HttpHeaders();
// headers.setContentType(new MediaType("application", "json", Charset.forName("UTF-8")));
// ResponseData responseData = new ResponseData();
//
// // 게시판 내용 등록
// int result = bbsCnService.saveBbsCn(bbsCnVO);
// if(result > 0) {
// responseData.setStatus(HttpStatus.OK);
// responseData.setMessage("정상적으로 등록 처리되었습니다.");
// responseData.setData(result);
// return new ResponseEntity<>(responseData, headers, HttpStatus.OK);
// } else {
// responseData.setStatus(HttpStatus.INTERNAL_SERVER_ERROR);
// responseData.setMessage("등록에 실패하였습니다.\n담당자에게 문의하세요.");
// return new ResponseEntity<>(responseData, headers, HttpStatus.INTERNAL_SERVER_ERROR);
// }
// }
/**
* @author 방선주
* @since 2024.05.21
* @param bbsCn, multipartFileList
* @return
* @throws Exception
*
* 게시판 내용 등록
*/
@PostMapping(path = "/saveBbsCn.file")
public ResponseEntity<?> saveBbsCn(@RequestPart BbsCnVO bbsCn, List<MultipartFile> multipartFileList, List<MultipartFile> multipartImgList) throws Exception {
// 응답 처리
HttpHeaders headers = new HttpHeaders();
headers.setContentType(new MediaType("application", "json", Charset.forName("UTF-8")));
ResponseData responseData = new ResponseData();
// 게시판 내용 등록
HashMap<String, Object> result = bbsCnService.saveBbsCn(bbsCn, multipartFileList, multipartImgList);
int insertResult = (int) result.get("result");
if (insertResult > 0) {
return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
} else if (insertResult == -1){
responseData.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
responseData.setStatusText(HttpStatus.INTERNAL_SERVER_ERROR);
responseData.setMessage("아래의 금지어가 포함되어 있습니다.\n* " + result.get("word"));
return new ResponseEntity<>(responseData, headers, HttpStatus.INTERNAL_SERVER_ERROR);
} else {
return resUtil.errorRes(MessageCode.COMMON_INSERT_FAIL);
}
}
/**
* @author 하석형
* @since 2024.05.09
* @param params
* @return
* @throws Exception
*
* 게시판 내용 목록 조회
*/
@PostMapping("/findAll.json")
public ResponseEntity<?> findAll(@RequestBody HashMap<String, String> params) throws Exception {
// 게시판 내용 목록 조회
Map<String, Object> result = bbsCnService.findAllBbsCn(params);
// 응답처리
return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
}
/**
* @author 하석형
* @since 2024.05.09
* @param bbsCnVO
* @return
* @throws Exception
*
* 게시판 내용 상세 조회
*/
@PostMapping("/findByBbsCn.json")
public ResponseEntity<?> findByBbsCn(@RequestBody BbsCnVO bbsCnVO) throws Exception {
// 게시판 관리 정보 조회
BbsMngVO bbsMng = bbsMngService.findByBbsMngId(bbsCnVO.getBbsMngId());
// 게시판 내용 상세 조회
BbsCnVO bbsCn = bbsCnService.findByBbsId(bbsCnVO.getBbsId());
// 첨부파일 목록 조회
String fileMngId = bbsCn.getAtchFileMngId();
List<HashMap<String,Object>> fileList = bbsCnService.fileListPathChange(fileMngId);
//이미지 파일 목록 조회
String imgFileMngId = bbsCn.getImgFileMngId();
List<HashMap<String,Object>> imgFileList = bbsCnService.fileListPathChange(imgFileMngId);
// 이전글 다음글 조회
BbsCnVO prevBbsCn = bbsCnService.findPrevBbsCn(bbsCnVO);
BbsCnVO nextBbsCn = bbsCnService.findNextBbsCn(bbsCnVO);
Map<String, Object> result = new HashMap<String, Object>();
result.put("bbsMng", bbsMng);
result.put("bbsCn", bbsCn);
result.put("fileList", fileList);
result.put("imgFileList", imgFileList);
result.put("prevBbsCn", prevBbsCn);
result.put("nextBbsCn", nextBbsCn);
// 응답 처리
return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
}
// /**
// * @author 하석형
// * @since 2024.05.09
// * @param bbsCnVO
// * @return
// * @throws Exception
// *
// * 게시판 내용 수정
// */
// @PostMapping("/updateProc.json")
// public ResponseEntity<?> updateProc(@RequestBody BbsCnVO bbsCnVO) throws Exception {
// HttpHeaders headers = new HttpHeaders();
// headers.setContentType(new MediaType("application", "json", Charset.forName("UTF-8")));
// ResponseData responseData = new ResponseData();
//
// // 게시판 내용 수정
// int result = bbsCnService.updateBbsCn(bbsCnVO);
//
// // 응답 처리
// if(result > 0) {
// responseData.setStatus(HttpStatus.OK);
// responseData.setMessage("정상적으로 수정 처리되었습니다.");
// return new ResponseEntity<>(responseData, headers, HttpStatus.OK);
// } else {
// responseData.setStatus(HttpStatus.INTERNAL_SERVER_ERROR);
// responseData.setMessage("수정에 실패하였습니다.\n담당자에게 문의하세요.");
// return new ResponseEntity<>(responseData, headers, HttpStatus.INTERNAL_SERVER_ERROR);
// }
// }
/**
* @author 방선주
* @since 2024.05.21
* @param params, multipartFileList
* @return
* @throws Exception
*
* 게시판 내용 수정
*/
@PostMapping(path = "/updateBbsCn.file")
public ResponseEntity<?> updateBbsCn(@RequestPart HashMap<String, Object> params, @RequestPart List<HashMap<String, Object>> deleteFileList, List<MultipartFile> multipartFileList, @RequestPart List<HashMap<String, Object>> deleteImgFileList, List<MultipartFile> multipartImgList) throws Exception {
// 게시판 내용 수정
HashMap<String, Object> result = bbsCnService.updateBbsCn(params, deleteFileList, multipartFileList, deleteImgFileList, multipartImgList);
int updateResult = (int) result.get("result");
// 응답 처리
HttpHeaders headers = new HttpHeaders();
headers.setContentType(new MediaType("application", "json", Charset.forName("UTF-8")));
ResponseData responseData = new ResponseData();
if (updateResult > 0) {
return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
} else if (updateResult == -1){
responseData.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
responseData.setStatusText(HttpStatus.INTERNAL_SERVER_ERROR);
responseData.setMessage("아래의 금지어가 포함되어 있습니다.\n* " + result.get("word"));
return new ResponseEntity<>(responseData, headers, HttpStatus.INTERNAL_SERVER_ERROR);
} else {
return resUtil.errorRes(MessageCode.COMMON_UPDATE_FAIL);
}
}
/**
* @author 하석형
* @since 2024.05.09
* @param bbsCnVO
* @return
* @throws Exception
*
* 게시판 내용 삭제
*/
@PostMapping("/deleteProc.json")
public ResponseEntity<?> deleteProc(@RequestBody BbsCnVO bbsCnVO) throws Exception {
// 게시판 내용 수정
int result = bbsCnService.deleteBbsCn(bbsCnVO);
// 응답 처리
if(result > 0) {
return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
} else {
return resUtil.errorRes(MessageCode.COMMON_DELETE_FAIL);
}
}
/**
* @author 방선주
* @since 2024.05.22
* @param params
* @return
* @throws Exception
*
* 조회수 증가
*/
@PostMapping("/updateVwCnt.json")
public ResponseEntity<?> updateVwCnt(@RequestBody HashMap<String, Object> params) throws Exception {
// 조회수 증가
int result = bbsCnService.updateVwCnt(params);
// 응답 처리
if(result > 0) {
return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
} else {
return resUtil.errorRes(MessageCode.COMMON_UPDATE_FAIL);
}
}
/**
* @author 방선주
* @since 2024.05.21
* @param fileId
* @return
* @throws Exception
*
* 게시판 첨부 파일 다운로드
*/
@PostMapping("/fileDownload.json")
public void fileDownload(@RequestBody int fileId, HttpServletResponse response) throws Exception {
// 파일 정보 조회
FileVO file = fileService.fileSelectOne(fileId);
File downloadFile = null;
// 받은 파일 정보로 파일 다운로드 생성
if(file != null){
String filePath = file.getAbsltPath();
downloadFile = new File(filePath);
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(file.getFileNm(), "UTF-8") + "\"");
response.setHeader("Content-Transfer-Encoding", "binary");
try (OutputStream out = response.getOutputStream(); FileInputStream fis = new FileInputStream(downloadFile)) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
}
}
}
/********* 질의형 게시판 **********/
/**
* @author 방선주
* @since 2024.05.31
* @param bbsCnVO
* @return
* @throws Exception
*
* 질의형 게시판 답변 등록
*/
@PostMapping("/ansSaveProc.json")
public ResponseEntity<?> ansSaveProc(@RequestBody BbsCnVO bbsCnVO) throws Exception {
// 응답 처리
HttpHeaders headers = new HttpHeaders();
headers.setContentType(new MediaType("application", "json", Charset.forName("UTF-8")));
ResponseData responseData = new ResponseData();
// int result = 1;
HashMap<String, Object> result = bbsCnService.saveAnswer(bbsCnVO);
int insertResult = (int) result.get("result");
if(insertResult > 0) {
return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
} else if (insertResult == -1){
responseData.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
responseData.setStatusText(HttpStatus.INTERNAL_SERVER_ERROR);
responseData.setMessage("아래의 금지어가 포함되어 있습니다.\n* " + result.get("word"));
return new ResponseEntity<>(responseData, headers, HttpStatus.INTERNAL_SERVER_ERROR);
} else {
return resUtil.errorRes(MessageCode.COMMON_INSERT_FAIL);
}
}
/**
* @author 방선주
* @since 2024.05.31
* @param bbsCnVO
* @return
* @throws Exception
*
* 질의형 게시판 답변 수정
*/
@PostMapping("/ansUpdateProc.json")
public ResponseEntity<?> ansUpdateProc(@RequestBody BbsCnVO bbsCnVO) throws Exception {
// 응답 처리
HttpHeaders headers = new HttpHeaders();
headers.setContentType(new MediaType("application", "json", Charset.forName("UTF-8")));
ResponseData responseData = new ResponseData();
// int result = 1;
HashMap<String, Object> result = bbsCnService.updateAnswer(bbsCnVO);
int updateResult = (int) result.get("result");
if(updateResult > 0) {
return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
} else if (updateResult == -1){
responseData.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
responseData.setStatusText(HttpStatus.INTERNAL_SERVER_ERROR);
responseData.setMessage("아래의 금지어가 포함되어 있습니다.\n* " + result.get("word"));
return new ResponseEntity<>(responseData, headers, HttpStatus.INTERNAL_SERVER_ERROR);
} else {
return resUtil.errorRes(MessageCode.COMMON_UPDATE_FAIL);
}
}
/**
* @author 방선주
* @since 2024.06.07
* @param bbsCnVO
* @return
* @throws Exception
*
* 질의형 게시판 답변 삭제
*/
@PostMapping("/ansDeleteProc.json")
public ResponseEntity<?> ansDeleteProc(@RequestBody BbsCnVO bbsCnVO) throws Exception {
// 응답 처리
// int result = 1;
int result = bbsCnService.deleteAns(bbsCnVO);
if(result > 0) {
return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
} else {
return resUtil.errorRes(MessageCode.COMMON_DELETE_FAIL);
}
}
/**
* @author 방선주
* @since 2024.06.13
* @param
* @return
* @throws Exception
*
* 공지사항 최신 5개 조회
*/
@PostMapping("/findFiveNotice.json")
public ResponseEntity<?> findFiveNotice(@RequestBody BbsCnVO bbsCn) throws Exception {
// 공지사항 최신 5개 조회
List<BbsCnVO> result = bbsCnService.findFiveNotice(bbsCn);
// 응답 처리
return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
}
}