From c978a9171ac5bdd19ecbbea4dff4ef4cdaac56c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dhji=28=EC=A7=80=EB=8C=80=ED=95=9C=29?= Date: Wed, 18 Oct 2023 18:08:11 +0900 Subject: [PATCH] =?UTF-8?q?FAQ,=20QnA=20=EC=83=9D=EC=84=B1=EC=9D=BC?= =?UTF-8?q?=EC=8B=9C=20=EC=B5=9C=EA=B7=BC=EC=9D=BC=20=EC=88=9C=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=A0=95=EB=A0=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cns/qna/controller/CnsQnaController.java | 29 ++- .../api/cns/qna/service/CnsQnaService.java | 7 + .../repository/cns/CnsFaqQueryRepository.java | 191 +++++++++--------- .../repository/cns/CnsQnaQueryRepository.java | 46 +++++ 4 files changed, 176 insertions(+), 97 deletions(-) diff --git a/pav-server/src/main/java/com/palnet/biz/api/cns/qna/controller/CnsQnaController.java b/pav-server/src/main/java/com/palnet/biz/api/cns/qna/controller/CnsQnaController.java index 8f00c29..5fcb6f6 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/cns/qna/controller/CnsQnaController.java +++ b/pav-server/src/main/java/com/palnet/biz/api/cns/qna/controller/CnsQnaController.java @@ -58,7 +58,7 @@ public class CnsQnaController { @GetMapping @Tag(name = "QNA", description = "QNA 관련 API") - @ApiOperation(value = "QnA 리스트 조회") + @ApiOperation(value = "QnA 리스트 조회-관리자") public ResponseEntity selectQna(QnaSelectListRQ rq) { List result = new ArrayList<>(); @@ -81,6 +81,31 @@ public class CnsQnaController { } + @GetMapping("/user") + @Tag(name = "QNA", description = "QNA 관련 API") + @ApiOperation(value = "QnA 리스트 조회-사용자") + public ResponseEntity selectQnaForUser(QnaSelectListRQ rq) { + + List result = new ArrayList<>(); + try { + result = cnsQnaService.selectQnaForUser(rq); + } catch (CustomException e) { + Map resultMap = new HashMap<>(); + log.error("IGNORE : ", e); + resultMap.put("result", false); + resultMap.put("errorCode", e.getErrorCode()); + resultMap.put("errorMessage", e.getMessage()); + return ResponseEntity.ok().body(new SuccessResponse<>(resultMap)); + } catch (Exception e) { + log.error("IGNORE : ", e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(new ErrorResponse("Server Error", "-1")); + + } + return ResponseEntity.ok().body(new SuccessResponse<>(result)); + } + + @GetMapping("/{qnaSno}") @Tag(name = "QNA", description = "QNA 관련 API") @ApiOperation(value = "QnA 상세보기") @@ -127,6 +152,8 @@ public class CnsQnaController { return ResponseEntity.ok().body(new SuccessResponse<>(result)); } + + @DeleteMapping("/{qnaSno}") @Tag(name = "QNA", description = "QNA 관련 API") @ApiOperation(value = "QnA 삭제하기") diff --git a/pav-server/src/main/java/com/palnet/biz/api/cns/qna/service/CnsQnaService.java b/pav-server/src/main/java/com/palnet/biz/api/cns/qna/service/CnsQnaService.java index 93a4051..a717bd5 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/cns/qna/service/CnsQnaService.java +++ b/pav-server/src/main/java/com/palnet/biz/api/cns/qna/service/CnsQnaService.java @@ -125,6 +125,11 @@ public class CnsQnaService { return cnsQnaQueryRepository.getQnaList(rq); } + public List selectQnaForUser(QnaSelectListRQ rq) { + String userId = jwtTokenUtil.getUserIdByToken(); + return cnsQnaQueryRepository.getQnaListForUser(rq, userId); + } + /** * QnaInsert * @@ -174,4 +179,6 @@ public class CnsQnaService { cnsQnaBasRepository.save(entity); return true; } + + } diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/repository/cns/CnsFaqQueryRepository.java b/pav-server/src/main/java/com/palnet/biz/jpa/repository/cns/CnsFaqQueryRepository.java index c947ca5..ead1ace 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/repository/cns/CnsFaqQueryRepository.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/repository/cns/CnsFaqQueryRepository.java @@ -1,111 +1,110 @@ package com.palnet.biz.jpa.repository.cns; -import java.util.List; - -import org.springframework.stereotype.Repository; - import com.palnet.biz.api.cns.faq.model.FaqListModel; import com.palnet.biz.jpa.entity.QCnsFaqBas; import com.querydsl.core.BooleanBuilder; import com.querydsl.core.types.Projections; import com.querydsl.jpa.impl.JPAQueryFactory; - import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Repository; + +import java.util.List; @Slf4j @Repository @RequiredArgsConstructor public class CnsFaqQueryRepository { - - private final JPAQueryFactory query; - - public List getFaqList(String category, String word) { - - QCnsFaqBas bas = QCnsFaqBas.cnsFaqBas; - - BooleanBuilder builder = new BooleanBuilder(); - builder.and(bas.delYn.eq("N")); - builder.and(bas.expsrYn.eq("Y")); - - if(category != null) { - builder.and(bas.category.eq(category)); - } - - if(word != null) { - builder.and(bas.title.contains(word)); - } - - List r = query - .select(Projections.bean( - FaqListModel.class, - bas.faqSno, - bas.category, - bas.title, - bas.content, - bas.viewCnt, - bas.expsrYn, - bas.createUserId, - bas.createDt, - bas.updateUserId, - bas.updateDt - )) - .from(bas) - .where(builder) - .fetch(); - - - return r; - } - - public FaqListModel getFaqDetail(int sno) { - - QCnsFaqBas bas = QCnsFaqBas.cnsFaqBas; - - BooleanBuilder builder = new BooleanBuilder(); - builder.and(bas.faqSno.eq(sno)); - builder.and(bas.expsrYn.eq("Y")); - builder.and(bas.delYn.eq("N")); - - FaqListModel r = query - .select(Projections.bean( - FaqListModel.class, - bas.faqSno, - bas.category, - bas.title, - bas.content, - bas.viewCnt, - bas.expsrYn, - bas.createUserId, - bas.createDt, - bas.updateUserId, - bas.updateDt - )) - .from(bas) - .where(builder) - .fetchOne(); - - - return r; - } - - public void updateFaq(FaqListModel model) { - QCnsFaqBas bas = QCnsFaqBas.cnsFaqBas; - - BooleanBuilder builder = new BooleanBuilder(); - builder.and(bas.faqSno.eq(model.getFaqSno())); - - query.update(bas) - .set(bas.category, model.getCategory()) - .set(bas.title, model.getTitle()) - .set(bas.content, model.getContent()) - .set(bas.viewCnt, model.getViewCnt()) - .set(bas.expsrYn, model.getExpsrYn()) - .set(bas.updateUserId, model.getUpdateUserId()) - .set(bas.updateDt, model.getUpdateDt()) - .where(builder) - .execute(); - - } - + + private final JPAQueryFactory query; + + public List getFaqList(String category, String word) { + + QCnsFaqBas bas = QCnsFaqBas.cnsFaqBas; + + BooleanBuilder builder = new BooleanBuilder(); + builder.and(bas.delYn.eq("N")); + builder.and(bas.expsrYn.eq("Y")); + + if (category != null) { + builder.and(bas.category.eq(category)); + } + + if (word != null) { + builder.and(bas.title.contains(word)); + } + + List r = query + .select(Projections.bean( + FaqListModel.class, + bas.faqSno, + bas.category, + bas.title, + bas.content, + bas.viewCnt, + bas.expsrYn, + bas.createUserId, + bas.createDt, + bas.updateUserId, + bas.updateDt + )) + .from(bas) + .where(builder) + .orderBy(bas.createDt.desc()) + .fetch(); + + + return r; + } + + public FaqListModel getFaqDetail(int sno) { + + QCnsFaqBas bas = QCnsFaqBas.cnsFaqBas; + + BooleanBuilder builder = new BooleanBuilder(); + builder.and(bas.faqSno.eq(sno)); + builder.and(bas.expsrYn.eq("Y")); + builder.and(bas.delYn.eq("N")); + + FaqListModel r = query + .select(Projections.bean( + FaqListModel.class, + bas.faqSno, + bas.category, + bas.title, + bas.content, + bas.viewCnt, + bas.expsrYn, + bas.createUserId, + bas.createDt, + bas.updateUserId, + bas.updateDt + )) + .from(bas) + .where(builder) + .fetchOne(); + + + return r; + } + + public void updateFaq(FaqListModel model) { + QCnsFaqBas bas = QCnsFaqBas.cnsFaqBas; + + BooleanBuilder builder = new BooleanBuilder(); + builder.and(bas.faqSno.eq(model.getFaqSno())); + + query.update(bas) + .set(bas.category, model.getCategory()) + .set(bas.title, model.getTitle()) + .set(bas.content, model.getContent()) + .set(bas.viewCnt, model.getViewCnt()) + .set(bas.expsrYn, model.getExpsrYn()) + .set(bas.updateUserId, model.getUpdateUserId()) + .set(bas.updateDt, model.getUpdateDt()) + .where(builder) + .execute(); + + } + } \ No newline at end of file diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/repository/cns/CnsQnaQueryRepository.java b/pav-server/src/main/java/com/palnet/biz/jpa/repository/cns/CnsQnaQueryRepository.java index 81a6ecb..dd54123 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/repository/cns/CnsQnaQueryRepository.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/repository/cns/CnsQnaQueryRepository.java @@ -65,6 +65,52 @@ public class CnsQnaQueryRepository { )) .from(bas) .where(builder) + .orderBy(bas.createDt.desc()) + .fetch(); + + return r; + } + + public List getQnaListForUser(QnaSelectListRQ rq, String userId) { + QCnsQnaBas bas = QCnsQnaBas.cnsQnaBas; + + BooleanBuilder builder = new BooleanBuilder(); + builder.and(bas.delYn.eq("N")); + builder.and(bas.expsrYn.eq("Y")); + builder.and(bas.createUserId.eq(userId)); + + if (rq != null) { + + if (rq.getCategory() != null) { + builder.and(bas.category.eq(rq.getCategory())); + } + + if (rq.getWord() != null) { + if ("TITLE".equals(rq.getSearchType())) builder.and(bas.title.contains(rq.getWord())); + else if ("CONTENT".equals(rq.getSearchType())) builder.and(bas.content.contains(rq.getWord())); + else builder.and(bas.title.contains(rq.getWord()).or(bas.content.contains(rq.getWord()))); + } + } + + List r = query + .select(Projections.bean( + QnaBasModel.class, + bas.qnaSno, + bas.category, + bas.title, + bas.content, + bas.fileGroupNo, + bas.viewCnt, + bas.expsrYn, + bas.delYn, + bas.createUserId, + bas.createDt, + bas.updateUserId, + bas.updateDt + )) + .from(bas) + .where(builder) + .orderBy(bas.createDt.desc()) .fetch(); return r;