Browse Source

Qna 상세 불러오기 추가

pull/9/head
lkd9125 11 months ago
parent
commit
227302dc70
  1. 14
      pav-server/src/main/java/com/palnet/biz/api/cns/qna/controller/CnsQnaController.java
  2. 34
      pav-server/src/main/java/com/palnet/biz/api/cns/qna/model/QnaDetailRSModel.java
  3. 2
      pav-server/src/main/java/com/palnet/biz/api/cns/qna/model/QnaInsertRQModel.java
  4. 8
      pav-server/src/main/java/com/palnet/biz/api/cns/qna/model/QnaRQModel.java
  5. 75
      pav-server/src/main/java/com/palnet/biz/api/cns/qna/service/CnsQnaService.java
  6. 5
      pav-server/src/main/java/com/palnet/biz/jpa/repository/cns/CnsQnaBasRepository.java
  7. 52
      pav-server/src/main/java/com/palnet/biz/jpa/repository/cns/CnsQnaQueryRepository.java
  8. 5
      pav-server/src/main/java/com/palnet/biz/jpa/repository/com/ComFileBasRepository.java

14
pav-server/src/main/java/com/palnet/biz/api/cns/qna/controller/CnsQnaController.java

@ -12,6 +12,7 @@ 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.QnaDetailRSModel;
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;
@ -47,7 +48,7 @@ public class CnsQnaController {
@GetMapping("/select")
@Tag(name = "QNA", description = "QNA 관련 API")
@ApiOperation(value = "QnA 리스트 조회")
public ResponseEntity<Object> selectQna(QnaSelectListRQ rq){
public ResponseEntity<List<QnaBasModel>> selectQna(QnaSelectListRQ rq){
log.warn("CnsFaqController - selectQna()");
List<QnaBasModel> result = cnsQnaService.selectQnaList(rq);
@ -55,17 +56,18 @@ public class CnsQnaController {
return ResponseEntity.ok().body(result);
}
@GetMapping("/detail/{qnaSno}")
@GetMapping("/{qnaSno}/detail")
public ResponseEntity<Object> detailQna(@PathVariable int qnaSno){
log.warn("CnsFaqController - selectQna()");
log.warn("rq -> {}", qnaSno);
List<QnaDetailRSModel> reulst = cnsQnaService.getQnaDetail(qnaSno);
return ResponseEntity.ok().body(null);
return ResponseEntity.ok().body(reulst);
}
@PostMapping("/update")
@PostMapping("/{qnaSno}/update")
public ResponseEntity<Object> updateQna(@RequestBody QnaInsertRQModel rq){
log.warn("CnsFaqController - updateQna()");
log.warn("rq -> {}", rq);
@ -74,7 +76,7 @@ public class CnsQnaController {
return ResponseEntity.ok().body(null);
}
@GetMapping("/delete")
@GetMapping("/{qnaSno}/delete")
public ResponseEntity<Object> deleteQna(@RequestBody QnaBasModel rq){
log.warn("CnsFaqController - deleteQna()");
log.warn("rq -> {}", rq);

34
pav-server/src/main/java/com/palnet/biz/api/cns/qna/model/QnaDetailRSModel.java

@ -0,0 +1,34 @@
package com.palnet.biz.api.cns.qna.model;
import java.time.Instant;
import java.util.List;
import com.palnet.biz.jpa.entity.ComFileBas;
import lombok.Data;
@Data
public class QnaDetailRSModel {
private int qnaSno;
private int targetSno;
private String category;
private String title;
private String content;
private Integer viewCnt;
private String createUserId;
private Instant createDt;
private String updateUserId;
private Instant updateDt;
private List<ComFileBas> files;
}

2
pav-server/src/main/java/com/palnet/biz/api/cns/qna/model/QnaInsertRQModel.java

@ -9,7 +9,7 @@ import lombok.Data;
@Data
public class QnaInsertRQModel {
private Integer targetSno; // 상위 파일 번호
private Integer targetSno; // 상위 Qna 번호
private String category;

8
pav-server/src/main/java/com/palnet/biz/api/cns/qna/model/QnaRQModel.java

@ -1,8 +0,0 @@
package com.palnet.biz.api.cns.qna.model;
import lombok.Data;
@Data
public class QnaRQModel {
}

75
pav-server/src/main/java/com/palnet/biz/api/cns/qna/service/CnsQnaService.java

@ -1,6 +1,7 @@
package com.palnet.biz.api.cns.qna.service;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import javax.transaction.Transactional;
@ -10,12 +11,15 @@ 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.QnaDetailRSModel;
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.entity.ComFileBas;
import com.palnet.biz.jpa.repository.cns.CnsQnaBasRepository;
import com.palnet.biz.jpa.repository.cns.CnsQnaQueryRepository;
import com.palnet.biz.jpa.repository.com.ComFileBasRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -25,25 +29,80 @@ import lombok.extern.slf4j.Slf4j;
@RequiredArgsConstructor
public class CnsQnaService {
private final ComnFileService comnFileService;
private final CnsQnaBasRepository cnsQnaBasRepository;
private final CnsQnaQueryRepository cnsQnaQueryRepository;
private final ComFileBasRepository comFileBasRepository;
private final JwtTokenUtil jwtTokenUtil;
public List<QnaBasModel> selectQnaList(QnaSelectListRQ rq){
log.warn("CnsQnaService - selectQnaList()");
log.warn("rq -> {}", rq);
List<QnaBasModel> result = cnsQnaQueryRepository.getQnaList(rq.getCategory(), rq.getCategory());
/**
* Qna 상세불러오기
* @param qnaSno
* @return
*/
public List<QnaDetailRSModel> getQnaDetail(int qnaSno){
QnaBasModel qnaBasModel = cnsQnaQueryRepository.getQnaDetail(qnaSno).get(0);
List<ComFileBas> files = null;
if(qnaBasModel.getFileGroupNo() != 0) files = comFileBasRepository.findByFileGroupNo(qnaBasModel.getFileGroupNo());
QnaDetailRSModel node = new QnaDetailRSModel();
node.setQnaSno(qnaSno);
node.setTargetSno(qnaBasModel.getTargetSno());
node.setCategory(qnaBasModel.getCategory());
node.setTitle(qnaBasModel.getTitle());
node.setContent(qnaBasModel.getContent());
node.setViewCnt(qnaBasModel.getViewCnt());
node.setCreateUserId(qnaBasModel.getCreateUserId());
node.setCreateDt(qnaBasModel.getCreateDt());
node.setUpdateUserId(qnaBasModel.getUpdateUserId());
node.setUpdateDt(qnaBasModel.getUpdateDt());
node.setFiles(files);
int targetSno = qnaSno;
List<QnaDetailRSModel> result = new ArrayList<>();
result.add(node);
// 대댓글 불러오기
while(true){
CnsQnaBas cnsQnaBas = cnsQnaBasRepository.findFirstByTargetSno(targetSno);
if(cnsQnaBas == null) break;
QnaDetailRSModel detailNode = new QnaDetailRSModel();
detailNode.setQnaSno(cnsQnaBas.getQnaSno());
detailNode.setTargetSno(cnsQnaBas.getTargetSno());
detailNode.setCategory(cnsQnaBas.getCategory());
detailNode.setTitle(cnsQnaBas.getTitle());
detailNode.setContent(cnsQnaBas.getContent());
detailNode.setCreateUserId(cnsQnaBas.getCreateUserId());
detailNode.setCreateDt(cnsQnaBas.getCreateDt());
detailNode.setUpdateUserId(cnsQnaBas.getUpdateUserId());
detailNode.setUpdateDt(cnsQnaBas.getUpdateDt());
result.add(detailNode);
targetSno = cnsQnaBas.getQnaSno();
}
return result;
}
/**
* Qna리스트 조회
* @param rq
* @return
*/
public List<QnaBasModel> selectQnaList(QnaSelectListRQ rq){
return cnsQnaQueryRepository.getQnaList(rq.getCategory(), rq.getCategory());
}
/**
* QnaInsert
@ -54,7 +113,8 @@ public class CnsQnaService {
public boolean insertQna(QnaInsertRQModel rq){
List<MultipartFile> files = rq.getFiles();
int fileGroupNo = comnFileService.fileUpload(files); // File 업로드
Integer fileGroupNo = null;
if(files != null && files.size() > 0) fileGroupNo = comnFileService.fileUpload(files); // File 업로드
String userId = jwtTokenUtil.getUserIdByToken();
@ -64,12 +124,13 @@ public class CnsQnaService {
cnsQnaBas.setCategory(rq.getCategory());
cnsQnaBas.setTitle(rq.getTitle());
cnsQnaBas.setContent(rq.getContent());
cnsQnaBas.setFileGroupNo(fileGroupNo);
cnsQnaBas.setCreateDt(Instant.now());
cnsQnaBas.setCreateUserId(userId);
cnsQnaBas.setUpdateDt(Instant.now());
cnsQnaBas.setUpdateUserId(userId);
cnsQnaBas.setExpsrYn("Y");
if(fileGroupNo != null) cnsQnaBas.setFileGroupNo(fileGroupNo);
if(rq.getTargetSno() != null) cnsQnaBas.setTargetSno(rq.getTargetSno());
cnsQnaBasRepository.save(cnsQnaBas);

5
pav-server/src/main/java/com/palnet/biz/jpa/repository/cns/CnsQnaBasRepository.java

@ -1,5 +1,9 @@
package com.palnet.biz.jpa.repository.cns;
import java.util.List;
import javax.persistence.Id;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@ -8,4 +12,5 @@ import com.palnet.biz.jpa.entity.CnsQnaBas;
@Repository
public interface CnsQnaBasRepository extends JpaRepository<CnsQnaBas, Integer>{
CnsQnaBas findFirstByTargetSno(int targetSno);
}

52
pav-server/src/main/java/com/palnet/biz/jpa/repository/cns/CnsQnaQueryRepository.java

@ -8,6 +8,8 @@ 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.palnet.comn.code.ErrorCode;
import com.palnet.comn.exception.CustomException;
import com.querydsl.core.BooleanBuilder;
import com.querydsl.core.types.Projections;
import com.querydsl.jpa.impl.JPAQueryFactory;
@ -22,8 +24,13 @@ public class CnsQnaQueryRepository {
private final JPAQueryFactory query;
/**
* 카테고리와 글로 게시글 검색, 만약 조건 없으면 전체검색
* @param category
* @param word
* @return
*/
public List<QnaBasModel> getQnaList(String category, String word) {
QCnsQnaBas bas = QCnsQnaBas.cnsQnaBas;
BooleanBuilder builder = new BooleanBuilder();
@ -60,4 +67,47 @@ public class CnsQnaQueryRepository {
return r;
}
/**
* 상세보기 검색, target번호가 있으면 안됨
* @param qnaSno
* @return
*/
public List<QnaBasModel> getQnaDetail(int qnaSno){
QCnsQnaBas qCnsQnaBas = QCnsQnaBas.cnsQnaBas;
BooleanBuilder builder = new BooleanBuilder();
builder.and(qCnsQnaBas.qnaSno.eq(qnaSno));
builder.and(qCnsQnaBas.targetSno.eq(0));
List<QnaBasModel> result = query.select(
Projections.bean(
QnaBasModel.class,
qCnsQnaBas.qnaSno,
qCnsQnaBas.targetSno,
qCnsQnaBas.category,
qCnsQnaBas.title,
qCnsQnaBas.content,
qCnsQnaBas.fileGroupNo,
qCnsQnaBas.viewCnt,
qCnsQnaBas.expsrYn,
qCnsQnaBas.delYn,
qCnsQnaBas.createUserId,
qCnsQnaBas.createDt,
qCnsQnaBas.updateUserId,
qCnsQnaBas.updateDt
))
.from(qCnsQnaBas)
.where(builder)
.fetch();
log.warn("result -> {}", result);
if(result == null || result.size() < 1) throw new CustomException(ErrorCode.NON_VALID_PARAMETER);
return result;
}
}

5
pav-server/src/main/java/com/palnet/biz/jpa/repository/com/ComFileBasRepository.java

@ -1,5 +1,7 @@
package com.palnet.biz.jpa.repository.com;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@ -11,4 +13,7 @@ public interface ComFileBasRepository extends JpaRepository<ComFileBas, Integer>
ComFileBas findFirstByOrderByFileSnoDesc();
ComFileBas findFirstByOrderByFileGroupNoDesc();
List<ComFileBas> findByFileGroupNo(int fileGroupNo);
}

Loading…
Cancel
Save