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 8f00c291..5fcb6f6e 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 93a40511..a717bd59 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 c947ca57..ead1ace9 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 81a6ecb7..dd541238 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;