diff --git a/src/main/java/io/company/localhost/controller/api/BoardController.java b/src/main/java/io/company/localhost/controller/api/BoardController.java new file mode 100644 index 0000000..77bf630 --- /dev/null +++ b/src/main/java/io/company/localhost/controller/api/BoardController.java @@ -0,0 +1,118 @@ +package io.company.localhost.controller.api; + +import java.util.List; +import java.util.Map; + +import org.springframework.http.ResponseEntity; +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 io.company.localhost.common.dto.ApiResponse; +import io.company.localhost.service.BoardService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@RestController +@RequestMapping("/api/board") +@RequiredArgsConstructor +@Slf4j +public class BoardController { + private final BoardService boardService; + + //공지사항 + @GetMapping("/notices") + public ApiResponse>> getNotices() { + return ApiResponse.ok(boardService.getNotices()); + } + //비밀,자유게시판 + @GetMapping("/general") + public ApiResponse>> getGeneralPosts() { + return ApiResponse.ok(boardService.getGeneralPosts()); + } + //게시물 작성 + @PostMapping + public ApiResponse createBoard(@RequestBody Map params) { + boardService.createBoard(params); + return ApiResponse.ok("게시물이 작성되었습니다."); + } + // 첨부파일 추가 + @PostMapping("/{boardId}/attachments") + public ApiResponse uploadAttachment(@PathVariable Long boardId, @RequestBody Map params) { + params.put("LOCBRDSEQ", boardId); + log.info("Uploading attachment for board ID: {}", boardId); + boardService.addAttachment(params); + return ApiResponse.ok("첨부파일이 저장되었습니다."); + } + // 게시물 삭제 + @DeleteMapping("/{boardId}") + public ApiResponse deleteBoard(@PathVariable Long boardId, @RequestBody Map params) { + params.put("LOCBRDSEQ", boardId); + log.info("Deleting board with ID: {}", boardId); + boardService.deleteBoard(params); + return ApiResponse.ok("게시물이 삭제되었습니다."); + } + //게시물 수정 + @PutMapping + public ApiResponse updateBoard(@RequestBody Map params) { + boardService.updateBoard(params); + return ApiResponse.ok("게시물이 수정되었습니다."); + } + //게시물과 댓글에 좋아요/싫어요 추가 + @PostMapping("/{boardId}/reaction") + public ApiResponse reactToBoard(@PathVariable Long boardId, @RequestBody Map params) { + params.put("LOCBRDSEQ", boardId); + boardService.reactToBoard(params); + return ApiResponse.ok("반응이 추가되었습니다."); + } + //댓글/대댓글 조회 + @GetMapping("/{boardId}/comments") + public ApiResponse>> getComments(@PathVariable int boardId) { + return ApiResponse.ok(boardService.getComments(boardId)); + } + //댓글/대댓글 작성 + @PostMapping("/{boardId}/comment") + public ApiResponse addCommentOrReply(@PathVariable int boardId, @RequestBody Map params) { + params.put("LOCBRDSEQ", boardId); + boardService.addCommentOrReply(params); + return ApiResponse.ok("댓글 또는 대댓글이 작성되었습니다."); + } + //댓글/대댓글 수정 + @PutMapping("/comment/{commentId}") + public ApiResponse updateComment(@PathVariable int commentId, @RequestBody Map params) { + params.put("LOCCMTSEQ", commentId); + boardService.updateComment(params); + return ApiResponse.ok("댓글이 수정되었습니다."); + } + //댓글/대댓글 삭제 + @DeleteMapping("/comment/{commentId}") + public ApiResponse deleteComment(@PathVariable int commentId, @RequestBody Map params) { + params.put("LOCCMTSEQ", commentId); + boardService.deleteComment(params); + return ApiResponse.ok("댓글이 삭제되었습니다."); + } + //비밀번호 확인 (게시물) + @PostMapping("/comment/{commentId}/password") + public ApiResponse checkCommentPassword(@PathVariable int commentId, @RequestBody Map params) { + params.put("LOCCMTSEQ", commentId); + return ApiResponse.ok(boardService.checkCommentPassword(params)); + } + //비밀번호 확인 (댓글) + @PostMapping("/{boardId}/password") + public ApiResponse checkBoardPassword(@PathVariable int boardId, @RequestBody Map params) { + params.put("LOCBRDSEQ", boardId); + return ApiResponse.ok(boardService.checkBoardPassword(params)); + } + // 비밀게시판 여부 확인 + @GetMapping("/{boardId}/isSecret") + public ApiResponse isSecretBoard(@PathVariable 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/BoardMapper.java b/src/main/java/io/company/localhost/mapper/BoardMapper.java new file mode 100644 index 0000000..29c6447 --- /dev/null +++ b/src/main/java/io/company/localhost/mapper/BoardMapper.java @@ -0,0 +1,53 @@ +package io.company.localhost.mapper; + +import java.util.List; +import java.util.Map; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +@Mapper +public interface BoardMapper { + // 공지사항 조회 + List> getNotices(); + + // 자유/비밀 게시판 조회 + List> getGeneralPosts(); + + // 게시물 작성 + void createBoard(Map params); + + // 첨부파일 저장 + void addAttachment(Map params); + + // 게시물 삭제 + void deleteBoard(Map params); + + // 게시물 수정 + void updateBoard(Map params); + + // 게시물 좋아요/싫어요 추가 + void reactToBoard(Map params); + + // 댓글 조회 + List> getComments(int boardSeq); + + // 댓글/대댓글 작성 + void addCommentOrReply(Map params); + + // 댓글/대댓글 수정 + void updateComment(Map params); + + // 댓글/대댓글 삭제 + void deleteComment(Map params); + + // 게시물 비밀번호 확인 + boolean checkBoardPassword(Map params); + + // 댓글 비밀번호 확인 + boolean checkCommentPassword(Map params); + + // 비밀 게시판 여부 확인 + boolean isSecretBoard(Long boardId); +} + diff --git a/src/main/java/io/company/localhost/service/BoardService.java b/src/main/java/io/company/localhost/service/BoardService.java new file mode 100644 index 0000000..92a77b5 --- /dev/null +++ b/src/main/java/io/company/localhost/service/BoardService.java @@ -0,0 +1,75 @@ +package io.company.localhost.service; + +import java.util.List; +import java.util.Map; + +import org.springframework.stereotype.Service; + +import io.company.localhost.mapper.BoardMapper; +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class BoardService { + private final BoardMapper boardMapper; + + public List> getNotices() { + return boardMapper.getNotices(); + } + + public List> getGeneralPosts() { + return boardMapper.getGeneralPosts(); + } + + public void createBoard(Map params) { + boardMapper.createBoard(params); + } + + public void addAttachment(Map params) { + boardMapper.addAttachment(params); + } + + public void deleteBoard(Map params) { + boardMapper.deleteBoard(params); + } + + public void updateBoard(Map params) { + boardMapper.updateBoard(params); + } + + public void reactToBoard(Map params) { + boardMapper.reactToBoard(params); + } + + public List> getComments(int boardSeq) { + return boardMapper.getComments(boardSeq); + } + + public void addCommentOrReply(Map params) { + boardMapper.addCommentOrReply(params); + } + + public void updateComment(Map params) { + boardMapper.updateComment(params); + } + + public void deleteComment(Map params) { + boardMapper.deleteComment(params); + } + + public boolean checkBoardPassword(Map params) { + return boardMapper.checkBoardPassword(params); + } + + public boolean checkCommentPassword(Map params) { + return boardMapper.checkCommentPassword(params); + } + + + public boolean isSecretBoard(Long boardId) { + return boardMapper.isSecretBoard(boardId); + } + +} + + diff --git a/src/main/resources/mapper/boardMapper.xml b/src/main/resources/mapper/boardMapper.xml new file mode 100644 index 0000000..f64bbb9 --- /dev/null +++ b/src/main/resources/mapper/boardMapper.xml @@ -0,0 +1,115 @@ + + + + + + + + + + + + + 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 (CMNBRDSEQ, CMNFLEPAT, CMNFLENAM, CMNFLEORG, CMNFLEEXT, CMNFLESIZ, CMNFLEREG, CMNFLERDT) + VALUES (#{CMNBRDSEQ}, #{CMNFLEPAT}, #{CMNFLENAM}, #{CMNFLEORG}, #{CMNFLEEXT}, #{CMNFLESIZ}, #{CMNFLEREG}, NOW()) + + + + + DELETE FROM localbord WHERE LOCBRDSEQ = #{LOCBRDSEQ} + + + + + UPDATE localbord + SET LOCBRDTTL = #{LOCBRDTTL}, LOCBRDCON = #{LOCBRDCON}, LOCBRDUDT = NOW() + WHERE LOCBRDSEQ = #{LOCBRDSEQ} + + + + + INSERT INTO localgorb (LOCBRDSEQ, LOCCMTSEQ, MEMBERSEQ, LOCGOBGOD, LOCGOBBAD ) + VALUES (#{LOCBRDSEQ}, #{LOCCMTSEQ}, #{MEMBERSEQ}, #{LOCGOBGOD}, #{LOCGOBBAD}) + ON DUPLICATE KEY UPDATE LOCGOBGOD = #{LOCGOBGOD}, LOCGOBBAD = #{LOCGOBBAD} + + + + + + + + INSERT INTO loccomt (LOCBRDSEQ, LOCCMTRPY, LOCCMTPWD, LOCCMTRDT, LOCCMTPNT) + VALUES (#{LOCBRDSEQ}, #{LOCCMTRPY}, #{LOCCMTPWD}, NOW(), #{LOCCMTPNT}) + + + + + UPDATE loccomt + SET LOCCMTRPY = #{LOCCMTRPY}, LOCCMTUDT = NOW() + WHERE LOCCMTSEQ = #{LOCCMTSEQ} AND LOCCMTPWD = #{LOCCMTPWD} + + + + + DELETE FROM loccomt + WHERE LOCCMTSEQ = #{LOCCMTSEQ} AND LOCCMTPWD = #{LOCCMTPWD} + + + + + + + + + + + + +