게시판 수정
This commit is contained in:
parent
60c184d743
commit
0b80b787c8
@ -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<List<Map<String, Object>>> getNotices() {
|
||||
return ApiResponse.ok(boardService.getNotices());
|
||||
}
|
||||
//비밀,자유게시판
|
||||
@GetMapping("/general")
|
||||
public ApiResponse<List<Map<String, Object>>> getGeneralPosts() {
|
||||
return ApiResponse.ok(boardService.getGeneralPosts());
|
||||
}
|
||||
//게시물 작성
|
||||
@PostMapping
|
||||
public ApiResponse<String> createBoard(@RequestBody Map<String, Object> params) {
|
||||
boardService.createBoard(params);
|
||||
return ApiResponse.ok("게시물이 작성되었습니다.");
|
||||
}
|
||||
// 첨부파일 추가
|
||||
@PostMapping("/{boardId}/attachments")
|
||||
public ApiResponse<String> uploadAttachment(@PathVariable Long boardId, @RequestBody Map<String, Object> params) {
|
||||
params.put("LOCBRDSEQ", boardId);
|
||||
log.info("Uploading attachment for board ID: {}", boardId);
|
||||
boardService.addAttachment(params);
|
||||
return ApiResponse.ok("첨부파일이 저장되었습니다.");
|
||||
}
|
||||
// 게시물 삭제
|
||||
@DeleteMapping("/{boardId}")
|
||||
public ApiResponse<String> deleteBoard(@PathVariable Long boardId, @RequestBody Map<String, Object> params) {
|
||||
params.put("LOCBRDSEQ", boardId);
|
||||
log.info("Deleting board with ID: {}", boardId);
|
||||
boardService.deleteBoard(params);
|
||||
return ApiResponse.ok("게시물이 삭제되었습니다.");
|
||||
}
|
||||
//게시물 수정
|
||||
@PutMapping
|
||||
public ApiResponse<String> updateBoard(@RequestBody Map<String, Object> params) {
|
||||
boardService.updateBoard(params);
|
||||
return ApiResponse.ok("게시물이 수정되었습니다.");
|
||||
}
|
||||
//게시물과 댓글에 좋아요/싫어요 추가
|
||||
@PostMapping("/{boardId}/reaction")
|
||||
public ApiResponse<String> reactToBoard(@PathVariable Long boardId, @RequestBody Map<String, Object> params) {
|
||||
params.put("LOCBRDSEQ", boardId);
|
||||
boardService.reactToBoard(params);
|
||||
return ApiResponse.ok("반응이 추가되었습니다.");
|
||||
}
|
||||
//댓글/대댓글 조회
|
||||
@GetMapping("/{boardId}/comments")
|
||||
public ApiResponse<List<Map<String, Object>>> getComments(@PathVariable int boardId) {
|
||||
return ApiResponse.ok(boardService.getComments(boardId));
|
||||
}
|
||||
//댓글/대댓글 작성
|
||||
@PostMapping("/{boardId}/comment")
|
||||
public ApiResponse<String> addCommentOrReply(@PathVariable int boardId, @RequestBody Map<String, Object> params) {
|
||||
params.put("LOCBRDSEQ", boardId);
|
||||
boardService.addCommentOrReply(params);
|
||||
return ApiResponse.ok("댓글 또는 대댓글이 작성되었습니다.");
|
||||
}
|
||||
//댓글/대댓글 수정
|
||||
@PutMapping("/comment/{commentId}")
|
||||
public ApiResponse<String> updateComment(@PathVariable int commentId, @RequestBody Map<String, Object> params) {
|
||||
params.put("LOCCMTSEQ", commentId);
|
||||
boardService.updateComment(params);
|
||||
return ApiResponse.ok("댓글이 수정되었습니다.");
|
||||
}
|
||||
//댓글/대댓글 삭제
|
||||
@DeleteMapping("/comment/{commentId}")
|
||||
public ApiResponse<String> deleteComment(@PathVariable int commentId, @RequestBody Map<String, Object> params) {
|
||||
params.put("LOCCMTSEQ", commentId);
|
||||
boardService.deleteComment(params);
|
||||
return ApiResponse.ok("댓글이 삭제되었습니다.");
|
||||
}
|
||||
//비밀번호 확인 (게시물)
|
||||
@PostMapping("/comment/{commentId}/password")
|
||||
public ApiResponse<Boolean> checkCommentPassword(@PathVariable int commentId, @RequestBody Map<String, Object> params) {
|
||||
params.put("LOCCMTSEQ", commentId);
|
||||
return ApiResponse.ok(boardService.checkCommentPassword(params));
|
||||
}
|
||||
//비밀번호 확인 (댓글)
|
||||
@PostMapping("/{boardId}/password")
|
||||
public ApiResponse<Boolean> checkBoardPassword(@PathVariable int boardId, @RequestBody Map<String, Object> params) {
|
||||
params.put("LOCBRDSEQ", boardId);
|
||||
return ApiResponse.ok(boardService.checkBoardPassword(params));
|
||||
}
|
||||
// 비밀게시판 여부 확인
|
||||
@GetMapping("/{boardId}/isSecret")
|
||||
public ApiResponse<Boolean> isSecretBoard(@PathVariable Long boardId) {
|
||||
log.info("Checking if board ID {} is secret", boardId);
|
||||
return ApiResponse.ok(boardService.isSecretBoard(boardId));
|
||||
}
|
||||
}
|
||||
53
src/main/java/io/company/localhost/mapper/BoardMapper.java
Normal file
53
src/main/java/io/company/localhost/mapper/BoardMapper.java
Normal file
@ -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<Map<String, Object>> getNotices();
|
||||
|
||||
// 자유/비밀 게시판 조회
|
||||
List<Map<String, Object>> getGeneralPosts();
|
||||
|
||||
// 게시물 작성
|
||||
void createBoard(Map<String, Object> params);
|
||||
|
||||
// 첨부파일 저장
|
||||
void addAttachment(Map<String, Object> params);
|
||||
|
||||
// 게시물 삭제
|
||||
void deleteBoard(Map<String, Object> params);
|
||||
|
||||
// 게시물 수정
|
||||
void updateBoard(Map<String, Object> params);
|
||||
|
||||
// 게시물 좋아요/싫어요 추가
|
||||
void reactToBoard(Map<String, Object> params);
|
||||
|
||||
// 댓글 조회
|
||||
List<Map<String, Object>> getComments(int boardSeq);
|
||||
|
||||
// 댓글/대댓글 작성
|
||||
void addCommentOrReply(Map<String, Object> params);
|
||||
|
||||
// 댓글/대댓글 수정
|
||||
void updateComment(Map<String, Object> params);
|
||||
|
||||
// 댓글/대댓글 삭제
|
||||
void deleteComment(Map<String, Object> params);
|
||||
|
||||
// 게시물 비밀번호 확인
|
||||
boolean checkBoardPassword(Map<String, Object> params);
|
||||
|
||||
// 댓글 비밀번호 확인
|
||||
boolean checkCommentPassword(Map<String, Object> params);
|
||||
|
||||
// 비밀 게시판 여부 확인
|
||||
boolean isSecretBoard(Long boardId);
|
||||
}
|
||||
|
||||
75
src/main/java/io/company/localhost/service/BoardService.java
Normal file
75
src/main/java/io/company/localhost/service/BoardService.java
Normal file
@ -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<Map<String, Object>> getNotices() {
|
||||
return boardMapper.getNotices();
|
||||
}
|
||||
|
||||
public List<Map<String, Object>> getGeneralPosts() {
|
||||
return boardMapper.getGeneralPosts();
|
||||
}
|
||||
|
||||
public void createBoard(Map<String, Object> params) {
|
||||
boardMapper.createBoard(params);
|
||||
}
|
||||
|
||||
public void addAttachment(Map<String, Object> params) {
|
||||
boardMapper.addAttachment(params);
|
||||
}
|
||||
|
||||
public void deleteBoard(Map<String, Object> params) {
|
||||
boardMapper.deleteBoard(params);
|
||||
}
|
||||
|
||||
public void updateBoard(Map<String, Object> params) {
|
||||
boardMapper.updateBoard(params);
|
||||
}
|
||||
|
||||
public void reactToBoard(Map<String, Object> params) {
|
||||
boardMapper.reactToBoard(params);
|
||||
}
|
||||
|
||||
public List<Map<String, Object>> getComments(int boardSeq) {
|
||||
return boardMapper.getComments(boardSeq);
|
||||
}
|
||||
|
||||
public void addCommentOrReply(Map<String, Object> params) {
|
||||
boardMapper.addCommentOrReply(params);
|
||||
}
|
||||
|
||||
public void updateComment(Map<String, Object> params) {
|
||||
boardMapper.updateComment(params);
|
||||
}
|
||||
|
||||
public void deleteComment(Map<String, Object> params) {
|
||||
boardMapper.deleteComment(params);
|
||||
}
|
||||
|
||||
public boolean checkBoardPassword(Map<String, Object> params) {
|
||||
return boardMapper.checkBoardPassword(params);
|
||||
}
|
||||
|
||||
public boolean checkCommentPassword(Map<String, Object> params) {
|
||||
return boardMapper.checkCommentPassword(params);
|
||||
}
|
||||
|
||||
|
||||
public boolean isSecretBoard(Long boardId) {
|
||||
return boardMapper.isSecretBoard(boardId);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
115
src/main/resources/mapper/boardMapper.xml
Normal file
115
src/main/resources/mapper/boardMapper.xml
Normal file
@ -0,0 +1,115 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="io.company.localhost.mapper.BoardMapper">
|
||||
|
||||
<!-- 공지사항 조회 -->
|
||||
<select id="getNotices" resultType="java.util.Map">
|
||||
SELECT
|
||||
b.LOCBRDSEQ,
|
||||
b.LOCBRDTTL,
|
||||
b.LOCBRDCON,
|
||||
b.LOCBRDRDT,
|
||||
b.LOCBRDTYP,
|
||||
a.FILE_PATH,
|
||||
a.FILE_NAME,
|
||||
a.FILE_TYPE
|
||||
FROM localbord b
|
||||
LEFT JOIN attachments a ON b.LOCBRDSEQ = a.LOCBRDSEQ
|
||||
WHERE b.LOCBRDTYP = 'N'
|
||||
ORDER BY b.LOCBRDRDT DESC
|
||||
</select>
|
||||
|
||||
<!-- 자유/비밀 게시판 조회 -->
|
||||
<select id="getGeneralPosts" resultType="java.util.Map">
|
||||
SELECT
|
||||
b.LOCBRDSEQ,
|
||||
b.LOCBRDTTL,
|
||||
b.LOCBRDCON,
|
||||
b.LOCBRDRDT,
|
||||
b.LOCBRDTYP,
|
||||
a.FILE_PATH,
|
||||
a.FILE_NAME,
|
||||
a.FILE_TYPE
|
||||
FROM localbord b
|
||||
LEFT JOIN attachments a ON b.LOCBRDSEQ = a.LOCBRDSEQ
|
||||
WHERE b.LOCBRDTYP IN ('F', 'S')
|
||||
ORDER BY b.LOCBRDRDT DESC
|
||||
</select>
|
||||
|
||||
<!-- 게시물 작성 -->
|
||||
<insert id="createBoard">
|
||||
INSERT INTO localbord (LOCBRDTTL, LOCBRDCON, LOCBRDCAT, MEMBERSEQ, LOCBRDCNT, LOCBRDRDT, LOCBRDUDT, LOCBRDPWD, LOCBRDTYP)
|
||||
VALUES (#{LOCBRDTTL}, #{LOCBRDCON}, #{LOCBRDCAT}, #{MEMBERSEQ}, 0, NOW(), NOW(), #{LOCBRDPWD}, #{LOCBRDTYP})
|
||||
</insert>
|
||||
|
||||
<!-- 첨부파일 저장 -->
|
||||
<insert id="addAttachment">
|
||||
INSERT INTO commonfil (CMNBRDSEQ, CMNFLEPAT, CMNFLENAM, CMNFLEORG, CMNFLEEXT, CMNFLESIZ, CMNFLEREG, CMNFLERDT)
|
||||
VALUES (#{CMNBRDSEQ}, #{CMNFLEPAT}, #{CMNFLENAM}, #{CMNFLEORG}, #{CMNFLEEXT}, #{CMNFLESIZ}, #{CMNFLEREG}, NOW())
|
||||
</insert>
|
||||
|
||||
<!-- 게시물 삭제 -->
|
||||
<delete id="deleteBoard">
|
||||
DELETE FROM localbord WHERE LOCBRDSEQ = #{LOCBRDSEQ}
|
||||
</delete>
|
||||
|
||||
<!-- 게시물 수정 -->
|
||||
<update id="updateBoard">
|
||||
UPDATE localbord
|
||||
SET LOCBRDTTL = #{LOCBRDTTL}, LOCBRDCON = #{LOCBRDCON}, LOCBRDUDT = NOW()
|
||||
WHERE LOCBRDSEQ = #{LOCBRDSEQ}
|
||||
</update>
|
||||
|
||||
<!-- 게시물 좋아요/싫어요 추가 -->
|
||||
<insert id="reactToBoard">
|
||||
INSERT INTO localgorb (LOCBRDSEQ, LOCCMTSEQ, MEMBERSEQ, LOCGOBGOD, LOCGOBBAD )
|
||||
VALUES (#{LOCBRDSEQ}, #{LOCCMTSEQ}, #{MEMBERSEQ}, #{LOCGOBGOD}, #{LOCGOBBAD})
|
||||
ON DUPLICATE KEY UPDATE LOCGOBGOD = #{LOCGOBGOD}, LOCGOBBAD = #{LOCGOBBAD}
|
||||
</insert>
|
||||
|
||||
<!-- 댓글/대댓글 조회 -->
|
||||
<select id="getComments" resultType="java.util.Map">
|
||||
SELECT LOCCMTSEQ, LOCBRDSEQ, LOCCMTRPY, LOCCMTPWD, LOCCMTRDT, LOCCMTPNT
|
||||
FROM loccomt
|
||||
WHERE LOCBRDSEQ = #{LOCBRDSEQ}
|
||||
ORDER BY LOCCMTPNT ASC, LOCCMTRDT ASC
|
||||
</select>
|
||||
|
||||
<!-- 댓글/대댓글 작성 -->
|
||||
<insert id="addCommentOrReply">
|
||||
INSERT INTO loccomt (LOCBRDSEQ, LOCCMTRPY, LOCCMTPWD, LOCCMTRDT, LOCCMTPNT)
|
||||
VALUES (#{LOCBRDSEQ}, #{LOCCMTRPY}, #{LOCCMTPWD}, NOW(), #{LOCCMTPNT})
|
||||
</insert>
|
||||
|
||||
<!-- 댓글/대댓글 수정 -->
|
||||
<update id="updateComment">
|
||||
UPDATE loccomt
|
||||
SET LOCCMTRPY = #{LOCCMTRPY}, LOCCMTUDT = NOW()
|
||||
WHERE LOCCMTSEQ = #{LOCCMTSEQ} AND LOCCMTPWD = #{LOCCMTPWD}
|
||||
</update>
|
||||
|
||||
<!-- 댓글/대댓글 삭제 -->
|
||||
<delete id="deleteComment">
|
||||
DELETE FROM loccomt
|
||||
WHERE LOCCMTSEQ = #{LOCCMTSEQ} AND LOCCMTPWD = #{LOCCMTPWD}
|
||||
</delete>
|
||||
|
||||
<!-- 비밀번호 확인 (게시물) -->
|
||||
<select id="checkBoardPassword" resultType="boolean">
|
||||
SELECT COUNT(*) > 0 FROM localbord WHERE LOCBRDSEQ = #{LOCBRDSEQ} AND LOCBRDPWD = #{LOCBRDPWD}
|
||||
</select>
|
||||
|
||||
<!-- 비밀번호 확인 (댓글) -->
|
||||
<select id="checkCommentPassword" resultType="boolean">
|
||||
SELECT COUNT(*) > 0 FROM loccomt WHERE LOCCMTSEQ = #{LOCCMTSEQ} AND LOCCMTPWD = #{LOCCMTPWD}
|
||||
</select>
|
||||
|
||||
<!-- 비밀 게시판 여부 확인 -->
|
||||
<select id="isSecretBoard" resultType="boolean">
|
||||
SELECT CASE WHEN LOCBRDTYP = 'S' THEN TRUE ELSE FALSE END
|
||||
FROM localbord
|
||||
WHERE LOCBRDSEQ = #{LOCBRDSEQ}
|
||||
</select>
|
||||
|
||||
|
||||
</mapper>
|
||||
Loading…
Reference in New Issue
Block a user