From ff761d4385ddb1ab55674601c1a96cde0e70d045 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9C=A0=EB=AF=BC=ED=98=95?= Date: Thu, 18 Jul 2024 17:53:10 +0900 Subject: [PATCH] =?UTF-8?q?=EB=8C=93=EA=B8=80=EC=A1=B0=ED=9A=8C/=EB=93=B1?= =?UTF-8?q?=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/pages/support/Detail.jsx | 108 +++++++-- .../src/pages/support/List.jsx | 8 +- .../admin/boards/AdminBoardsController.java | 4 +- .../admin/boards/entity/TnBbsRepl.java | 57 +++++ .../repository/TnBbsReplRepository.java | 14 ++ .../boards/service/AdminBoardsService.java | 5 +- .../user/UserBoardsController.java | 228 ++++++++++++++++++ .../user/service/UserBoardsService.java | 53 ++++ 8 files changed, 450 insertions(+), 27 deletions(-) create mode 100644 kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/entity/TnBbsRepl.java create mode 100644 kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/repository/TnBbsReplRepository.java create mode 100644 kcsc-back-end/src/main/java/com/dbnt/kcscbackend/user/UserBoardsController.java create mode 100644 kcsc-back-end/src/main/java/com/dbnt/kcscbackend/user/service/UserBoardsService.java diff --git a/egovframe-template-simple-react-contribution/src/pages/support/Detail.jsx b/egovframe-template-simple-react-contribution/src/pages/support/Detail.jsx index ceb30db..0402f9c 100644 --- a/egovframe-template-simple-react-contribution/src/pages/support/Detail.jsx +++ b/egovframe-template-simple-react-contribution/src/pages/support/Detail.jsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import React, {useCallback, useEffect, useState} from 'react'; import {Link, useLocation, useNavigate, useParams} from 'react-router-dom'; import * as EgovNet from 'api/egovFetch'; @@ -9,6 +9,7 @@ import Col from 'react-bootstrap/Col'; import Button from 'react-bootstrap/Button'; import {format} from "date-fns"; import DOMPurify from 'dompurify'; +import CODE from "../../constants/code"; function Detail(){ @@ -21,6 +22,9 @@ function Detail(){ const item = location.state?.item; console.log("@@@ item : " + JSON.stringify(item)); + const [listTag, setListTag] = useState([]); + const [comment, setComment] = useState(''); + const goToList = () => { navigate('/support/list/KCSC-QA'); }; @@ -29,6 +33,86 @@ function Detail(){ navigate('/support/create/KCSC-QA'); }; + const retrieveList = useCallback(() => { + const retrieveListURL = '/user/boards/reply/reply-list?bbsContSeq=' + bbsContSeq; + + const requestOptions = { + method: "GET", + headers: { + 'Content-type': 'application/json', + } + } + + EgovNet.requestFetch(retrieveListURL, + requestOptions, + (resp) => { + let mutListTag = []; + setListTag([]); + resp.result.replyList.forEach(function (item) { + const finalModifiedDate = item?.lastChgDt ? item?.lastChgDt : item?.frstCrtDt; + const formattedDate = finalModifiedDate ? format(finalModifiedDate, "yyyy-MM-dd HH:mm:ss") : ""; + mutListTag.push( +
  • + {item?.frstCrtId}, {formattedDate} + {item?.replCont} + 삭제 +
  • + ); + }); + if(!mutListTag.length) mutListTag.push(

    댓글이 없습니다.

    ); // 댓글 목록 초기값 + setListTag(mutListTag); + }, + function (resp) { + console.log("err response : ", resp); + } + ); + },[]); + + useEffect(() => { + retrieveList(); + }, []); + + const handleChange = (event) => { + setComment(event.target.value); + }; + + const handleSubmit = (e) => { + console.log(comment); + editReply(e); + }; + + function editReply(e) { + e.preventDefault(); + e.stopPropagation(); + + const data = { + bbsContSeq: bbsContSeq, + replCont: comment + }; + console.log("@@@ data : " + JSON.stringify(data)); + EgovNet.requestFetch( + '/user/boards/reply/reply-mgt', + { + method: "POST", + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(data) + }, + (resp) => { + if (Number(resp.resultCode) === Number(CODE.RCV_SUCCESS)) { + alert("저장되었습니다."); + setComment(''); + retrieveList(); + } else if (Number(resp.resultCode) === Number(CODE.RCV_ERROR_AUTH)) { + console.log("토큰 갱신중.") + } else { + alert(resp.result.resultMessage) + } + } + ) + } + return (
    @@ -114,32 +198,18 @@ function Detail(){ {/*
    */} - + {/*
    */} - + {/* */}
      -
    • - chanjin, 2011-08-08 12:33:33 - 심각: Servlet.service() for servlet action threw exception은 jsp파일을 열어서 보셔야합니다.
      - javax.servlet.ServletException: Could not get RequestDispatcher for [/WEB-INF/jsp/egovframework//main/main.jsp]: check that
      - 삭제 -
    • -
    • - sunrise, 2011-08-07 11:11:11 - tomcat서버를 재시동해보세요. 전 그렇게 하니깐 되던데요. - 삭제 -
    • -
    • - auto, 2011-08-07 11:11:11 - 제가 살펴볼께요 메일로 주세요. test@naver.com - 삭제 -
    • + {listTag}
    diff --git a/egovframe-template-simple-react-contribution/src/pages/support/List.jsx b/egovframe-template-simple-react-contribution/src/pages/support/List.jsx index edbaa18..6c07025 100644 --- a/egovframe-template-simple-react-contribution/src/pages/support/List.jsx +++ b/egovframe-template-simple-react-contribution/src/pages/support/List.jsx @@ -42,9 +42,9 @@ function List(){ handleClose(); const params = EgovNet.convParams(searchCondition); - console.groupCollapsed("EgovAdminPostList.retrieveList()"); + console.groupCollapsed("EgovUserPostList.retrieveList()"); - const retrieveListURL = '/admin/boards/posts/post-list' + params; + const retrieveListURL = '/user/boards/posts/post-list' + params; const requestOptions = { method: "GET", @@ -84,7 +84,7 @@ function List(){ mutListTag.push(
    {resp.result.resultCnt - (resp.result.paginationInfo.pageIndex -1) * resp.result.paginationInfo.rowCnt - index}
    -
    {item?.bbsContTitle}
    +
    {Detail(item)}}>{item?.bbsContTitle}
    {item?.frstCrtId}
    {item?.bbsReadCnt}
    {formattedDate}
    @@ -99,7 +99,7 @@ function List(){ console.log("err response : ", resp); } ); - console.groupEnd("EgovAdminPostList.retrieveList()"); + console.groupEnd("EgovUserPostList.retrieveList()"); },[listTag]); useEffect(() => { diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/AdminBoardsController.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/AdminBoardsController.java index cf27d3d..3f73120 100644 --- a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/AdminBoardsController.java +++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/AdminBoardsController.java @@ -2,10 +2,9 @@ package com.dbnt.kcscbackend.admin.boards; import com.dbnt.kcscbackend.admin.boards.entity.TnBbs; import com.dbnt.kcscbackend.admin.boards.entity.TnBbsContents; +import com.dbnt.kcscbackend.admin.boards.entity.TnBbsRepl; import com.dbnt.kcscbackend.admin.boards.service.AdminBoardsService; -import com.dbnt.kcscbackend.admin.config.entity.TcMenu; import com.dbnt.kcscbackend.auth.entity.LoginVO; -import com.dbnt.kcscbackend.commonCode.CommonCodeController; import com.dbnt.kcscbackend.commonCode.service.CommonCodeService; import com.dbnt.kcscbackend.config.common.BaseController; import com.dbnt.kcscbackend.config.common.ResponseCode; @@ -26,7 +25,6 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.util.ArrayList; import java.util.HashMap; diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/entity/TnBbsRepl.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/entity/TnBbsRepl.java new file mode 100644 index 0000000..550c59b --- /dev/null +++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/entity/TnBbsRepl.java @@ -0,0 +1,57 @@ +package com.dbnt.kcscbackend.admin.boards.entity; +import com.dbnt.kcscbackend.config.common.BoardParams; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; + +import javax.persistence.*; +import java.time.LocalDateTime; + +@Getter +@Setter +@Entity +@NoArgsConstructor +@DynamicInsert +@DynamicUpdate +@Table(name = "tn_bbs_repl") +public class TnBbsRepl extends BoardParams { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "repl_seq") + private Long replSeq; + + @Column(name = "bbs_cont_seq", nullable = false) + private Long bbsContSeq; + + @Column(name = "repl_cont", nullable = false, length = 550) + private String replCont; + + @Column(name = "repl_cont_parent") + private Long replContParent; + + @Column(name = "repl_cont_level", nullable = false) + private Long replContLevel; + + @Column(name = "ip_address", nullable = false, length = 50) + private String ipAddress; + + @Column(name = "frst_crt_id", nullable = false, length = 50) + private String frstCrtId; + + @Column(name = "frst_crt_dt", nullable = false) + private LocalDateTime frstCrtDt; + + @Column(name = "last_chg_id", length = 50) + private String lastChgId; + + @Column(name = "last_chg_dt") + private LocalDateTime lastChgDt; + + @Column(name = "use_yn", nullable = false, columnDefinition = "bpchar(1)") + private String useYn; + + @Column(name = "old_seq") + private Long oldSeq; +} \ No newline at end of file diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/repository/TnBbsReplRepository.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/repository/TnBbsReplRepository.java new file mode 100644 index 0000000..d42d72d --- /dev/null +++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/repository/TnBbsReplRepository.java @@ -0,0 +1,14 @@ +package com.dbnt.kcscbackend.admin.boards.repository; + +import com.dbnt.kcscbackend.admin.boards.entity.TnBbs; +import com.dbnt.kcscbackend.admin.boards.entity.TnBbsRepl; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; +import java.util.Optional; + +public interface TnBbsReplRepository extends JpaRepository { + + List findByBbsContSeq(Long bbsContSeq); + Long countByBbsContSeq(Long bbsContSeq); +} diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/service/AdminBoardsService.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/service/AdminBoardsService.java index 9bd1902..69ab231 100644 --- a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/service/AdminBoardsService.java +++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/boards/service/AdminBoardsService.java @@ -2,11 +2,13 @@ package com.dbnt.kcscbackend.admin.boards.service; import com.dbnt.kcscbackend.admin.boards.entity.TnBbs; import com.dbnt.kcscbackend.admin.boards.entity.TnBbsContents; +import com.dbnt.kcscbackend.admin.boards.entity.TnBbsRepl; import com.dbnt.kcscbackend.admin.boards.mapper.AdminBoardsMapper; import com.dbnt.kcscbackend.admin.boards.repository.TnBbsContentsRepository; +import com.dbnt.kcscbackend.admin.boards.repository.TnBbsReplRepository; import com.dbnt.kcscbackend.admin.boards.repository.TnBbsRepository; -import com.dbnt.kcscbackend.admin.config.entity.TcMenu; import com.dbnt.kcscbackend.auth.entity.LoginVO; +import com.dbnt.kcscbackend.config.util.ClientUtils; import com.dbnt.kcscbackend.file.entity.TnAttachFile; import com.dbnt.kcscbackend.file.service.FileService; import lombok.RequiredArgsConstructor; @@ -26,6 +28,7 @@ public class AdminBoardsService extends EgovAbstractServiceImpl { private final TnBbsRepository tnBbsRepository; private final TnBbsContentsRepository tnBbsContentsRepository; + private final TnBbsReplRepository tnBbsReplRepository; private final AdminBoardsMapper adminBoardsMapper; private final FileService fileService; diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/user/UserBoardsController.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/user/UserBoardsController.java new file mode 100644 index 0000000..25d9b55 --- /dev/null +++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/user/UserBoardsController.java @@ -0,0 +1,228 @@ +package com.dbnt.kcscbackend.user; + +import com.dbnt.kcscbackend.admin.boards.entity.TnBbsContents; +import com.dbnt.kcscbackend.admin.boards.entity.TnBbsRepl; +import com.dbnt.kcscbackend.admin.boards.service.AdminBoardsService; +import com.dbnt.kcscbackend.auth.entity.LoginVO; +import com.dbnt.kcscbackend.commonCode.service.CommonCodeService; +import com.dbnt.kcscbackend.config.common.BaseController; +import com.dbnt.kcscbackend.config.common.ResponseCode; +import com.dbnt.kcscbackend.config.common.ResultVO; +import com.dbnt.kcscbackend.config.util.ClientUtils; +import com.dbnt.kcscbackend.file.entity.TnAttachFile; +import com.dbnt.kcscbackend.file.service.FileService; +import com.dbnt.kcscbackend.user.service.UserBoardsService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.http.MediaType; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.validation.Errors; +import org.springframework.validation.FieldError; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.validation.Valid; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/user/boards") +@Tag(name = "UserBoardsController", description = "사이트관리 게시판현황") +public class UserBoardsController extends BaseController { + + private final AdminBoardsService adminBoardsService; + private final UserBoardsService userBoardsService; + private final CommonCodeService commonCodeService; + private final FileService fileService; + + /* ---- 게시물관리 ----- */ + @Operation( + summary = "게시물 목록 조회", + description = "게시물 목록 조회", + tags = {"UserBoardsController"} + ) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "조회 성공"), + @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님") + }) + @RequestMapping(method = RequestMethod.GET, value = "/posts/post-list", consumes = MediaType.APPLICATION_JSON_VALUE) + public ResultVO getPostList(TnBbsContents tnBbsContents) throws Exception { + ResultVO resultVO = new ResultVO(); + tnBbsContents.setQueryInfo(); + Map resultMap = adminBoardsService.selectPostList(tnBbsContents); + resultMap.put("categoryList", adminBoardsService.selectBoardList()); + int totCnt = Integer.parseInt((String)resultMap.get("resultCnt")); + tnBbsContents.setContentCnt(totCnt); + tnBbsContents.setPaginationInfo(); + resultMap.put("paginationInfo", tnBbsContents); + resultVO.setResult(resultMap); + return resultVO; + } + + @Operation( + summary = "게시물 카테고리 셀렉트박스 옵션, 파일 목록 조회", + description = "게시물 카테고리 셀렉트박스 옵션, 파일 목록 조회", + tags = {"UserBoardsController"} + ) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "조회 성공"), + @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님") + }) + @RequestMapping(method = RequestMethod.POST, value = "/posts/get-category-and-file-list", consumes = MediaType.APPLICATION_JSON_VALUE) + public ResultVO getCategoryList(@RequestBody TnBbsContents tnBbsContents) throws Exception { + ResultVO resultVO = new ResultVO(); + Map resultMap = new HashMap<>(); + + resultMap.put("categoryList", adminBoardsService.selectBoardList()); + //첨부파일명을 가져온다. + List tnAttachFileList = fileService.findByFileGrpId(tnBbsContents.getFileGrpId()); + System.out.println("@@@ fileGrpId : " + tnBbsContents.getFileGrpId()); + + if (tnAttachFileList != null) { + List> files = new ArrayList>(); + for (TnAttachFile item : tnAttachFileList) { + Map fileDto = new HashMap(); + fileDto.put("seq", item.getFileSeq()); + fileDto.put("name", item.getFileOldName()); + files.add(fileDto); + } + resultMap.put("files", files); + System.out.println("@@@ files : " + files); + } else { + resultMap.put("files", null); + } + resultVO.setResult(resultMap); + return resultVO; + } + + @Operation( + summary = "게시물 저장", + description = "게시물 저장", + tags = {"UserBoardsController"} + ) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "저장 성공"), + @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님") + }) + @RequestMapping(method = RequestMethod.PUT, value = "/posts/post-mgt") + public ResultVO savePostMgt( + @Valid TnBbsContents contents, + HttpServletRequest request, + Errors errors, + @RequestParam(required = false) long[] survivingFiles, + @RequestParam(required = false) MultipartFile[] files, + @AuthenticationPrincipal LoginVO user) throws Exception { + ResultVO resultVO = new ResultVO(); + if (user == null) { + resultVO.setResultCode(ResponseCode.TOKEN_EXPIRED.getCode()); + } else { + if (errors.hasErrors()) { + StringBuilder msg = new StringBuilder(); + for (FieldError error : errors.getFieldErrors()) { + msg.append(error.getDefaultMessage()); + msg.append("\n"); + } + resultVO.setResultCode(ResponseCode.INPUT_CHECK_ERROR.getCode()); + resultVO.setResultMessage(msg.toString()); + } else { + System.out.println("@@@ contents.getBbsSeq() : " + contents.getBbsSeq()); + contents.setIpAddress(ClientUtils.getRemoteIP(request)); + adminBoardsService.savePost(contents, request, user, files, survivingFiles); + resultVO.setResultCode(ResponseCode.SUCCESS.getCode()); + } + } + return resultVO; + } + + @Operation( + summary = "게시물 삭제", + description = "게시물 삭제", + tags = {"UserBoardsController"} + ) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "삭제 성공"), + @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님") + }) + @RequestMapping(method = RequestMethod.DELETE, value = "/posts/post-mgt") + public ResultVO deletePostMgt(@RequestBody TnBbsContents contents, HttpServletRequest request, @AuthenticationPrincipal LoginVO user) { + ResultVO resultVO = new ResultVO(); + if (user == null) { + resultVO.setResultCode(ResponseCode.TOKEN_EXPIRED.getCode()); + } else { + contents.setIpAddress(ClientUtils.getRemoteIP(request)); + String result = adminBoardsService.deletePost(contents); + if (result == null) { + resultVO.setResultCode(ResponseCode.SUCCESS.getCode()); + } else if (result.equals("notFind")) { + resultVO.setResultCode(ResponseCode.SAVE_ERROR.getCode()); + resultVO.setResultMessage("대상이 존재하지 않습니다."); + } + } + return resultVO; + } + + /* ---- 댓글관리 ----- */ + @Operation( + summary = "댓글 목록 조회", + description = "댓글 목록 조회", + tags = {"UserBoardsController"} + ) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "조회 성공"), + @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님") + }) + @RequestMapping(method = RequestMethod.GET, value = "/reply/reply-list", consumes = MediaType.APPLICATION_JSON_VALUE) + public ResultVO getReplyList(TnBbsRepl tnBbsRepl) throws Exception { + ResultVO resultVO = new ResultVO(); + Map resultMap = userBoardsService.selectReplyList(tnBbsRepl.getBbsContSeq()); + resultVO.setResult(resultMap); + return resultVO; + } + + @Operation( + summary = "댓글 저장", + description = "댓글 저장", + tags = {"UserBoardsController"} + ) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "저장 성공"), + @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님") + }) + @RequestMapping(method = RequestMethod.POST, value = "/reply/reply-mgt") + public ResultVO saveReplyMgt( + @Valid @RequestBody TnBbsRepl tnBbsRepl, + HttpServletRequest request, + Errors errors, + @AuthenticationPrincipal LoginVO user) throws Exception { + System.out.println("@@@ : " + tnBbsRepl.getBbsContSeq()); + System.out.println("@@@ : " + tnBbsRepl.getReplCont()); + + ResultVO resultVO = new ResultVO(); + if (user == null) { + resultVO.setResultCode(ResponseCode.TOKEN_EXPIRED.getCode()); + } else { + if (errors.hasErrors()) { + StringBuilder msg = new StringBuilder(); + for (FieldError error : errors.getFieldErrors()) { + msg.append(error.getDefaultMessage()); + msg.append("\n"); + } + resultVO.setResultCode(ResponseCode.INPUT_CHECK_ERROR.getCode()); + resultVO.setResultMessage(msg.toString()); + } else { + System.out.println("@@@ tnBbsRepl.getBbsSeq() : " + tnBbsRepl.getBbsContSeq()); + userBoardsService.saveReply(tnBbsRepl, request, user); + resultVO.setResultCode(ResponseCode.SUCCESS.getCode()); + } + } + return resultVO; + } + +} diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/user/service/UserBoardsService.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/user/service/UserBoardsService.java new file mode 100644 index 0000000..311db78 --- /dev/null +++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/user/service/UserBoardsService.java @@ -0,0 +1,53 @@ +package com.dbnt.kcscbackend.user.service; + +import com.dbnt.kcscbackend.admin.boards.entity.TnBbs; +import com.dbnt.kcscbackend.admin.boards.entity.TnBbsContents; +import com.dbnt.kcscbackend.admin.boards.entity.TnBbsRepl; +import com.dbnt.kcscbackend.admin.boards.mapper.AdminBoardsMapper; +import com.dbnt.kcscbackend.admin.boards.repository.TnBbsContentsRepository; +import com.dbnt.kcscbackend.admin.boards.repository.TnBbsReplRepository; +import com.dbnt.kcscbackend.admin.boards.repository.TnBbsRepository; +import com.dbnt.kcscbackend.auth.entity.LoginVO; +import com.dbnt.kcscbackend.config.util.ClientUtils; +import com.dbnt.kcscbackend.file.entity.TnAttachFile; +import com.dbnt.kcscbackend.file.service.FileService; +import lombok.RequiredArgsConstructor; +import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.util.*; + +@Service +@RequiredArgsConstructor +public class UserBoardsService extends EgovAbstractServiceImpl { + + private final TnBbsRepository tnBbsRepository; + private final TnBbsContentsRepository tnBbsContentsRepository; + private final TnBbsReplRepository tnBbsReplRepository; + private final AdminBoardsMapper adminBoardsMapper; + private final FileService fileService; + + public Map selectReplyList(Long bbsContSeq) { + Map resultMap = new HashMap<>(); + resultMap.put("replyList", tnBbsReplRepository.findByBbsContSeq(bbsContSeq)); + resultMap.put("resultCnt", tnBbsReplRepository.countByBbsContSeq(bbsContSeq)); + return resultMap; + } + + public void saveReply(TnBbsRepl tnBbsRepl, HttpServletRequest request, LoginVO user) throws Exception { + tnBbsRepl.setBbsContSeq(tnBbsRepl.getBbsContSeq()); + tnBbsRepl.setReplCont(tnBbsRepl.getReplCont()); + tnBbsRepl.setReplContLevel(1L); + tnBbsRepl.setIpAddress(ClientUtils.getRemoteIP(request)); + tnBbsRepl.setFrstCrtId(user.getId()); + tnBbsRepl.setFrstCrtDt(LocalDateTime.now()); + tnBbsRepl.setUseYn("Y"); + tnBbsReplRepository.save(tnBbsRepl); + } + +}