
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 | 하석형 | 최초 등록
* 2024.05.21 | 방선주 | saveBbsCn, updateBbsCn, fileDownload 추가
* 2024.05.22 | 방선주 | updateVwCnt 추가
* 2024.05.31 | 방선주 | ansSaveProc, ansUpdateProc 추가
* 2024.06.07 | 방선주 | ansDeleteProc 추가
* 2024.06.13 | 방선주 | findFiveNotice 추가
* 2025.03.21 | 하석형 | 코드 리펙토링
*
* 게시판 내용 관련 컨트롤러
*/
@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;
/**
* @param bbsCn - 게시판 내용 정보
* @param multipartFileList - 첨부파일 목록
* @param multipartImgList - 이미지 파일 목록
* @return ResponseEntity - 게시판 내용 등록 결과를 포함하는 응답
*
* 게시판 내용 등록
*/
@PostMapping(path = "/saveBbsCn.file")
public ResponseEntity<?> saveBbsCn(@RequestPart BbsCnVO bbsCn, List<MultipartFile> multipartFileList, List<MultipartFile> multipartImgList) throws Exception {
// 게시판 내용 등록
HashMap<String, Object> result = bbsCnService.saveBbsCn(bbsCn, multipartFileList, multipartImgList);
return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
}
/**
* @param params - 검색조건 및 페이징 정보
* @return ResponseEntity - 게시판 내용 목록 조회 결과를 포함하는 응답
*
* 게시판 내용 목록 조회
*/
@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);
}
/**
* @param bbsCnVO - 게시판 내용 정보
* @return ResponseEntity - 게시판 내용 상세 조회 결과를 포함하는 응답
*
* 게시판 내용 상세 조회
*/
@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);
}
/**
* @param params - 게시판 내용 정보
* @param deleteFileList - 삭제할 파일 목록
* @param multipartFileList - 첨부파일 목록
* @param deleteImgFileList - 삭제할 이미지 파일 목록
* @param multipartImgList - 이미지 파일 목록
* @return ResponseEntity - 게시판 내용 수정 결과를 포함하는 응답
*
* 게시판 내용 수정
*/
@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);
return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
}
/**
* @param bbsCnVO - 게시판 내용 정보
* @return ResponseEntity - 게시판 내용 삭제 결과를 포함하는 응답
*
* 게시판 내용 삭제
*/
@PostMapping("/deleteProc.json")
public ResponseEntity<?> deleteProc(@RequestBody BbsCnVO bbsCnVO) {
// 게시판 내용 수정
int result = bbsCnService.deleteBbsCn(bbsCnVO);
return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
}
/**
* @param params - 게시판 내용 정보
* @return ResponseEntity - 조회수 증가 결과를 포함하는 응답
*
* 조회수 증가
*/
@PostMapping("/updateVwCnt.json")
public ResponseEntity<?> updateVwCnt(@RequestBody HashMap<String, Object> params) {
// 조회수 증가
int result = bbsCnService.updateVwCnt(params);
return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
}
/**
* @param fileId - 첨부파일 아이디
* @param response - HTTP 응답 객체
* @return ResponseEntity - 댓글 등록 결과를 포함하는 응답
*
* 게시판 첨부 파일 다운로드
*/
@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);
}
}
}
}
/********* 질의형 게시판 **********/
/**
* @param bbsCnVO - 게시판 내용 정보
* @return ResponseEntity - 답변 등록 결과를 포함하는 응답
*
* 질의형 게시판 답변 등록
*/
@PostMapping("/ansSaveProc.json")
public ResponseEntity<?> ansSaveProc(@RequestBody BbsCnVO bbsCnVO) {
HashMap<String, Object> result = bbsCnService.saveAnswer(bbsCnVO);
return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
}
/**
* @param bbsCnVO - 게시판 내용 정보
* @return ResponseEntity - 답변 등록 결과를 포함하는 응답
*
* 질의형 게시판 답변 수정
*/
@PostMapping("/ansUpdateProc.json")
public ResponseEntity<?> ansUpdateProc(@RequestBody BbsCnVO bbsCnVO) {
HashMap<String, Object> result = bbsCnService.updateAnswer(bbsCnVO);
return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
}
/**
* @param bbsCnVO - 게시판 내용 정보
* @return ResponseEntity - 답변 삭제 결과를 포함하는 응답
*
* 질의형 게시판 답변 삭제
*/
@PostMapping("/ansDeleteProc.json")
public ResponseEntity<?> ansDeleteProc(@RequestBody BbsCnVO bbsCnVO) {
int result = bbsCnService.deleteAns(bbsCnVO);
return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
}
/**
* @param bbsCn - 게시판 내용 정보
* @return ResponseEntity - 게시판 내용 목록 조회 결과를 포함하는 응답
*
* 공지사항 최신 5개 조회
*/
@PostMapping("/findFiveNotice.json")
public ResponseEntity<?> findFiveNotice(@RequestBody BbsCnVO bbsCn) {
// 공지사항 최신 5개 조회
List<BbsCnVO> result = bbsCnService.findFiveNotice(bbsCn);
return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
}
}