Browse Source

qna url 수정

pull/12/head
지대한 11 months ago
parent
commit
49c2798356
  1. 10
      pav-server/src/main/java/com/palnet/biz/api/cns/faq/service/CnsFaqService.java
  2. 167
      pav-server/src/main/java/com/palnet/biz/api/cns/qna/controller/CnsQnaController.java
  3. 5
      pav-server/src/main/java/com/palnet/biz/api/cns/qna/service/CnsQnaService.java
  4. 16
      pav-server/src/main/java/com/palnet/biz/jpa/entity/CnsQnaBas.java
  5. 4
      pav-server/src/main/java/com/palnet/biz/jpa/repository/cns/CnsFaqQueryRepository.java

10
pav-server/src/main/java/com/palnet/biz/api/cns/faq/service/CnsFaqService.java

@ -36,12 +36,10 @@ public class CnsFaqService {
} }
public FaqListModel getFaqDetail(int sno){ public FaqListModel getFaqDetail(int sno){
cnsFaqBasRepository.updateViewCnt(sno);
CnsFaqBas findEntity = cnsFaqBasRepository.findById(sno).orElseThrow(() -> new CustomException(ErrorCode.DATA_NO)); FaqListModel result = query.getFaqDetail(sno);
findEntity.setViewCnt(findEntity.getViewCnt() + 1); if(result == null) throw new CustomException(ErrorCode.DATA_NO);
CnsFaqBas updateEntity = cnsFaqBasRepository.save(findEntity); return result;
return CnsFaqMapper.MAPPER.toModel(updateEntity);
} }
@Transactional @Transactional

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

