From 82d69eb94098b61263548d6fe73d1615c8e8bfa5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?qkr7828=28=EB=B0=95=EC=9E=AC=EC=9A=B0=29?= Date: Fri, 13 Oct 2023 16:35:31 +0900 Subject: [PATCH] faq crud --- .../cns/faq/controller/CnsFaqController.java | 47 +++++++++--- ...{FaqListRSModel.java => FaqListModel.java} | 4 +- .../api/cns/faq/service/CnsFaqService.java | 73 +++++++++++++++++-- .../repository/cns/CnsFaqBasRepository.java | 7 +- .../repository/cns/CnsFaqQueryRepository.java | 33 +++++++-- 5 files changed, 140 insertions(+), 24 deletions(-) rename pav-server/src/main/java/com/palnet/biz/api/cns/faq/model/{FaqListRSModel.java => FaqListModel.java} (88%) diff --git a/pav-server/src/main/java/com/palnet/biz/api/cns/faq/controller/CnsFaqController.java b/pav-server/src/main/java/com/palnet/biz/api/cns/faq/controller/CnsFaqController.java index c546ff78..a3cfbfdf 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/cns/faq/controller/CnsFaqController.java +++ b/pav-server/src/main/java/com/palnet/biz/api/cns/faq/controller/CnsFaqController.java @@ -2,44 +2,73 @@ package com.palnet.biz.api.cns.faq.controller; import java.util.List; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.palnet.biz.api.cns.faq.model.FaqListRQModel; -import com.palnet.biz.api.cns.faq.model.FaqListRSModel; +import com.palnet.biz.api.cns.faq.model.FaqListModel; import com.palnet.biz.api.cns.faq.service.CnsFaqService; +import com.palnet.biz.api.comn.response.BasicResponse; +import com.palnet.biz.api.comn.response.SuccessResponse; -import io.swagger.v3.oas.annotations.parameters.RequestBody; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @RestController @Slf4j @RequiredArgsConstructor -@RequestMapping(value = "/api/bas/cns") +@RequestMapping(value = "/api/bas/cns/faq") public class CnsFaqController { private final CnsFaqService service; + /*FAQ 목록 조회*/ @PostMapping("/list") - public List getFaqList(@RequestBody FaqListRQModel model) { + public ResponseEntity getFaqList(@RequestBody FaqListRQModel model) { - List result = null; + List result = null; result = service.getFaqList(model); - return result; + return ResponseEntity.ok().body(new SuccessResponse<>(result)); } + /*FAQ 상세 조회*/ @GetMapping("/detail") - public FaqListRSModel getFaqDetail(int sno) { + public ResponseEntity getFaqDetail(int sno) { - FaqListRSModel result = null; + FaqListModel result = null; result = service.getFaqDetail(sno); - return result; + return ResponseEntity.ok().body(result); + } + + /*FAQ 작성*/ + @PostMapping("/insert") + public void insertFaq(@RequestBody FaqListModel model) { + + service.insertFaq(model); + + } + + /*FAQ 업데이트*/ + @PostMapping("/update") + public void updateFaq(@RequestBody FaqListModel model) { + + service.updateFaq(model); + + } + + /*FAQ 논리 삭제*/ + @PostMapping("/delete") + public void deleteFaq(int sno) { + + service.deleteFaq(sno); + } } \ No newline at end of file diff --git a/pav-server/src/main/java/com/palnet/biz/api/cns/faq/model/FaqListRSModel.java b/pav-server/src/main/java/com/palnet/biz/api/cns/faq/model/FaqListModel.java similarity index 88% rename from pav-server/src/main/java/com/palnet/biz/api/cns/faq/model/FaqListRSModel.java rename to pav-server/src/main/java/com/palnet/biz/api/cns/faq/model/FaqListModel.java index 579b9e10..891a7a1c 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/cns/faq/model/FaqListRSModel.java +++ b/pav-server/src/main/java/com/palnet/biz/api/cns/faq/model/FaqListModel.java @@ -5,9 +5,9 @@ import java.time.Instant; import lombok.Data; @Data -public class FaqListRSModel { +public class FaqListModel { - private int qnaSno; + private int faqSno; private String category; diff --git a/pav-server/src/main/java/com/palnet/biz/api/cns/faq/service/CnsFaqService.java b/pav-server/src/main/java/com/palnet/biz/api/cns/faq/service/CnsFaqService.java index 918b2a01..d6a105e2 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/cns/faq/service/CnsFaqService.java +++ b/pav-server/src/main/java/com/palnet/biz/api/cns/faq/service/CnsFaqService.java @@ -1,13 +1,19 @@ package com.palnet.biz.api.cns.faq.service; +import java.time.Instant; import java.util.List; +import javax.transaction.Transactional; + import org.springframework.stereotype.Service; +import com.palnet.biz.api.cns.faq.model.FaqListModel; import com.palnet.biz.api.cns.faq.model.FaqListRQModel; -import com.palnet.biz.api.cns.faq.model.FaqListRSModel; +import com.palnet.biz.jpa.entity.CnsFaqBas; import com.palnet.biz.jpa.repository.cns.CnsFaqBasRepository; import com.palnet.biz.jpa.repository.cns.CnsFaqQueryRepository; +import com.palnet.comn.code.ErrorCode; +import com.palnet.comn.exception.CustomException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -21,22 +27,79 @@ public class CnsFaqService { private final CnsFaqBasRepository cnsFaqBasRepository; - public List getFaqList(FaqListRQModel model){ + public List getFaqList(FaqListRQModel model){ + + List result = query.getFaqList(model.getCategory(), model.getWord()); - List result = query.getFaqList(model.getCategory(), model.getWord()); + if(result == null || result.size() < 1) throw new CustomException(ErrorCode.DATA_NO); return result; } - public FaqListRSModel getFaqDetail(int sno){ + public FaqListModel getFaqDetail(int sno){ cnsFaqBasRepository.updateViewCnt(sno); - FaqListRSModel result = query.getFaqDetail(sno); + FaqListModel result = query.getFaqDetail(sno); + + if(result == null) throw new CustomException(ErrorCode.DATA_NO); return result; } + @Transactional + public void insertFaq(FaqListModel model){ + + CnsFaqBas bas = new CnsFaqBas(); + + bas.setCreateDt(Instant.now()); + bas.setUpdateDt(Instant.now()); + + bas.setCategory(model.getCategory()); + bas.setContent(model.getContent()); + bas.setCreateUserId(model.getCreateUserId()); + bas.setDelYn(model.getDelYn()); + bas.setExpsrYn(model.getExpsrYn()); + bas.setTitle(model.getTitle()); + bas.setUpdateUserId(model.getUpdateUserId()); + bas.setViewCnt(0); + + try { + cnsFaqBasRepository.save(bas); + } catch(Exception e) { + throw new CustomException(ErrorCode.NON_VALID_PARAMETER); + } + } + + @Transactional + public void updateFaq(FaqListModel model) { + + FaqListModel prevData = query.getFaqDetail(model.getFaqSno()); + + if(prevData == null) throw new CustomException(ErrorCode.DATA_NO); + + if(model.getCategory() != null) prevData.setCategory(model.getCategory()); + if(model.getTitle() != null) prevData.setTitle(model.getTitle()); + if(model.getContent() != null) prevData.setContent(model.getContent()); + if(model.getExpsrYn() != null) prevData.setExpsrYn(model.getExpsrYn()); + if(model.getUpdateUserId() != null) prevData.setUpdateUserId(model.getUpdateUserId()); + + prevData.setUpdateDt(Instant.now()); + + try { + query.updateFaq(prevData); + } catch(Exception e) { + throw new CustomException(ErrorCode.NON_VALID_PARAMETER); + } + } + + public void deleteFaq(int sno) { + + int delCnt = cnsFaqBasRepository.deleteFaq(sno); + + if(delCnt == 0) throw new CustomException(ErrorCode.DATA_NO); + + } } \ No newline at end of file diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/repository/cns/CnsFaqBasRepository.java b/pav-server/src/main/java/com/palnet/biz/jpa/repository/cns/CnsFaqBasRepository.java index 9492c507..ecf46ff3 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/repository/cns/CnsFaqBasRepository.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/repository/cns/CnsFaqBasRepository.java @@ -17,6 +17,11 @@ public interface CnsFaqBasRepository extends JpaRepository{ @Transactional @Query("update CnsFaqBas c set c.viewCnt = c.viewCnt + 1" + "where c.faqSno = :sno") - void updateViewCnt(@Param("sno") int sno); + int updateViewCnt(@Param("sno") int sno); + @Modifying + @Transactional + @Query("update CnsFaqBas c set c.delYn = 'Y' " + + "where c.faqSno = :sno") + int deleteFaq(@Param("sno") int sno); } 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 066a9db9..e3b092f1 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 @@ -4,7 +4,7 @@ import java.util.List; import org.springframework.stereotype.Repository; -import com.palnet.biz.api.cns.faq.model.FaqListRSModel; +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; @@ -20,7 +20,7 @@ public class CnsFaqQueryRepository { private final JPAQueryFactory query; - public List getFaqList(String category, String word) { + public List getFaqList(String category, String word) { QCnsFaqBas bas = QCnsFaqBas.cnsFaqBas; @@ -36,9 +36,9 @@ public class CnsFaqQueryRepository { builder.and(bas.title.contains(word)); } - List r = query + List r = query .select(Projections.bean( - FaqListRSModel.class, + FaqListModel.class, bas.faqSno, bas.category, bas.title, @@ -59,16 +59,16 @@ public class CnsFaqQueryRepository { return r; } - public FaqListRSModel getFaqDetail(int sno) { + public FaqListModel getFaqDetail(int sno) { QCnsFaqBas bas = QCnsFaqBas.cnsFaqBas; BooleanBuilder builder = new BooleanBuilder(); builder.and(bas.faqSno.eq(sno)); - FaqListRSModel r = query + FaqListModel r = query .select(Projections.bean( - FaqListRSModel.class, + FaqListModel.class, bas.faqSno, bas.category, bas.title, @@ -89,4 +89,23 @@ public class CnsFaqQueryRepository { 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