From e49577a02a79a64e1b916540764f47a09085cd04 Mon Sep 17 00:00:00 2001 From: dyhj625 Date: Fri, 17 Jan 2025 13:06:11 +0900 Subject: [PATCH 01/15] =?UTF-8?q?=EA=B2=8C=EC=8B=9C=ED=8C=90=20=EC=88=98?= =?UTF-8?q?=EC=A0=95,=20=ED=9C=B4=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/api/BoardController.java | 157 ++++-------------- .../controller/api/VacationController.java | 13 ++ .../localhost/mapper/localvacaMapper.java | 7 +- .../localhost/service/localvacaService.java | 4 + src/main/resources/mapper/localbordMapper.xml | 25 +-- src/main/resources/mapper/localvacaMapper.xml | 9 + 6 files changed, 76 insertions(+), 139 deletions(-) diff --git a/src/main/java/io/company/localhost/controller/api/BoardController.java b/src/main/java/io/company/localhost/controller/api/BoardController.java index 387bb23..9cb7c40 100644 --- a/src/main/java/io/company/localhost/controller/api/BoardController.java +++ b/src/main/java/io/company/localhost/controller/api/BoardController.java @@ -21,6 +21,7 @@ import java.sql.Blob; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -56,7 +57,7 @@ public class BoardController { /** * 공지사항 목록 조회 * @ReqMap map 요청 파라미터 (searchKeyword) - * @return 페이징된 공지사항 목록 + * @return 전체 공지사항 목록 */ @GetMapping("/notices") public ApiResponse> getNotices(@ReqMap MapDto map) { @@ -76,7 +77,7 @@ public class BoardController { /** * 자유/익명 게시판 목록 조회 - * @ReqMap map 요청 파라미터 (page, size, searchKeyword 포함) + * @ReqMap map 요청 파라미터 (page, searchKeyword) * @return 페이징된 자유/익명 게시판 목록 */ @GetMapping("/general") @@ -121,56 +122,28 @@ public class BoardController { /** * 게시물 작성 - * @ReqMap map 요청 파라미터 (page, size, searchKeyword 포함) + * @ReqMap map 요청 파라미터 (LOCBRDTTL, LOCBRDCON, MEMBERSEQ, LOCBRDTYP, + * LOCBRDPWD(익명일떄에만), LOCBRDCAT(지식커뮤니티만)) * @return 작성된 게시물의 ID */ @PostMapping public ApiResponse createBoard(@ReqMap MapDto map) { BigInteger createdIdx = boardService.createBoard(map); // 작성된 게시물의 idx를 반환 Map responseData = new HashMap<>(); - responseData.put("boardId", createdIdx); + responseData.put("CMNBRDSEQ", createdIdx); responseData.put("message", "게시물이 작성되었습니다."); return ApiResponse.ok(responseData); } /** * 첨부파일 추가 - * @param boardId 게시물 ID - * @param file 업로드된 파일 - * @param filePath 파일 저장 경로 - * @param originalFileName 원본 파일명 - * @param fileExtension 파일 확장자 - * @param fileSize 파일 크기 - * @param registrantId 등록자 ID - * @param fileName 저장될 파일명 + * @ReqMap map 요청 파라미터 (CMNFLEREG, CMNFLESIZ, CMNFLEEXT, CMNFLEORG, CMNFLENAM, CMNFLEPAT, CMNBRDSEQ) * @return 첨부파일 저장 결과 메시지 */ - @PostMapping("/{boardId}/attachments") - public ApiResponse uploadAttachment( - @PathVariable("boardId") Long boardId, - @RequestParam("file") MultipartFile file, - @RequestParam("CMNFLEPAT") String filePath, - @RequestParam("CMNFLEORG") String originalFileName, - @RequestParam("CMNFLEEXT") String fileExtension, - @RequestParam("CMNFLESIZ") Long fileSize, - @RequestParam("CMNFLEREG") Long registrantId, - @RequestParam("CMNFLENAM") String fileName - ) { - // 데이터 준비 - MapDto fileData = new MapDto(); - fileData.put("CMNBRDSEQ", boardId); - fileData.put("CMNFLENAM", fileName); // 업로드된 파일 이름 - fileData.put("CMNFLEORG", originalFileName); - fileData.put("CMNFLEPAT", filePath); - fileData.put("CMNFLEEXT", fileExtension); - fileData.put("CMNFLESIZ", fileSize); - fileData.put("CMNFLEREG", registrantId); - fileData.put("CMNFLERDT", new Date()); // 등록일 현재 시간 - - log.info("Uploading attachment for board ID: {}", boardId); - + @PostMapping("/{CMNBRDSEQ}/attachments") + public ApiResponse uploadAttachment(@ReqMap MapDto map) { // 파일 데이터 저장 - boardService.addAttachment(fileData); + boardService.addAttachment(map); return ApiResponse.ok("첨부파일이 저장되었습니다."); } @@ -230,7 +203,7 @@ public class BoardController { /** * 게시물 수정 * @param boardId 게시물 ID - * @ReqMap map 수정 데이터 (제목, 내용 등) + * @ReqMap map 수정 데이터 (LOCBRDTTL, LOCBRDCON) * @return 수정 결과 메시지 */ @PutMapping("/{boardId}") @@ -241,73 +214,40 @@ public class BoardController { } /** - * 게시물 좋아요/싫어요 추가 - * @param boardId 게시물 ID - * @ReqMap map 좋아요/싫어요 데이터 + * 게시물,댓글 좋아요/싫어요 추가 + * @ReqMap map 데이터 (LOCCMTSEQ, MEMBERSEQ, LOCGOBGOD, LOCGOBBAD, LOCBRDSEQ) * @return 반응 추가 결과 메시지 */ - @PostMapping("/{boardId}/reaction") - public ApiResponse reactToBoard(@PathVariable("boardId") Long boardId, @ReqMap MapDto map) { - map.put("LOCBRDSEQ", boardId); + @PostMapping("/{LOCBRDSEQ}/{LOCCMTSEQ}/reaction") + public ApiResponse reactToBoard(@ReqMap MapDto map) { boardService.reactToBoard(map); return ApiResponse.ok("반응이 추가되었습니다."); } - /** + /** * 댓글/대댓글 조회 * @param boardId 게시물 ID * @return 댓글과 대댓글의 계층 구조 데이터 */ @GetMapping("/{boardId}/comments") - public ApiResponse>> getComments(@PathVariable("boardId") int boardId) { + public ApiResponse> getComments(@PathVariable("boardId") int boardId) { // 모든 댓글과 대댓글 조회 List comments = boardService.getComments(boardId); - // 댓글과 대댓글을 계층 구조로 정렬 - Map> commentMap = new HashMap<>(); - for (MapDto comment : comments) { - int commentId = (int) comment.get("LOCCMTSEQ"); - Integer parentId = (Integer) comment.get("LOCCMTRPY"); - - Map commentData = new HashMap<>(comment); - commentData.put("replies", new ArrayList<>()); // 대댓글 리스트 초기화 - - if (parentId == null) { - // 댓글인 경우 - commentMap.put(commentId, commentData); - } else { - // 대댓글인 경우, 부모 댓글의 "replies"에 추가 - Map parentComment = commentMap.get(parentId); - if (parentComment != null) { - List> replies = (List>) parentComment.get("replies"); - replies.add(commentData); - } - } - } - - // 최상위 댓글 리스트 반환 - List> result = new ArrayList<>(commentMap.values()); - return ApiResponse.ok(result); + return ApiResponse.ok(comments); } + /** * 댓글/대댓글 작성 * @param boardId 게시물 ID - * @ReqMap map 댓글 데이터 (내용, 부모 ID 등) + * @ReqMap map 댓글 데이터 (LOCBRDSEQ, LOCCMTRPY, LOCCMTPNT, LOCCMTPWD, MEMBERSEQ 등) * @return 작성 결과 메시지 */ - @PostMapping("/{boardId}/comment") - public ApiResponse addCommentOrReply(@PathVariable("boardId") int boardId, @ReqMap MapDto map) { - map.put("LOCBRDSEQ", boardId); - + @PostMapping("/{LOCBRDSEQ}/comment") + public ApiResponse addCommentOrReply(@ReqMap MapDto map) { // 부모 댓글 확인 - Integer parentCommentId = (Integer) map.get("LOCCMTRPY"); - if (parentCommentId != null) { - MapDto parentComment = boardService.getCommentById(parentCommentId); - if (parentComment == null) { - throw new IllegalArgumentException("Invalid parent comment ID: " + parentCommentId); - } - } + boardService.addCommentOrReply(map); return ApiResponse.ok("댓글 또는 대댓글이 작성되었습니다."); @@ -316,7 +256,7 @@ public class BoardController { /** * 댓글/대댓글 수정 * @param commentId 댓글 ID - * @ReqMap map 수정 데이터 (내용, 비밀번호 등) + * @ReqMap map 수정 데이터 (LOCCMTSEQ, LOCCMTRPY ) * @return 수정 결과 메시지 */ @PutMapping("/comment/{commentId}") @@ -327,9 +267,6 @@ public class BoardController { throw new IllegalArgumentException("Comment not found for ID: " + commentId); } - // 부모 댓글 ID는 수정 불가 - map.remove("LOCCMTRPY"); - map.put("LOCCMTSEQ", commentId); boardService.updateComment(map); @@ -339,7 +276,6 @@ public class BoardController { /** * 댓글/대댓글 삭제 * @param commentId 댓글 ID - * @ReqMap map 요청 데이터 (비밀번호 등) * @return 삭제 결과 메시지 */ @DeleteMapping("/comment/{commentId}") @@ -362,40 +298,17 @@ public class BoardController { return ApiResponse.ok(boardService.checkCommentPassword(map)); } - /** - * 게시물 비밀번호 확인 - * @param boardId 게시물 ID - * @ReqMap map 비밀번호 데이터 - * @return 비밀번호 확인 결과 - */ - @PostMapping("/{boardId}/password") - public ApiResponse checkBoardPassword(@PathVariable("boardId") int boardId, @ReqMap MapDto map) { - map.put("LOCBRDSEQ", boardId); - return ApiResponse.ok(boardService.checkBoardPassword(map)); - } +// /** +// * 게시물 비밀번호 확인 +// * @param boardId 게시물 ID +// * @ReqMap map 비밀번호 데이터 +// * @return 비밀번호 확인 결과 +// */ +// @PostMapping("/{boardId}/password") +// public ApiResponse checkBoardPassword(@PathVariable("boardId") int boardId, @ReqMap MapDto map) { +// map.put("LOCBRDSEQ", boardId); +// return ApiResponse.ok(boardService.checkBoardPassword(map)); +// } - /** - * 비밀게시판 여부 확인 - * @param boardId 게시물 ID - * @return 비밀게시판 여부 - */ - @GetMapping("/{boardId}/isSecret") - public ApiResponse isSecretBoard(@PathVariable("boardId") Long boardId) { - log.info("Checking if board ID {} is secret", boardId); - return ApiResponse.ok(boardService.isSecretBoard(boardId)); - } - - /** - * 댓글 좋아요/싫어요 추가 - * @param commentId 댓글 ID - * @ReqMap map 좋아요/싫어요 데이터 - * @return 반응 추가 결과 메시지 - */ - @PostMapping("/comment/{commentId}/reaction") - public ApiResponse reactToComment(@PathVariable("commentId") int commentId, @ReqMap MapDto map) { - map.put("LOCCMTSEQ", commentId); - boardService.reactToComment(map); - return ApiResponse.ok("Comment reaction added."); - } } diff --git a/src/main/java/io/company/localhost/controller/api/VacationController.java b/src/main/java/io/company/localhost/controller/api/VacationController.java index 4ae99f3..60dda49 100644 --- a/src/main/java/io/company/localhost/controller/api/VacationController.java +++ b/src/main/java/io/company/localhost/controller/api/VacationController.java @@ -1,6 +1,7 @@ package io.company.localhost.controller.api; import java.util.List; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -45,4 +46,16 @@ public class VacationController { // 성공적으로 저장된 경우 응답 반환 return ApiResponse.ok("모든 휴가가 성공적으로 저장되었습니다."); } + + /** + * 휴가 정보를 조회하여 프론트엔드로 전달 + */ + @GetMapping("/list") + public ApiResponse> getVacationList() { + + // 서비스 호출을 통해 데이터 조회 + List vacationList = localVacaService.getVacationList(); + + return ApiResponse.ok(vacationList); + } } diff --git a/src/main/java/io/company/localhost/mapper/localvacaMapper.java b/src/main/java/io/company/localhost/mapper/localvacaMapper.java index f639c4b..b6bca47 100644 --- a/src/main/java/io/company/localhost/mapper/localvacaMapper.java +++ b/src/main/java/io/company/localhost/mapper/localvacaMapper.java @@ -1,13 +1,18 @@ package io.company.localhost.mapper; +import java.util.List; + import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import io.company.localhost.common.dto.MapDto; @Mapper public interface localvacaMapper { - void insertVacation(MapDto vacationRequest); + void insertVacation(MapDto map); + + List findVacations(); } diff --git a/src/main/java/io/company/localhost/service/localvacaService.java b/src/main/java/io/company/localhost/service/localvacaService.java index 0a65289..91086c3 100644 --- a/src/main/java/io/company/localhost/service/localvacaService.java +++ b/src/main/java/io/company/localhost/service/localvacaService.java @@ -18,4 +18,8 @@ public class localvacaService { localvacaMapper.insertVacation(vacationRequest); } + public List getVacationList() { + return localvacaMapper.findVacations(); + } + } diff --git a/src/main/resources/mapper/localbordMapper.xml b/src/main/resources/mapper/localbordMapper.xml index 3a50be3..bb20a33 100644 --- a/src/main/resources/mapper/localbordMapper.xml +++ b/src/main/resources/mapper/localbordMapper.xml @@ -14,7 +14,7 @@ AND LOCBRDTTL LIKE CONCAT('%', #{searchKeyword}, '%') - ORDER BY LOCBRDRDT DESC + ORDER BY LOCBRDUDT DESC @@ -29,7 +29,7 @@ AND LOCBRDTTL LIKE CONCAT('%', #{searchKeyword}, '%') - ORDER BY LOCBRDRDT DESC + ORDER BY LOCBRDUDT DESC @@ -47,7 +47,7 @@ CMNFLEEXT,CMNFLESIZ,CMNFLEREG,CMNFLERDT ) VALUES ( #{CMNBRDSEQ},#{CMNFLENAM},#{CMNFLEORG},#{CMNFLEPAT}, - #{CMNFLEEXT},#{CMNFLESIZ},#{CMNFLEREG},#{CMNFLERDT} + #{CMNFLEEXT},#{CMNFLESIZ},#{CMNFLEREG},NOW() ) @@ -96,26 +96,26 @@ LOCCMTUDT,LOCCMTPWD,LOCCMTRDT,LOCCMTPNT FROM localcomt WHERE LOCBRDSEQ = #{boardId} - ORDER BY LOCCMTPNT ASC, LOCCMTRDT ASC + ORDER BY LOCCMTPNT ASC, LOCCMTUDT ASC - INSERT INTO localcomt (LOCBRDSEQ, LOCCMTRPY, LOCCMTPWD, LOCCMTRDT, LOCCMTPNT) - VALUES (#{LOCBRDSEQ}, #{LOCCMTRPY}, #{LOCCMTPWD}, NOW(), #{LOCCMTPNT}) + INSERT INTO localcomt (LOCBRDSEQ, LOCCMTRPY, LOCCMTPWD, LOCCMTRDT, LOCCMTUDT, LOCCMTPNT, MEMBERSEQ) + VALUES (#{LOCBRDSEQ}, #{LOCCMTRPY}, #{LOCCMTPWD}, NOW(), NOW() , #{LOCCMTPNT}, #{MEMBERSEQ}) UPDATE localcomt SET LOCCMTRPY = #{LOCCMTRPY}, LOCCMTUDT = NOW() - WHERE LOCCMTSEQ = #{LOCCMTSEQ} AND LOCCMTPWD = #{LOCCMTPWD} + WHERE LOCCMTSEQ = #{LOCCMTSEQ} DELETE FROM localcomt - WHERE LOCCMTSEQ = #{LOCCMTSEQ} AND LOCCMTPWD = #{LOCCMTPWD} + WHERE LOCCMTSEQ = #{LOCCMTSEQ} @@ -132,15 +132,8 @@ - - - - INSERT INTO localcomt (LOCCMTSEQ, MEMBERSEQ, LOCGORGOD, LOCGORBAD) - VALUES (#{LOCCMTSEQ}, #{MEMBERSEQ}, #{LOCGORGOD}, #{LOCGORBAD}) - ON DUPLICATE KEY UPDATE LOCGORGOD = #{LOCGORGOD}, LOCGORBAD = #{LOCGORBAD} - + SELECT + MEMBERSEQ + LOCVACUDT, + LOCVACTYP + FROM + localvaca + \ No newline at end of file From a3ebdc3c6597a24ab1d3565ade36795750e73507 Mon Sep 17 00:00:00 2001 From: dyhj625 Date: Fri, 17 Jan 2025 13:12:14 +0900 Subject: [PATCH 02/15] =?UTF-8?q?=E3=84=B4=E3=84=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/api/BoardController.java | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/src/main/java/io/company/localhost/controller/api/BoardController.java b/src/main/java/io/company/localhost/controller/api/BoardController.java index 9cb7c40..a707f0a 100644 --- a/src/main/java/io/company/localhost/controller/api/BoardController.java +++ b/src/main/java/io/company/localhost/controller/api/BoardController.java @@ -298,17 +298,27 @@ public class BoardController { return ApiResponse.ok(boardService.checkCommentPassword(map)); } -// /** -// * 게시물 비밀번호 확인 -// * @param boardId 게시물 ID -// * @ReqMap map 비밀번호 데이터 -// * @return 비밀번호 확인 결과 -// */ -// @PostMapping("/{boardId}/password") -// public ApiResponse checkBoardPassword(@PathVariable("boardId") int boardId, @ReqMap MapDto map) { -// map.put("LOCBRDSEQ", boardId); -// return ApiResponse.ok(boardService.checkBoardPassword(map)); -// } + /** + * 게시물 비밀번호 확인 + * @param boardId 게시물 ID + * @ReqMap map 비밀번호 데이터 + * @return 비밀번호 확인 결과 + */ + @PostMapping("/{boardId}/password") + public ApiResponse checkBoardPassword(@PathVariable("boardId") int boardId, @ReqMap MapDto map) { + map.put("LOCBRDSEQ", boardId); + return ApiResponse.ok(boardService.checkBoardPassword(map)); + } +// /** +// * 비밀게시판 여부 확인 +// * @param boardId 게시물 ID +// * @return 비밀게시판 여부 +// */ +// @GetMapping("/{boardId}/isSecret") +// public ApiResponse isSecretBoard(@PathVariable("boardId") Long boardId) { +// log.info("Checking if board ID {} is secret", boardId); +// return ApiResponse.ok(boardService.isSecretBoard(boardId)); +// } } From cd81956d7c518c7668bd2f060d80aac255aea5a4 Mon Sep 17 00:00:00 2001 From: dyhj625 Date: Fri, 17 Jan 2025 13:29:19 +0900 Subject: [PATCH 03/15] =?UTF-8?q?=EA=B2=8C=EC=8B=9C=ED=8C=90=20=EC=95=94?= =?UTF-8?q?=ED=98=B8=ED=99=94=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/api/BoardController.java | 47 ++++++++++++++----- .../localhost/mapper/localbordMapper.java | 10 ++-- .../localhost/service/localbordService.java | 21 ++++----- src/main/resources/mapper/localbordMapper.xml | 16 ++++--- 4 files changed, 58 insertions(+), 36 deletions(-) diff --git a/src/main/java/io/company/localhost/controller/api/BoardController.java b/src/main/java/io/company/localhost/controller/api/BoardController.java index a707f0a..3bfd031 100644 --- a/src/main/java/io/company/localhost/controller/api/BoardController.java +++ b/src/main/java/io/company/localhost/controller/api/BoardController.java @@ -26,6 +26,7 @@ import java.util.List; import java.util.Map; import org.springframework.http.ResponseEntity; +import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -53,6 +54,7 @@ import lombok.extern.slf4j.Slf4j; @Slf4j public class BoardController { private final localbordService boardService; + private final PasswordEncoder passwordEncoder; /** * 공지사항 목록 조회 @@ -128,11 +130,18 @@ public class BoardController { */ @PostMapping public ApiResponse createBoard(@ReqMap MapDto map) { - BigInteger createdIdx = boardService.createBoard(map); // 작성된 게시물의 idx를 반환 - Map responseData = new HashMap<>(); - responseData.put("CMNBRDSEQ", createdIdx); - responseData.put("message", "게시물이 작성되었습니다."); - return ApiResponse.ok(responseData); + // 비밀번호 암호화 (익명 게시판 등 비밀번호가 필요한 경우) + if (map.containsKey("LOCBRDPWD")) { + String rawPassword = map.getString("LOCBRDPWD"); + String encodedPassword = passwordEncoder.encode(rawPassword); + map.put("LOCBRDPWD", encodedPassword); + } + + BigInteger createdIdx = boardService.createBoard(map); // 작성된 게시물의 idx를 반환 + Map responseData = new HashMap<>(); + responseData.put("CMNBRDSEQ", createdIdx); + responseData.put("message", "게시물이 작성되었습니다."); + return ApiResponse.ok(responseData); } /** @@ -246,8 +255,12 @@ public class BoardController { */ @PostMapping("/{LOCBRDSEQ}/comment") public ApiResponse addCommentOrReply(@ReqMap MapDto map) { - // 부모 댓글 확인 - + // 비밀번호 암호화 (비밀번호가 있는 경우에만) + if (map.containsKey("LOCCMTPWD")) { + String rawPassword = map.getString("LOCCMTPWD"); + String encodedPassword = passwordEncoder.encode(rawPassword); + map.put("LOCCMTPWD", encodedPassword); + } boardService.addCommentOrReply(map); return ApiResponse.ok("댓글 또는 대댓글이 작성되었습니다."); @@ -294,10 +307,15 @@ public class BoardController { */ @PostMapping("/comment/{commentId}/password") public ApiResponse checkCommentPassword(@PathVariable("commentId") int commentId, @ReqMap MapDto map) { - map.put("LOCCMTSEQ", commentId); - return ApiResponse.ok(boardService.checkCommentPassword(map)); + // DB에서 암호화된 비밀번호 조회 + String storedPassword = boardService.getCommentPassword(commentId); + String rawPassword = map.getString("LOCCMTPWD"); + + // 비밀번호 검증 + boolean isMatch = passwordEncoder.matches(rawPassword, storedPassword); + return ApiResponse.ok(isMatch); } - + /** * 게시물 비밀번호 확인 * @param boardId 게시물 ID @@ -306,8 +324,13 @@ public class BoardController { */ @PostMapping("/{boardId}/password") public ApiResponse checkBoardPassword(@PathVariable("boardId") int boardId, @ReqMap MapDto map) { - map.put("LOCBRDSEQ", boardId); - return ApiResponse.ok(boardService.checkBoardPassword(map)); + // DB에서 암호화된 비밀번호 조회 + String storedPassword = boardService.getBoardPassword(boardId); + String rawPassword = map.getString("LOCBRDPWD"); + + // 비밀번호 검증 + boolean isMatch = passwordEncoder.matches(rawPassword, storedPassword); + return ApiResponse.ok(isMatch); } // /** diff --git a/src/main/java/io/company/localhost/mapper/localbordMapper.java b/src/main/java/io/company/localhost/mapper/localbordMapper.java index eae03d2..0bf37d3 100644 --- a/src/main/java/io/company/localhost/mapper/localbordMapper.java +++ b/src/main/java/io/company/localhost/mapper/localbordMapper.java @@ -42,12 +42,12 @@ public interface localbordMapper { // 댓글/대댓글 삭제 void deleteComment(MapDto map); + + // 게시물 비밀번호 조회 + String selectCommentPassword(int commentId); - // 게시물 비밀번호 확인 - boolean checkBoardPassword(MapDto map); - - // 댓글 비밀번호 확인 - boolean checkCommentPassword(MapDto map); + // 댓글 비밀번호 조회 + String selectBoardPassword(int boardId); // 비밀 게시판 여부 확인 boolean isSecretBoard(Long boardId); diff --git a/src/main/java/io/company/localhost/service/localbordService.java b/src/main/java/io/company/localhost/service/localbordService.java index b584c0d..c8225cd 100644 --- a/src/main/java/io/company/localhost/service/localbordService.java +++ b/src/main/java/io/company/localhost/service/localbordService.java @@ -77,21 +77,16 @@ public class localbordService { boardMapper.deleteComment(map); } - public boolean checkBoardPassword(MapDto map) { - return boardMapper.checkBoardPassword(map); - } - - public boolean checkCommentPassword(MapDto map) { - return boardMapper.checkCommentPassword(map); - } - - - public boolean isSecretBoard(Long boardId) { - return boardMapper.isSecretBoard(boardId); + public String getCommentPassword(int commentId) { + return boardMapper.selectCommentPassword(commentId); } - public void reactToComment(MapDto map) { - boardMapper.reactToComment(map); + public String getBoardPassword(int boardId) { + return boardMapper.selectBoardPassword(boardId); + } + + public boolean isSecretBoard(Long boardId) { + return boardMapper.isSecretBoard(boardId); } public MapDto getCommentById(int commentId) { diff --git a/src/main/resources/mapper/localbordMapper.xml b/src/main/resources/mapper/localbordMapper.xml index bb20a33..eb2ac08 100644 --- a/src/main/resources/mapper/localbordMapper.xml +++ b/src/main/resources/mapper/localbordMapper.xml @@ -118,14 +118,18 @@ WHERE LOCCMTSEQ = #{LOCCMTSEQ} - - + SELECT LOCCMTPWD + FROM localcomt + WHERE LOCCMTSEQ = #{commentId} - - + SELECT LOCBRDPWD + FROM localbord + WHERE LOCBRDSEQ = #{boardId} From 77730be07f5dff7c6c2258a2923de13229c06754 Mon Sep 17 00:00:00 2001 From: dyhj625 Date: Fri, 17 Jan 2025 15:25:42 +0900 Subject: [PATCH 04/15] =?UTF-8?q?=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=B2=A8?= =?UTF-8?q?=EB=B6=80=ED=8C=8C=EC=9D=BC=EC=9C=A0=EB=AC=B4,=EB=8C=93?= =?UTF-8?q?=EA=B8=80=EA=B0=AF=EC=88=98,=EC=A2=8B=EC=95=84=EC=9A=94/?= =?UTF-8?q?=EC=8B=AB=EC=96=B4=EC=9A=94=20=EA=B0=AF=EC=88=98=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/api/BoardController.java | 37 ++++++++++++++++++- .../localhost/mapper/localbordMapper.java | 17 +++++++-- .../localhost/service/localbordService.java | 18 +++++++++ src/main/resources/mapper/localbordMapper.xml | 35 ++++++++++++++++++ 4 files changed, 103 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/company/localhost/controller/api/BoardController.java b/src/main/java/io/company/localhost/controller/api/BoardController.java index 3bfd031..b67a73a 100644 --- a/src/main/java/io/company/localhost/controller/api/BoardController.java +++ b/src/main/java/io/company/localhost/controller/api/BoardController.java @@ -72,6 +72,12 @@ public class BoardController { Blob blob = (Blob) content; post.put("content", safeBlobToString(blob)); } + + // "id" 값을 Number로 받고 longValue()로 변환 + Object idObject = post.get("id"); + long postId = ((Number) idObject).longValue(); + post.put("hasAttachment", boardService.hasAttachments(postId)); + } return ApiResponse.ok(posts); @@ -93,6 +99,19 @@ public class BoardController { Blob blob = (Blob) content; post.put("content", safeBlobToString(blob)); } + + // "id" 값을 Number로 받고 longValue()로 변환 + Object idObject = post.get("id"); + if (idObject instanceof Number) { + long postId = ((Number) idObject).longValue(); + post.put("commentCount", boardService.getCommentCount(postId)); + post.put("hasAttachment", boardService.hasAttachments(postId)); + MapDto reactions = boardService.getBoardReactions(postId); + post.put("likeCount", reactions.getOrDefault("likeCount", 0)); + post.put("dislikeCount", reactions.getOrDefault("dislikeCount", 0)); + } else { + post.put("commentCount", 0); // id가 없거나 잘못된 경우 기본값 설정 + } } return ApiResponse.ok(posts); @@ -182,16 +201,32 @@ public class BoardController { throw new RuntimeException("Failed to process Blob content", e); } } + + MapDto reactions = boardService.getBoardReactions(boardId); + boardDetail.put("likeCount", reactions.getOrDefault("likeCount", 0)); + boardDetail.put("dislikeCount", reactions.getOrDefault("dislikeCount", 0)); - // 첨부파일 및 댓글 조회 List attachments = boardService.getAttachments(boardId); List comments = boardService.getComments(boardId.intValue()); + List commentReactions = boardService.getCommentReactions(boardId); + for (MapDto comment : comments) { + Integer commentId = (Integer) comment.get("LOCCMTSEQ"); + for (MapDto reaction : commentReactions) { + if (reaction.get("LOCCMTSEQ").equals(commentId)) { + comment.put("likeCount", reaction.getOrDefault("likeCount", 0)); + comment.put("dislikeCount", reaction.getOrDefault("dislikeCount", 0)); + } + } + } + // 결과 조합 MapDto result = new MapDto(); result.put("boardDetail", boardDetail); result.put("attachments", attachments); result.put("comments", comments); + result.put("commentCount", boardService.getCommentCount(boardId)); + result.put("hasAttachment", boardService.hasAttachments(boardId)); return ApiResponse.ok(result); } diff --git a/src/main/java/io/company/localhost/mapper/localbordMapper.java b/src/main/java/io/company/localhost/mapper/localbordMapper.java index 0bf37d3..cc40a1f 100644 --- a/src/main/java/io/company/localhost/mapper/localbordMapper.java +++ b/src/main/java/io/company/localhost/mapper/localbordMapper.java @@ -55,13 +55,24 @@ public interface localbordMapper { // 게시물 상세보기 MapDto selectBoardDetail(Long boardId); + // 댓글 갯수 + int countComments(Long boardId); + + // 첨부파일 유무 + int countAttachments(Long boardId); + + // 게시물 좋아요/싫어요 개수 + MapDto getBoardReactions(Long boardId); + + // 댓글 좋아요/싫어요 개수 + List getCommentReactions(Long boardId); + // 첨부파일 가져오기 List selectAttachments(Long boardId); - //댓글 좋아요/싫어요추가 - void reactToComment(MapDto map); - //댓글id 확인 MapDto getCommentById(int commentId); + + } diff --git a/src/main/java/io/company/localhost/service/localbordService.java b/src/main/java/io/company/localhost/service/localbordService.java index c8225cd..11de3a1 100644 --- a/src/main/java/io/company/localhost/service/localbordService.java +++ b/src/main/java/io/company/localhost/service/localbordService.java @@ -92,6 +92,24 @@ public class localbordService { public MapDto getCommentById(int commentId) { return boardMapper.getCommentById(commentId); } + + public int getCommentCount(Long boardId) { + return boardMapper.countComments(boardId); + } + + public boolean hasAttachments(Long boardId) { + int count = boardMapper.countAttachments(boardId); + return count > 0; // 첨부파일 개수가 0보다 크면 true 반환 + } + + public MapDto getBoardReactions(Long boardId) { + return boardMapper.getBoardReactions(boardId); + } + + public List getCommentReactions(Long boardId) { + return boardMapper.getCommentReactions(boardId); + } + } diff --git a/src/main/resources/mapper/localbordMapper.xml b/src/main/resources/mapper/localbordMapper.xml index eb2ac08..8abc715 100644 --- a/src/main/resources/mapper/localbordMapper.xml +++ b/src/main/resources/mapper/localbordMapper.xml @@ -146,5 +146,40 @@ WHERE LOCCMTSEQ = #{commentId} + + + + + + + + + + + + From 6a110d799ecfc0a931beb7ad8621bcc0ce66d3cd Mon Sep 17 00:00:00 2001 From: khj0414 Date: Fri, 17 Jan 2025 15:52:03 +0900 Subject: [PATCH 05/15] =?UTF-8?q?=ED=80=BC=20=EA=B2=BD=EB=A1=9C=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/common/ImageUploadController.java | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/main/java/io/company/localhost/controller/common/ImageUploadController.java b/src/main/java/io/company/localhost/controller/common/ImageUploadController.java index 2fa8a72..f722dce 100644 --- a/src/main/java/io/company/localhost/controller/common/ImageUploadController.java +++ b/src/main/java/io/company/localhost/controller/common/ImageUploadController.java @@ -21,11 +21,7 @@ import java.nio.file.Paths; import java.util.UUID; import org.springframework.beans.factory.annotation.Value; -import org.springframework.core.io.FileSystemResource; -import org.springframework.core.io.Resource; import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @@ -39,7 +35,7 @@ import lombok.extern.slf4j.Slf4j; @Slf4j @RestController -@RequestMapping("/api/img") +@RequestMapping("/api/quilleditor") @RequiredArgsConstructor public class ImageUploadController { @@ -47,9 +43,9 @@ public class ImageUploadController { private String boardFilePath; /** - * 에디터 내 이미지 업로드 - * @form-data file 업로드할 파일실제경로/파일이름 - * @return + * quilleditor 안에서 삽입된 이미지를 서버에 저장하는 메소드 + * @form-data 서버에 저장된 이미지 경로와 이름 + * @return */ @ParameterCheck @PostMapping("/upload") From aaa172c50ddeff9dcf66e90f6c18d6757e898a00 Mon Sep 17 00:00:00 2001 From: dyhj625 Date: Mon, 20 Jan 2025 11:05:41 +0900 Subject: [PATCH 06/15] =?UTF-8?q?=EC=A2=8B=EC=95=84=EC=9A=A7/=EC=8B=AB?= =?UTF-8?q?=EC=96=B4=EC=9A=94,=20=EA=B2=8C=EC=8B=9C=EB=AC=BC=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C,=EB=8C=93=EA=B8=80=EC=82=AD=EC=A0=9C=EC=99=80=20?= =?UTF-8?q?=EB=8C=80=EB=8C=93=EA=B8=80=20=EC=82=AD=EC=A0=9C=20=EC=BF=BC?= =?UTF-8?q?=EB=A6=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/api/BoardController.java | 3 +- .../localhost/mapper/localbordMapper.java | 27 ++++++- .../localhost/service/localbordService.java | 34 +++++++- src/main/resources/mapper/localbordMapper.xml | 79 ++++++++++++++++--- 4 files changed, 127 insertions(+), 16 deletions(-) diff --git a/src/main/java/io/company/localhost/controller/api/BoardController.java b/src/main/java/io/company/localhost/controller/api/BoardController.java index b67a73a..0384760 100644 --- a/src/main/java/io/company/localhost/controller/api/BoardController.java +++ b/src/main/java/io/company/localhost/controller/api/BoardController.java @@ -265,8 +265,9 @@ public class BoardController { @PostMapping("/{LOCBRDSEQ}/{LOCCMTSEQ}/reaction") public ApiResponse reactToBoard(@ReqMap MapDto map) { boardService.reactToBoard(map); - return ApiResponse.ok("반응이 추가되었습니다."); + return ApiResponse.ok("반응이 성공적으로 처리되었습니다."); } + /** * 댓글/대댓글 조회 diff --git a/src/main/java/io/company/localhost/mapper/localbordMapper.java b/src/main/java/io/company/localhost/mapper/localbordMapper.java index cc40a1f..e9291ab 100644 --- a/src/main/java/io/company/localhost/mapper/localbordMapper.java +++ b/src/main/java/io/company/localhost/mapper/localbordMapper.java @@ -24,12 +24,21 @@ public interface localbordMapper { // 게시물 삭제 void deleteBoard(MapDto map); + + // 게시물 삭제시 댓글/대댓글 삭제 + void deleteCommentsByBoardId(MapDto map); // 게시물 수정 void updateBoard(MapDto map); + + // 기존 반응 조회 + MapDto findReaction(MapDto map); - // 게시물 좋아요/싫어요 추가 - void reactToBoard(MapDto map); + // 새 반응 삽입 + void insertReaction(MapDto map); + + // 기존 반응 업데이트 + void updateReaction(MapDto map); // 댓글 조회 List getComments(int boardSeq); @@ -40,8 +49,20 @@ public interface localbordMapper { // 댓글/대댓글 수정 void updateComment(MapDto map); - // 댓글/대댓글 삭제 + // 대댓글인지 확인 + boolean isReply(MapDto map); + + // 댓글에 대댓글이 있는지 확인 + boolean hasReplies(MapDto map); + + // 댓글 내용만 삭제 처리 (대댓글 유지) + void softDeleteComment(MapDto map); + + // 댓글 삭제 (대댓글 없음) void deleteComment(MapDto map); + + // 대댓글 삭제 + void deleteReply(MapDto map); // 게시물 비밀번호 조회 String selectCommentPassword(int commentId); diff --git a/src/main/java/io/company/localhost/service/localbordService.java b/src/main/java/io/company/localhost/service/localbordService.java index 11de3a1..97b738e 100644 --- a/src/main/java/io/company/localhost/service/localbordService.java +++ b/src/main/java/io/company/localhost/service/localbordService.java @@ -49,6 +49,7 @@ public class localbordService { public void deleteBoard(MapDto map) { + boardMapper.deleteCommentsByBoardId(map); boardMapper.deleteBoard(map); } @@ -57,7 +58,16 @@ public class localbordService { } public void reactToBoard(MapDto map) { - boardMapper.reactToBoard(map); + // 기존 반응 확인 + MapDto existingReaction = boardMapper.findReaction(map); + + if (existingReaction != null) { + // 기존 반응이 있는 경우 업데이트 + boardMapper.updateReaction(map); + } else { + // 기존 반응이 없는 경우 새로 삽입 + boardMapper.insertReaction(map); + } } public List getComments(int boardSeq) { @@ -65,6 +75,9 @@ public class localbordService { } public void addCommentOrReply(MapDto map) { + if (map.get("LOCCMTPNT") == null) { + map.put("LOCCMTPNT", null); // 부모 ID가 없는 경우 null 처리 + } boardMapper.addCommentOrReply(map); } @@ -74,7 +87,24 @@ public class localbordService { } public void deleteComment(MapDto map) { - boardMapper.deleteComment(map); + // 댓글인지 대댓글인지 확인 + boolean isReply = boardMapper.isReply(map); + + if (isReply) { + // 대댓글 삭제 + boardMapper.deleteReply(map); + } else { + // 댓글인 경우 + boolean hasReplies = boardMapper.hasReplies(map); + + if (hasReplies) { + // 대댓글이 있는 경우 내용 업데이트 + boardMapper.softDeleteComment(map); + } else { + // 대댓글이 없는 경우 댓글 삭제 + boardMapper.deleteComment(map); + } + } } public String getCommentPassword(int commentId) { diff --git a/src/main/resources/mapper/localbordMapper.xml b/src/main/resources/mapper/localbordMapper.xml index 8abc715..9483650 100644 --- a/src/main/resources/mapper/localbordMapper.xml +++ b/src/main/resources/mapper/localbordMapper.xml @@ -74,6 +74,12 @@ DELETE FROM localbord WHERE LOCBRDSEQ = #{LOCBRDSEQ} + + + + DELETE FROM localcomt + WHERE LOCBRDSEQ = #{LOCBRDSEQ} + @@ -81,13 +87,35 @@ SET LOCBRDTTL = #{LOCBRDTTL}, LOCBRDCON = #{LOCBRDCON}, LOCBRDUDT = NOW() WHERE LOCBRDSEQ = #{LOCBRDSEQ} + + + - - - INSERT INTO localgorb (LOCBRDSEQ, LOCCMTSEQ, MEMBERSEQ, LOCGOBGOD, LOCGOBBAD ) + + + + + UPDATE localgorb + SET LOCGOBGOD = #{LOCGOBGOD}, LOCGOBBAD = #{LOCGOBBAD} + WHERE (LOCBRDSEQ = #{LOCBRDSEQ} OR (#{LOCBRDSEQ} IS NULL AND LOCBRDSEQ IS NULL)) + AND (LOCCMTSEQ = #{LOCCMTSEQ} OR (#{LOCCMTSEQ} IS NULL AND LOCCMTSEQ IS NULL)) + AND MEMBERSEQ = #{MEMBERSEQ} + + + + + + + INSERT INTO localgorb (LOCBRDSEQ, LOCCMTSEQ, MEMBERSEQ, LOCGOBGOD, LOCGOBBAD) VALUES (#{LOCBRDSEQ}, #{LOCCMTSEQ}, #{MEMBERSEQ}, #{LOCGOBGOD}, #{LOCGOBBAD}) - ON DUPLICATE KEY UPDATE LOCGOBGOD = #{LOCGOBGOD}, LOCGOBBAD = #{LOCGOBBAD} + + SELECT COUNT(1) > 0 FROM localcomt + WHERE LOCCMTSEQ = #{LOCCMTSEQ} AND LOCCMTPNT IS NOT NULL + + + + + + INSERT INTO localbord (LOCBRDTTL, LOCBRDCON, LOCBRDCAT, MEMBERSEQ, LOCBRDCNT, LOCBRDRDT, LOCBRDUDT, LOCBRDPWD, LOCBRDTYP) From 67551b54b017c2888e3dad250f07a4feabbb4956 Mon Sep 17 00:00:00 2001 From: dyhj625 Date: Mon, 20 Jan 2025 14:07:44 +0900 Subject: [PATCH 08/15] =?UTF-8?q?=EC=93=B8=EB=8D=B0=EC=97=86=EB=8A=94?= =?UTF-8?q?=EA=B1=B0=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/api/BoardController.java | 50 +++++++++++-------- .../localhost/mapper/localbordMapper.java | 3 -- .../localhost/service/localbordService.java | 4 -- 3 files changed, 30 insertions(+), 27 deletions(-) diff --git a/src/main/java/io/company/localhost/controller/api/BoardController.java b/src/main/java/io/company/localhost/controller/api/BoardController.java index 0384760..1cc4f87 100644 --- a/src/main/java/io/company/localhost/controller/api/BoardController.java +++ b/src/main/java/io/company/localhost/controller/api/BoardController.java @@ -18,29 +18,22 @@ package io.company.localhost.controller.api; import java.math.BigInteger; import java.nio.charset.StandardCharsets; import java.sql.Blob; -import java.util.ArrayList; -import java.util.Date; import java.util.HashMap; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; - -import org.springframework.http.ResponseEntity; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.multipart.MultipartFile; import com.github.pagehelper.PageInfo; -import com.github.pagehelper.PageSerializable; +import io.company.localhost.common.annotation.Member; +import io.company.localhost.common.annotation.ParameterCheck; import io.company.localhost.common.annotation.ReqMap; import io.company.localhost.common.dto.ApiResponse; import io.company.localhost.common.dto.MapDto; @@ -61,6 +54,8 @@ public class BoardController { * @ReqMap map 요청 파라미터 (searchKeyword) * @return 전체 공지사항 목록 */ + @Member + @ParameterCheck @GetMapping("/notices") public ApiResponse> getNotices(@ReqMap MapDto map) { List posts = boardService.getNotices(map); @@ -88,6 +83,8 @@ public class BoardController { * @ReqMap map 요청 파라미터 (page, searchKeyword) * @return 페이징된 자유/익명 게시판 목록 */ + @Member + @ParameterCheck @GetMapping("/general") public ApiResponse> getGeneralPosts(@ReqMap MapDto map) { PageInfo posts = boardService.getGeneralPosts(map); @@ -147,6 +144,8 @@ public class BoardController { * LOCBRDPWD(익명일떄에만), LOCBRDCAT(지식커뮤니티만)) * @return 작성된 게시물의 ID */ + @Member + @ParameterCheck @PostMapping public ApiResponse createBoard(@ReqMap MapDto map) { // 비밀번호 암호화 (익명 게시판 등 비밀번호가 필요한 경우) @@ -168,6 +167,8 @@ public class BoardController { * @ReqMap map 요청 파라미터 (CMNFLEREG, CMNFLESIZ, CMNFLEEXT, CMNFLEORG, CMNFLENAM, CMNFLEPAT, CMNBRDSEQ) * @return 첨부파일 저장 결과 메시지 */ + @Member + @ParameterCheck @PostMapping("/{CMNBRDSEQ}/attachments") public ApiResponse uploadAttachment(@ReqMap MapDto map) { // 파일 데이터 저장 @@ -181,6 +182,8 @@ public class BoardController { * @param boardId 게시물 ID * @return 게시물 상세정보, 첨부파일 목록, 댓글 목록 */ + @Member + @ParameterCheck @GetMapping("/{boardId}") public ApiResponse getBoardDetail(@PathVariable("boardId") Long boardId) { log.info("Fetching details for board ID: {}", boardId); @@ -236,6 +239,8 @@ public class BoardController { * @param boardId 게시물 ID * @return 삭제 결과 메시지 */ + @Member + @ParameterCheck @DeleteMapping("/{boardId}") public ApiResponse deleteBoard(@PathVariable("boardId") Long boardId, @ReqMap MapDto map) { map.put("LOCBRDSEQ", boardId); @@ -250,6 +255,8 @@ public class BoardController { * @ReqMap map 수정 데이터 (LOCBRDTTL, LOCBRDCON) * @return 수정 결과 메시지 */ + @Member + @ParameterCheck @PutMapping("/{boardId}") public ApiResponse updateBoard(@PathVariable("boardId") Long boardId,@ReqMap MapDto map) { map.put("LOCBRDSEQ", boardId); @@ -262,6 +269,8 @@ public class BoardController { * @ReqMap map 데이터 (LOCCMTSEQ, MEMBERSEQ, LOCGOBGOD, LOCGOBBAD, LOCBRDSEQ) * @return 반응 추가 결과 메시지 */ + @Member + @ParameterCheck @PostMapping("/{LOCBRDSEQ}/{LOCCMTSEQ}/reaction") public ApiResponse reactToBoard(@ReqMap MapDto map) { boardService.reactToBoard(map); @@ -274,6 +283,8 @@ public class BoardController { * @param boardId 게시물 ID * @return 댓글과 대댓글의 계층 구조 데이터 */ + @Member + @ParameterCheck @GetMapping("/{boardId}/comments") public ApiResponse> getComments(@PathVariable("boardId") int boardId) { // 모든 댓글과 대댓글 조회 @@ -289,6 +300,8 @@ public class BoardController { * @ReqMap map 댓글 데이터 (LOCBRDSEQ, LOCCMTRPY, LOCCMTPNT, LOCCMTPWD, MEMBERSEQ 등) * @return 작성 결과 메시지 */ + @Member + @ParameterCheck @PostMapping("/{LOCBRDSEQ}/comment") public ApiResponse addCommentOrReply(@ReqMap MapDto map) { // 비밀번호 암호화 (비밀번호가 있는 경우에만) @@ -308,6 +321,8 @@ public class BoardController { * @ReqMap map 수정 데이터 (LOCCMTSEQ, LOCCMTRPY ) * @return 수정 결과 메시지 */ + @Member + @ParameterCheck @PutMapping("/comment/{commentId}") public ApiResponse updateComment(@PathVariable("commentId") int commentId, @ReqMap MapDto map) { // 기존 댓글 조회 @@ -327,6 +342,8 @@ public class BoardController { * @param commentId 댓글 ID * @return 삭제 결과 메시지 */ + @Member + @ParameterCheck @DeleteMapping("/comment/{commentId}") public ApiResponse deleteComment(@PathVariable("commentId") int commentId, @ReqMap MapDto map) { map.put("LOCCMTSEQ", commentId); @@ -341,6 +358,8 @@ public class BoardController { * @ReqMap map 비밀번호 데이터 * @return 비밀번호 확인 결과 */ + @Member + @ParameterCheck @PostMapping("/comment/{commentId}/password") public ApiResponse checkCommentPassword(@PathVariable("commentId") int commentId, @ReqMap MapDto map) { // DB에서 암호화된 비밀번호 조회 @@ -358,6 +377,8 @@ public class BoardController { * @ReqMap map 비밀번호 데이터 * @return 비밀번호 확인 결과 */ + @Member + @ParameterCheck @PostMapping("/{boardId}/password") public ApiResponse checkBoardPassword(@PathVariable("boardId") int boardId, @ReqMap MapDto map) { // DB에서 암호화된 비밀번호 조회 @@ -368,16 +389,5 @@ public class BoardController { boolean isMatch = passwordEncoder.matches(rawPassword, storedPassword); return ApiResponse.ok(isMatch); } - -// /** -// * 비밀게시판 여부 확인 -// * @param boardId 게시물 ID -// * @return 비밀게시판 여부 -// */ -// @GetMapping("/{boardId}/isSecret") -// public ApiResponse isSecretBoard(@PathVariable("boardId") Long boardId) { -// log.info("Checking if board ID {} is secret", boardId); -// return ApiResponse.ok(boardService.isSecretBoard(boardId)); -// } } diff --git a/src/main/java/io/company/localhost/mapper/localbordMapper.java b/src/main/java/io/company/localhost/mapper/localbordMapper.java index e9291ab..ac4a2d1 100644 --- a/src/main/java/io/company/localhost/mapper/localbordMapper.java +++ b/src/main/java/io/company/localhost/mapper/localbordMapper.java @@ -69,9 +69,6 @@ public interface localbordMapper { // 댓글 비밀번호 조회 String selectBoardPassword(int boardId); - - // 비밀 게시판 여부 확인 - boolean isSecretBoard(Long boardId); // 게시물 상세보기 MapDto selectBoardDetail(Long boardId); diff --git a/src/main/java/io/company/localhost/service/localbordService.java b/src/main/java/io/company/localhost/service/localbordService.java index f3a405f..01bdcc7 100644 --- a/src/main/java/io/company/localhost/service/localbordService.java +++ b/src/main/java/io/company/localhost/service/localbordService.java @@ -119,10 +119,6 @@ public class localbordService { public String getBoardPassword(int boardId) { return boardMapper.selectBoardPassword(boardId); } - - public boolean isSecretBoard(Long boardId) { - return boardMapper.isSecretBoard(boardId); - } public MapDto getCommentById(int commentId) { return boardMapper.getCommentById(commentId); From 1312ac6b5d63ce815f5a85ac90e13d53d9932942 Mon Sep 17 00:00:00 2001 From: dyhj625 Date: Mon, 20 Jan 2025 14:24:01 +0900 Subject: [PATCH 09/15] =?UTF-8?q?=EC=A1=B0=ED=9A=8C=EC=88=98=20=EC=A6=9D?= =?UTF-8?q?=EA=B0=80=20,=EA=B2=8C=EC=8B=9C=ED=8C=90=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../localhost/controller/api/BoardController.java | 5 ++++- .../company/localhost/mapper/localbordMapper.java | 5 ++++- .../localhost/service/localbordService.java | 6 +++++- src/main/resources/mapper/localbordMapper.xml | 14 +++++++++----- 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/main/java/io/company/localhost/controller/api/BoardController.java b/src/main/java/io/company/localhost/controller/api/BoardController.java index 1cc4f87..d0b0fa9 100644 --- a/src/main/java/io/company/localhost/controller/api/BoardController.java +++ b/src/main/java/io/company/localhost/controller/api/BoardController.java @@ -187,7 +187,10 @@ public class BoardController { @GetMapping("/{boardId}") public ApiResponse getBoardDetail(@PathVariable("boardId") Long boardId) { log.info("Fetching details for board ID: {}", boardId); - + + // 조회수 증가 + boardService.incrementViewCount(boardId); + // 게시물 상세정보 조회 MapDto boardDetail = boardService.getBoardDetail(boardId); if (boardDetail == null) { diff --git a/src/main/java/io/company/localhost/mapper/localbordMapper.java b/src/main/java/io/company/localhost/mapper/localbordMapper.java index ac4a2d1..56c2875 100644 --- a/src/main/java/io/company/localhost/mapper/localbordMapper.java +++ b/src/main/java/io/company/localhost/mapper/localbordMapper.java @@ -15,7 +15,10 @@ public interface localbordMapper { // 자유/비밀 게시판 조회 List getGeneralPosts(MapDto map); - + + // 조회수 증가 + void incrementViewCount(Long boardId); + // 게시물 작성 void createBoard(MapDto map); diff --git a/src/main/java/io/company/localhost/service/localbordService.java b/src/main/java/io/company/localhost/service/localbordService.java index 01bdcc7..93019ee 100644 --- a/src/main/java/io/company/localhost/service/localbordService.java +++ b/src/main/java/io/company/localhost/service/localbordService.java @@ -33,7 +33,11 @@ public class localbordService { return PageUtil.redefineNavigation(new PageInfo<>(result, size)); } - + + // 게시글 조회수 증가 + public void incrementViewCount(Long boardId) { + boardMapper.incrementViewCount(boardId); + } public BigInteger createBoard(MapDto map) { boardMapper.createBoard(map); // 게시물 작성 diff --git a/src/main/resources/mapper/localbordMapper.xml b/src/main/resources/mapper/localbordMapper.xml index e16a7b1..0a1d129 100644 --- a/src/main/resources/mapper/localbordMapper.xml +++ b/src/main/resources/mapper/localbordMapper.xml @@ -8,7 +8,8 @@ LOCBRDSEQ AS id, LOCBRDTTL AS title, LOCBRDCON AS content, - LOCBRDRDT AS date + LOCBRDUDT AS date, + LOCBRDCNT AS cnt FROM localbord WHERE LOCBRDTYP = 'N' @@ -23,7 +24,8 @@ LOCBRDSEQ AS id, LOCBRDTTL AS title, LOCBRDCON AS content, - LOCBRDRDT AS date + LOCBRDUDT AS date, + LOCBRDCNT AS cnt FROM localbord WHERE LOCBRDTYP IN ('F', 'S') @@ -31,9 +33,11 @@ ORDER BY LOCBRDUDT DESC - - - + + + UPDATE localbord SET LOCBRDCNT = LOCBRDCNT + 1 WHERE LOCBRDSEQ = #{LOCBRDSEQ} + + INSERT INTO localbord (LOCBRDTTL, LOCBRDCON, LOCBRDCAT, MEMBERSEQ, LOCBRDCNT, LOCBRDRDT, LOCBRDUDT, LOCBRDPWD, LOCBRDTYP) From b2999ffd51e14f7a684e9ff12c917f9afb2512f0 Mon Sep 17 00:00:00 2001 From: dyhj625 Date: Mon, 20 Jan 2025 14:37:20 +0900 Subject: [PATCH 10/15] =?UTF-8?q?=EA=B2=8C=EC=8B=9C=ED=8C=90=20=EC=A0=95?= =?UTF-8?q?=EB=A0=AC=ED=95=84=ED=84=B0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../company/localhost/controller/api/BoardController.java | 2 +- .../java/io/company/localhost/service/localbordService.java | 5 +++++ src/main/resources/mapper/localbordMapper.xml | 6 +++++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/company/localhost/controller/api/BoardController.java b/src/main/java/io/company/localhost/controller/api/BoardController.java index d0b0fa9..e0e092e 100644 --- a/src/main/java/io/company/localhost/controller/api/BoardController.java +++ b/src/main/java/io/company/localhost/controller/api/BoardController.java @@ -80,7 +80,7 @@ public class BoardController { /** * 자유/익명 게시판 목록 조회 - * @ReqMap map 요청 파라미터 (page, searchKeyword) + * @ReqMap map 요청 파라미터 (page, searchKeyword, orderBy) * @return 페이징된 자유/익명 게시판 목록 */ @Member diff --git a/src/main/java/io/company/localhost/service/localbordService.java b/src/main/java/io/company/localhost/service/localbordService.java index 93019ee..3b881e7 100644 --- a/src/main/java/io/company/localhost/service/localbordService.java +++ b/src/main/java/io/company/localhost/service/localbordService.java @@ -26,6 +26,11 @@ public class localbordService { public PageInfo getGeneralPosts(MapDto map) { int page = map.getString("page") != null ? Integer.parseInt(map.getString("page")) : 1; int size = map.getString("size") != null ? Integer.parseInt(map.getString("size")) : 10; + + String orderBy = map.getString("orderBy"); + if (orderBy == null || (!orderBy.equals("date") && !orderBy.equals("views"))) { + map.put("orderBy", "date"); // 기본 정렬은 날짜 기준 + } PageHelper.startPage(page, size); diff --git a/src/main/resources/mapper/localbordMapper.xml b/src/main/resources/mapper/localbordMapper.xml index 0a1d129..fee88af 100644 --- a/src/main/resources/mapper/localbordMapper.xml +++ b/src/main/resources/mapper/localbordMapper.xml @@ -31,7 +31,11 @@ AND LOCBRDTTL LIKE CONCAT('%', #{searchKeyword}, '%') - ORDER BY LOCBRDUDT DESC + ORDER BY + + LOCBRDUDT DESC + LOCBRDCNT DESC + From 2c23644ebd1da20f89d64a72f6aff51cae17cacd Mon Sep 17 00:00:00 2001 From: dyhj625 Date: Mon, 20 Jan 2025 15:14:24 +0900 Subject: [PATCH 11/15] . --- src/main/resources/mapper/localbordMapper.xml | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/main/resources/mapper/localbordMapper.xml b/src/main/resources/mapper/localbordMapper.xml index fee88af..eedc526 100644 --- a/src/main/resources/mapper/localbordMapper.xml +++ b/src/main/resources/mapper/localbordMapper.xml @@ -63,7 +63,7 @@ @@ -106,8 +106,6 @@ AND MEMBERSEQ = #{MEMBERSEQ} - - UPDATE localgorb @@ -117,15 +115,12 @@ AND MEMBERSEQ = #{MEMBERSEQ} - - INSERT INTO localgorb (LOCBRDSEQ, LOCCMTSEQ, MEMBERSEQ, LOCGOBGOD, LOCGOBBAD) VALUES (#{LOCBRDSEQ}, #{LOCCMTSEQ}, #{MEMBERSEQ}, #{LOCGOBGOD}, #{LOCGOBBAD}) - - From e12bcd15bdf658b821a09680e0741c5422e53574 Mon Sep 17 00:00:00 2001 From: dyhj625 Date: Mon, 20 Jan 2025 15:20:07 +0900 Subject: [PATCH 12/15] =?UTF-8?q?=EB=A9=A4=EC=96=B4ID=20=EC=9E=84=EC=8B=9C?= =?UTF-8?q?=EB=A1=9C=20=EC=82=AC=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../company/localhost/controller/api/BoardController.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/io/company/localhost/controller/api/BoardController.java b/src/main/java/io/company/localhost/controller/api/BoardController.java index e0e092e..895bf70 100644 --- a/src/main/java/io/company/localhost/controller/api/BoardController.java +++ b/src/main/java/io/company/localhost/controller/api/BoardController.java @@ -158,6 +158,8 @@ public class BoardController { BigInteger createdIdx = boardService.createBoard(map); // 작성된 게시물의 idx를 반환 Map responseData = new HashMap<>(); responseData.put("CMNBRDSEQ", createdIdx); + //로그인 미개발 ->임시 + map.put("MEMBERSEQ", 1); responseData.put("message", "게시물이 작성되었습니다."); return ApiResponse.ok(responseData); } @@ -276,6 +278,8 @@ public class BoardController { @ParameterCheck @PostMapping("/{LOCBRDSEQ}/{LOCCMTSEQ}/reaction") public ApiResponse reactToBoard(@ReqMap MapDto map) { + //로그인 미개발 ->임시 + map.put("MEMBERSEQ", 1); boardService.reactToBoard(map); return ApiResponse.ok("반응이 성공적으로 처리되었습니다."); } @@ -307,6 +311,9 @@ public class BoardController { @ParameterCheck @PostMapping("/{LOCBRDSEQ}/comment") public ApiResponse addCommentOrReply(@ReqMap MapDto map) { + //로그인 미개발 ->임시 + map.put("MEMBERSEQ", 1); + // 비밀번호 암호화 (비밀번호가 있는 경우에만) if (map.containsKey("LOCCMTPWD")) { String rawPassword = map.getString("LOCCMTPWD"); From a3ce5ade180e7ce8db2ff8328c0d5cabf8ccbb14 Mon Sep 17 00:00:00 2001 From: dyhj625 Date: Tue, 21 Jan 2025 10:29:46 +0900 Subject: [PATCH 13/15] =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=95=20=EC=9D=B4?= =?UTF-8?q?=EC=A0=84/=EB=8B=A4=EC=9D=8C=20=ED=8E=98=EC=9D=B4=EC=A7=80=20?= =?UTF-8?q?=EC=9C=A0=EB=AC=B4=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/company/localhost/utils/PageUtil.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/io/company/localhost/utils/PageUtil.java b/src/main/java/io/company/localhost/utils/PageUtil.java index 8d92f10..cf7333a 100644 --- a/src/main/java/io/company/localhost/utils/PageUtil.java +++ b/src/main/java/io/company/localhost/utils/PageUtil.java @@ -57,6 +57,18 @@ public class PageUtil { list.setNavigateFirstPage(nav2[0]); list.setNavigateLastPage(nav2[nav2.length -1]); } + + // 페이지 그룹 크기 (예: 10개씩) + int groupSize = list.getNavigatePages(); + int totalPages = list.getPages(); + + // 현재 페이지 그룹 계산 + int currentGroup = (int) Math.ceil((double) currentPage / groupSize); + int totalGroups = (int) Math.ceil((double) totalPages / groupSize); + + // 이전/다음 그룹 존재 여부 설정 + list.setHasPreviousPage(currentGroup > 1); // 이전 그룹 존재 + list.setHasNextPage(currentGroup < totalGroups); // 다음 그룹 존재 return list; } From 5ad352da9b8d30114f065ff1a0ea026f6e7e8b7e Mon Sep 17 00:00:00 2001 From: dyhj625 Date: Tue, 21 Jan 2025 13:17:01 +0900 Subject: [PATCH 14/15] =?UTF-8?q?=EA=B2=8C=EC=8B=9C=EB=AC=BC=20=EC=A0=80?= =?UTF-8?q?=EC=9E=A5=20=EC=82=AC=EC=9B=90id=20=EC=9E=84=EC=8B=9C=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/api/BoardController.java | 50 +++++++++++++------ 1 file changed, 34 insertions(+), 16 deletions(-) diff --git a/src/main/java/io/company/localhost/controller/api/BoardController.java b/src/main/java/io/company/localhost/controller/api/BoardController.java index 895bf70..99347f4 100644 --- a/src/main/java/io/company/localhost/controller/api/BoardController.java +++ b/src/main/java/io/company/localhost/controller/api/BoardController.java @@ -21,6 +21,8 @@ import java.sql.Blob; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.UUID; + import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; @@ -30,7 +32,9 @@ import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import com.fasterxml.jackson.databind.ObjectMapper; import com.github.pagehelper.PageInfo; +import com.github.pagehelper.PageSerializable; import io.company.localhost.common.annotation.Member; import io.company.localhost.common.annotation.ParameterCheck; @@ -146,23 +150,34 @@ public class BoardController { */ @Member @ParameterCheck - @PostMapping - public ApiResponse createBoard(@ReqMap MapDto map) { - // 비밀번호 암호화 (익명 게시판 등 비밀번호가 필요한 경우) - if (map.containsKey("LOCBRDPWD")) { - String rawPassword = map.getString("LOCBRDPWD"); - String encodedPassword = passwordEncoder.encode(rawPassword); - map.put("LOCBRDPWD", encodedPassword); - } + @PostMapping + public ApiResponse createBoard(@ReqMap MapDto map) { + // 비밀번호 암호화 + if (map.containsKey("LOCBRDPWD")) { + String rawPassword = map.getString("LOCBRDPWD"); + String encodedPassword = passwordEncoder.encode(rawPassword); + map.put("LOCBRDPWD", encodedPassword); + } - BigInteger createdIdx = boardService.createBoard(map); // 작성된 게시물의 idx를 반환 - Map responseData = new HashMap<>(); - responseData.put("CMNBRDSEQ", createdIdx); - //로그인 미개발 ->임시 - map.put("MEMBERSEQ", 1); - responseData.put("message", "게시물이 작성되었습니다."); - return ApiResponse.ok(responseData); - } + // LOCBRDCON 필드를 JSON 문자열로 변환 + ObjectMapper objectMapper = new ObjectMapper(); + if (map.containsKey("LOCBRDCON")) { + try { + String jsonContent = objectMapper.writeValueAsString(map.get("LOCBRDCON")); + map.put("LOCBRDCON", jsonContent); // JSON 문자열로 변환된 값 설정 + } catch (Exception e) { + throw new RuntimeException("Error serializing LOCBRDCON field", e); + } + } + //로그인 미개발 ->임시 + map.put("MEMBERSEQ", 1); + + BigInteger createdIdx = boardService.createBoard(map); // 작성된 게시물의 idx를 반환 + Map responseData = new HashMap<>(); + responseData.put("CMNBRDSEQ", createdIdx); + responseData.put("message", "게시물이 작성되었습니다."); + return ApiResponse.ok(responseData); + } /** * 첨부파일 추가 @@ -173,6 +188,9 @@ public class BoardController { @ParameterCheck @PostMapping("/{CMNBRDSEQ}/attachments") public ApiResponse uploadAttachment(@ReqMap MapDto map) { + String filename = UUID.randomUUID().toString(); + map.put("CMNFLENAM", filename); + map.put("CMNFLEREG", 1); // 파일 데이터 저장 boardService.addAttachment(map); From a03c94985309161dac2869a23910c8968b826454 Mon Sep 17 00:00:00 2001 From: dyhj625 Date: Tue, 21 Jan 2025 15:43:11 +0900 Subject: [PATCH 15/15] =?UTF-8?q?=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../company/localhost/mapper/localbordMapper.java | 1 - .../localhost/service/localbordService.java | 15 +++++---------- src/main/resources/mapper/localbordMapper.xml | 13 +++++-------- 3 files changed, 10 insertions(+), 19 deletions(-) diff --git a/src/main/java/io/company/localhost/mapper/localbordMapper.java b/src/main/java/io/company/localhost/mapper/localbordMapper.java index 56c2875..7190ee7 100644 --- a/src/main/java/io/company/localhost/mapper/localbordMapper.java +++ b/src/main/java/io/company/localhost/mapper/localbordMapper.java @@ -94,6 +94,5 @@ public interface localbordMapper { //댓글id 확인 MapDto getCommentById(int commentId); - } diff --git a/src/main/java/io/company/localhost/service/localbordService.java b/src/main/java/io/company/localhost/service/localbordService.java index 3b881e7..b74afea 100644 --- a/src/main/java/io/company/localhost/service/localbordService.java +++ b/src/main/java/io/company/localhost/service/localbordService.java @@ -29,7 +29,7 @@ public class localbordService { String orderBy = map.getString("orderBy"); if (orderBy == null || (!orderBy.equals("date") && !orderBy.equals("views"))) { - map.put("orderBy", "date"); // 기본 정렬은 날짜 기준 + map.put("orderBy", "date"); } PageHelper.startPage(page, size); @@ -39,13 +39,12 @@ public class localbordService { return PageUtil.redefineNavigation(new PageInfo<>(result, size)); } - // 게시글 조회수 증가 public void incrementViewCount(Long boardId) { boardMapper.incrementViewCount(boardId); } public BigInteger createBoard(MapDto map) { - boardMapper.createBoard(map); // 게시물 작성 + boardMapper.createBoard(map); return (BigInteger) map.get("LOCBRDSEQ"); // Mapper에서 자동 생성된 key를 가져옴 } @@ -60,8 +59,7 @@ public class localbordService { public List getAttachments(Long boardId) { return boardMapper.selectAttachments(boardId); } - - + public void deleteBoard(MapDto map) { boardMapper.deleteCommentsByBoardId(map); boardMapper.deleteBoard(map); @@ -90,12 +88,11 @@ public class localbordService { public void addCommentOrReply(MapDto map) { if (map.get("LOCCMTPNT") == null) { - map.put("LOCCMTPNT", null); // 부모 ID가 없는 경우 null 처리 + map.put("LOCCMTPNT", null); } boardMapper.addCommentOrReply(map); } - public void updateComment(MapDto map) { boardMapper.updateComment(map); } @@ -139,7 +136,7 @@ public class localbordService { public boolean hasAttachments(Long boardId) { int count = boardMapper.countAttachments(boardId); - return count > 0; // 첨부파일 개수가 0보다 크면 true 반환 + return count > 0; } public MapDto getBoardReactions(Long boardId) { @@ -150,8 +147,6 @@ public class localbordService { return boardMapper.getCommentReactions(boardId); } - - } diff --git a/src/main/resources/mapper/localbordMapper.xml b/src/main/resources/mapper/localbordMapper.xml index eedc526..7d451c4 100644 --- a/src/main/resources/mapper/localbordMapper.xml +++ b/src/main/resources/mapper/localbordMapper.xml @@ -38,6 +38,7 @@ + UPDATE localbord SET LOCBRDCNT = LOCBRDCNT + 1 WHERE LOCBRDSEQ = #{LOCBRDSEQ} @@ -47,8 +48,7 @@ INSERT INTO localbord (LOCBRDTTL, LOCBRDCON, LOCBRDCAT, MEMBERSEQ, LOCBRDCNT, LOCBRDRDT, LOCBRDUDT, LOCBRDPWD, LOCBRDTYP) VALUES (#{LOCBRDTTL}, #{LOCBRDCON}, #{LOCBRDCAT}, #{MEMBERSEQ}, 0, NOW(), NOW(), #{LOCBRDPWD}, #{LOCBRDTYP}) - - + INSERT INTO commonfil ( @@ -60,7 +60,6 @@ ) - - - + @@ -237,8 +234,8 @@