@ -1,30 +1,30 @@
package com.palnet.biz.api.cns.qna.controller; package com.palnet.biz.api.cns.qna.controller;
import java.util.List;
import org.springframework.http.ResponseEntity;
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.QnaBasModel;
import com.palnet.biz.api.cns.qna.model.QnaDetailRSModel; 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.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.model.QnaSelectListRQ;
import com.palnet.biz.api.cns.qna.service.CnsQnaService; import com.palnet.biz.api.cns.qna.service.CnsQnaService;
import com.palnet.biz.api.comn.response.BasicResponse;
import com.palnet.biz.api.comn.response.ErrorResponse;
import com.palnet.biz.api.comn.response.SuccessResponse;
import com.palnet.comn.exception.CustomException;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController @RestController
@Slf4j @Slf4j
@Tag(name = "QNA", description = "QNA 관련 API")
@RequiredArgsConstructor @RequiredArgsConstructor
@RequestMapping("/api/cns/qna") @RequestMapping("/api/cns/qna")
public class CnsQnaController { public class CnsQnaController {
@ -32,55 +32,123 @@ public class CnsQnaController {
private final CnsQnaService cnsQnaService; private final CnsQnaService cnsQnaService;
@PostMapping(value = "/insert", consumes = "multipart/form-data") // TODO json 가능 여부
@PostMapping(consumes = "multipart/form-data")
@Tag(name = "QNA", description = "QNA 관련 API") @Tag(name = "QNA", description = "QNA 관련 API")
@ApiOperation(value = "QnA 등록[답변추가]") @ApiOperation(value = "QnA 등록[답변추가]")
public ResponseEntity<Boolean> insertQna(QnaInsertRQModel rq){ public ResponseEntity<? extends BasicResponse> insertQna(QnaInsertRQModel rq){
boolean result = false;
try {
result = cnsQnaService.insertQna(rq);
} catch (CustomException e) {
Map<String, Object> 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"));
boolean result = cnsQnaService.insertQna(rq); }
return ResponseEntity.ok().body(new SuccessResponse<>(result));
return ResponseEntity.ok().body(result);
} }
@GetMapping("/select") @GetMapping
@Tag(name = "QNA", description = "QNA 관련 API") @Tag(name = "QNA", description = "QNA 관련 API")
@ApiOperation(value = "QnA 리스트 조회") @ApiOperation(value = "QnA 리스트 조회")
public ResponseEntity<List<QnaBasModel>> selectQna(QnaSelectListRQ rq){ public ResponseEntity<? extends BasicResponse> selectQna(QnaSelectListRQ rq){
List<QnaBasModel> result = new ArrayList<>();
try {
result = cnsQnaService.selectQnaList(rq);
} catch (CustomException e) {
Map<String, Object> 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"));
List<QnaBasModel> result = cnsQnaService.selectQnaList(rq); }
return ResponseEntity.ok().body(new SuccessResponse<>(result));
return ResponseEntity.ok().body(result);
} }
@GetMapping("/{qnaSno}/detail") @GetMapping("/{qnaSno}")
@Tag(name = "QNA", description = "QNA 관련 API") @Tag(name = "QNA", description = "QNA 관련 API")
@ApiOperation(value = "QnA 상세보기") @ApiOperation(value = "QnA 상세보기")
public ResponseEntity<List<QnaDetailRSModel>> detailQna(@PathVariable int qnaSno){ public ResponseEntity<? extends BasicResponse> detailQna(@PathVariable int qnaSno){
List<QnaDetailRSModel> result = null;
List<QnaDetailRSModel> reulst = cnsQnaService.getQnaDetail(qnaSno); try {
result = cnsQnaService.getQnaDetail(qnaSno);
} catch (CustomException e) {
Map<String, Object> 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(reulst); }
return ResponseEntity.ok().body(new SuccessResponse<>(result));
} }
@PostMapping("/{qnaSno}/update") @PutMapping
@Tag(name = "QNA", description = "QNA 관련 API") @Tag(name = "QNA", description = "QNA 관련 API")
@ApiOperation(value = "QnA 업데이트") @ApiOperation(value = "QnA 업데이트")
public ResponseEntity<Boolean> updateQna(@PathVariable int qnaSno, QnaInsertRQModel rq){ public ResponseEntity<? extends BasicResponse> updateQna(QnaInsertRQModel rq){
boolean result = false;
boolean result = cnsQnaService.updateQna(qnaSno, rq); try {
result = cnsQnaService.updateQna(rq);
} catch (CustomException e) {
Map<String, Object> 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(result); }
return ResponseEntity.ok().body(new SuccessResponse<>(result));
} }
@GetMapping("/{qnaSno}/delete") @DeleteMapping("/{qnaSno}")
@Tag(name = "QNA", description = "QNA 관련 API") @Tag(name = "QNA", description = "QNA 관련 API")
@ApiOperation(value = "QnA 삭제하기") @ApiOperation(value = "QnA 삭제하기")
public ResponseEntity<Boolean> deleteQna(@PathVariable int qnaSno){ public ResponseEntity<? extends BasicResponse> deleteQna(@PathVariable int qnaSno){
boolean result = cnsQnaService.deleteQna(qnaSno); boolean result = false;
try {
result = cnsQnaService.deleteQna(qnaSno);
} catch (CustomException e) {
Map<String, Object> 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(result); }
return ResponseEntity.ok().body(new SuccessResponse<>(result));
} }
/** /**
@ -89,14 +157,29 @@ public class CnsQnaController {
* @param fileSno * @param fileSno
* @return * @return
*/ */
@GetMapping("/{qnaSno}/{fileSno}/delete") @DeleteMapping("/file/{qnaSno}/{fileSno}")
@Tag(name = "QNA", description = "QNA 관련 API") @Tag(name = "QNA", description = "QNA 관련 API")
@ApiOperation(value = "QnA 파일 개별삭제") @ApiOperation(value = "QnA 파일 개별삭제")
public ResponseEntity<Boolean> deleteQnaFile(@PathVariable int qnaSno, @PathVariable int fileSno){ public ResponseEntity<? extends BasicResponse> deleteQnaFile(@PathVariable int qnaSno, @PathVariable int fileSno){
log.warn("CnsQnaController - deleteQnaFile()"); log.warn("CnsQnaController - deleteQnaFile()");
boolean result = cnsQnaService.deleteQnaFile(fileSno); boolean result = false;
try {
result = cnsQnaService.deleteQnaFile(fileSno);
} catch (CustomException e) {
Map<String, Object> 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));
return ResponseEntity.ok().body(result);
} }
} }

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

