From 5c282da7d86e6fd855305e5c445b93ed1ae31242 Mon Sep 17 00:00:00 2001 From: lkd9125 Date: Fri, 13 Oct 2023 11:27:07 +0900 Subject: [PATCH] =?UTF-8?q?QnaList=20=EC=A1=B0=ED=9A=8C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cns/qna/controller/CnsQnaController.java | 34 ++++++++--- .../biz/api/cns/qna/model/QnaRSModel.java | 27 ++++++++- .../api/cns/qna/model/QnaSelectListRQ.java | 11 ++++ .../api/cns/qna/service/CnsQnaService.java | 31 +++++++++- .../repository/cns/CnsQnaQueryRepository.java | 58 +++++++++++++++++++ 5 files changed, 149 insertions(+), 12 deletions(-) create mode 100644 pav-server/src/main/java/com/palnet/biz/api/cns/qna/model/QnaSelectListRQ.java 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 0782b19..ffc869e 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 @@ -1,16 +1,20 @@ package com.palnet.biz.api.cns.qna.controller; -import org.springframework.http.MediaType; +import java.util.List; + import org.springframework.http.ResponseEntity; -import org.springframework.util.MimeType; 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.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.palnet.biz.api.cns.qna.model.QnaBasModel; import com.palnet.biz.api.cns.qna.model.QnaInsertRQModel; +import com.palnet.biz.api.cns.qna.model.QnaRSModel; +import com.palnet.biz.api.cns.qna.model.QnaSelectListRQ; import com.palnet.biz.api.cns.qna.service.CnsQnaService; import io.swagger.annotations.ApiOperation; @@ -30,25 +34,39 @@ public class CnsQnaController { @PostMapping(value = "/insert", consumes = "multipart/form-data") @Tag(name = "QNA", description = "QNA 관련 API") @ApiOperation(value = "QnA 등록[답변추가]") - public ResponseEntity insertQna(QnaInsertRQModel rq){ + public ResponseEntity insertQna(QnaInsertRQModel rq){ log.warn("CnsFaqController - insertQna()"); - boolean success = cnsQnaService.insertQna(rq); + boolean success = cnsQnaService.insertQna(rq); + + QnaRSModel rs = new QnaRSModel(success); - return ResponseEntity.ok().body(success); + return ResponseEntity.ok().body(rs); } @GetMapping("/select") - public ResponseEntity selectQna(@RequestBody QnaBasModel rq){ + @Tag(name = "QNA", description = "QNA 관련 API") + @ApiOperation(value = "QnA 리스트 조회") + public ResponseEntity selectQna(QnaSelectListRQ rq){ + log.warn("CnsFaqController - selectQna()"); + + List result = cnsQnaService.selectQnaList(rq); + + return ResponseEntity.ok().body(result); + } + + @GetMapping("/detail/{qnaSno}") + public ResponseEntity detailQna(@PathVariable int qnaSno){ log.warn("CnsFaqController - selectQna()"); - log.warn("rq -> {}", rq); + log.warn("rq -> {}", qnaSno); + return ResponseEntity.ok().body(null); } @PostMapping("/update") - public ResponseEntity updateQna(@RequestBody QnaBasModel rq){ + public ResponseEntity updateQna(@RequestBody QnaInsertRQModel rq){ log.warn("CnsFaqController - updateQna()"); log.warn("rq -> {}", rq); diff --git a/pav-server/src/main/java/com/palnet/biz/api/cns/qna/model/QnaRSModel.java b/pav-server/src/main/java/com/palnet/biz/api/cns/qna/model/QnaRSModel.java index 0d17caa..9295a36 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/cns/qna/model/QnaRSModel.java +++ b/pav-server/src/main/java/com/palnet/biz/api/cns/qna/model/QnaRSModel.java @@ -3,6 +3,31 @@ package com.palnet.biz.api.cns.qna.model; import lombok.Data; @Data -public class QnaRSModel { +public class QnaRSModel{ + + private int code; + + private String desc; + + private Object body; + + public QnaRSModel() { + this.code = 200; + } + + public QnaRSModel(Object body){ + this.code = 200; + this.body = body; + } + public QnaRSModel(int code, Object body){ + this.code = code; + this.body = body; + } + + public QnaRSModel(int code, String desc, Object body){ + this.code = code; + this.desc = desc; + this.body = body; + } } diff --git a/pav-server/src/main/java/com/palnet/biz/api/cns/qna/model/QnaSelectListRQ.java b/pav-server/src/main/java/com/palnet/biz/api/cns/qna/model/QnaSelectListRQ.java new file mode 100644 index 0000000..ccd1b76 --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/api/cns/qna/model/QnaSelectListRQ.java @@ -0,0 +1,11 @@ +package com.palnet.biz.api.cns.qna.model; + +import lombok.Data; + +@Data +public class QnaSelectListRQ { + + private String word; + + private String category; +} 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 7c874dc..e7f8145 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 @@ -3,14 +3,19 @@ package com.palnet.biz.api.cns.qna.service; import java.time.Instant; import java.util.List; +import javax.transaction.Transactional; + import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; +import com.palnet.biz.api.cns.qna.model.QnaBasModel; import com.palnet.biz.api.cns.qna.model.QnaInsertRQModel; +import com.palnet.biz.api.cns.qna.model.QnaSelectListRQ; import com.palnet.biz.api.comn.file.service.ComnFileService; import com.palnet.biz.jpa.entity.CnsQnaBas; import com.palnet.biz.jpa.repository.cns.CnsQnaBasRepository; +import com.palnet.biz.jpa.repository.cns.CnsQnaQueryRepository; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -25,16 +30,34 @@ public class CnsQnaService { private final CnsQnaBasRepository cnsQnaBasRepository; + private final CnsQnaQueryRepository cnsQnaQueryRepository; + private final JwtTokenUtil jwtTokenUtil; + public List selectQnaList(QnaSelectListRQ rq){ + log.warn("CnsQnaService - selectQnaList()"); + log.warn("rq -> {}", rq); + + List result = cnsQnaQueryRepository.getQnaList(rq.getCategory(), rq.getCategory()); + + return result; + } + + + /** + * QnaInsert + * @param rq + * @return + */ + @Transactional public boolean insertQna(QnaInsertRQModel rq){ - log.warn("CnsQnaService - insertQna()"); List files = rq.getFiles(); - int fileGroupNo = comnFileService.fileUpload(files); - String userId = jwtTokenUtil.getUserIdByToken(); + int fileGroupNo = comnFileService.fileUpload(files); // File 업로드 + String userId = jwtTokenUtil.getUserIdByToken(); + if (userId == null) userId = "NONE"; CnsQnaBas cnsQnaBas = new CnsQnaBas(); @@ -53,4 +76,6 @@ public class CnsQnaService { return true; } + + } 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 545f3bd..637a6a7 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 @@ -1,5 +1,63 @@ package com.palnet.biz.jpa.repository.cns; +import java.util.List; + +import org.springframework.stereotype.Repository; + +import com.palnet.biz.api.cns.faq.model.FaqListRSModel; +import com.palnet.biz.api.cns.qna.model.QnaBasModel; +import com.palnet.biz.jpa.entity.QCnsFaqBas; +import com.palnet.biz.jpa.entity.QCnsQnaBas; +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; + +@Slf4j +@Repository +@RequiredArgsConstructor public class CnsQnaQueryRepository { + private final JPAQueryFactory query; + + public List getQnaList(String category, String word) { + + QCnsQnaBas bas = QCnsQnaBas.cnsQnaBas; + + 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( + 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) + .fetch(); + + return r; + } }