@ -89,14 +89,13 @@ public class CnsQnaService {
/** /**
* Qna 업데이트하기 TODO :: File 업데이트 기능 아직 구현안함 * Qna 업데이트하기 TODO :: File 업데이트 기능 아직 구현안함
* @param qnaSno
* @param rq * @param rq
* @return * @return
*/ */
@Transactional @Transactional
public boolean updateQna(int qnaSno, QnaInsertRQModel rq){ public boolean updateQna(QnaInsertRQModel rq){
CnsQnaBas entity = cnsQnaBasRepository.findFirstByQnaSnoAndTargetSnoAndDelYnAndExpsrYn(qnaSno, 0, "N", "Y"); CnsQnaBas entity = cnsQnaBasRepository.findFirstByQnaSnoAndTargetSnoAndDelYnAndExpsrYn(rq.getQnaSno(), 0, "N", "Y");
if(entity == null) throw new CustomException(ErrorCode.DATA_NOTFIND); if(entity == null) throw new CustomException(ErrorCode.DATA_NOTFIND);
List<MultipartFile> files = rq.getFiles(); List<MultipartFile> files = rq.getFiles();

16
pav-server/src/main/java/com/palnet/biz/jpa/entity/CnsQnaBas.java

@ -1,12 +1,12 @@
package com.palnet.biz.jpa.entity; package com.palnet.biz.jpa.entity;
import java.io.Serializable; import lombok.Data;
import java.time.Instant; import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import javax.persistence.*; import javax.persistence.*;
import java.io.Serializable;
import lombok.Builder; import java.time.Instant;
import lombok.Data;
@Entity @Entity
@Data @Data
@ -48,13 +48,15 @@ public class CnsQnaBas implements Serializable {
@Column(name="CREATE_USER_ID") @Column(name="CREATE_USER_ID")
private String createUserId; private String createUserId;
@Column(name="CREATE_DT") @CreationTimestamp
@Column(name="CREATE_DT", columnDefinition = "TIMESTAMP", updatable = false)
private Instant createDt; private Instant createDt;
@Column(name="UPDATE_USER_ID") @Column(name="UPDATE_USER_ID")
private String updateUserId; private String updateUserId;
@Column(name="UPDATE_DT") @UpdateTimestamp
@Column(name="UPDATE_DT", columnDefinition = "TIMESTAMP")
private Instant updateDt; private Instant updateDt;
} }

4
pav-server/src/main/java/com/palnet/biz/jpa/repository/cns/CnsFaqQueryRepository.java

@ -45,7 +45,6 @@ public class CnsFaqQueryRepository {
bas.content, bas.content,
bas.viewCnt, bas.viewCnt,
bas.expsrYn, bas.expsrYn,
bas.delYn,
bas.createUserId, bas.createUserId,
bas.createDt, bas.createDt,
bas.updateUserId, bas.updateUserId,
@ -65,6 +64,8 @@ public class CnsFaqQueryRepository {
BooleanBuilder builder = new BooleanBuilder(); BooleanBuilder builder = new BooleanBuilder();
builder.and(bas.faqSno.eq(sno)); builder.and(bas.faqSno.eq(sno));
builder.and(bas.expsrYn.eq("Y"));
builder.and(bas.delYn.eq("N"));
FaqListModel r = query FaqListModel r = query
.select(Projections.bean( .select(Projections.bean(
@ -75,7 +76,6 @@ public class CnsFaqQueryRepository {
bas.content, bas.content,
bas.viewCnt, bas.viewCnt,
bas.expsrYn, bas.expsrYn,
bas.delYn,
bas.createUserId, bas.createUserId,
bas.createDt, bas.createDt,
bas.updateUserId, bas.updateUserId,

Loading…
Cancel
Save