Browse Source

faq 수정

pull/12/head
지대한 11 months ago
parent
commit
694be4caf1
  1. 138
      pav-server/src/main/java/com/palnet/biz/api/cns/faq/controller/CnsFaqController.java
  2. 2
      pav-server/src/main/java/com/palnet/biz/api/cns/faq/model/FaqListModel.java
  3. 31
      pav-server/src/main/java/com/palnet/biz/api/cns/faq/service/CnsFaqMapper.java
  4. 82
      pav-server/src/main/java/com/palnet/biz/api/cns/faq/service/CnsFaqService.java
  5. 8
      pav-server/src/main/java/com/palnet/biz/jpa/entity/CnsFaqBas.java

138
pav-server/src/main/java/com/palnet/biz/api/cns/faq/controller/CnsFaqController.java

@ -1,13 +1,17 @@
package com.palnet.biz.api.cns.faq.controller; package com.palnet.biz.api.cns.faq.controller;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import com.palnet.biz.api.bas.laanc.model.BasLaancAprvRs;
import com.palnet.biz.api.comn.response.ErrorResponse;
import com.palnet.comn.exception.CustomException;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.data.domain.Page;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.*;
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.FaqListRQModel;
import com.palnet.biz.api.cns.faq.model.FaqListModel; import com.palnet.biz.api.cns.faq.model.FaqListModel;
@ -20,6 +24,7 @@ import lombok.extern.slf4j.Slf4j;
@RestController @RestController
@Slf4j @Slf4j
@Tag(name = "FAQ API", description = "FAQ 관련 API")
@RequiredArgsConstructor @RequiredArgsConstructor
@RequestMapping(value = "/api/bas/cns/faq") @RequestMapping(value = "/api/bas/cns/faq")
public class CnsFaqController { public class CnsFaqController {
@ -27,48 +32,121 @@ public class CnsFaqController {
private final CnsFaqService service; private final CnsFaqService service;
/*FAQ 목록 조회*/ /*FAQ 목록 조회*/
@PostMapping("/list") @Tag(name = "FAQ API", description = "FAQ 관련 API")
public ResponseEntity<? extends BasicResponse> getFaqList(@RequestBody FaqListRQModel model) { @GetMapping
public ResponseEntity<? extends BasicResponse> getFaqList(FaqListRQModel model) {
List<FaqListModel> result = null; List<FaqListModel> result = null;
try {
result = service.getFaqList(model); result = service.getFaqList(model);
} 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(new SuccessResponse<>(result));
} }
/*FAQ 상세 조회*/ /*FAQ 상세 조회*/
@GetMapping("/detail") @Tag(name = "FAQ API", description = "FAQ 관련 API")
public ResponseEntity<FaqListModel> getFaqDetail(int sno) { @GetMapping("/{sno}")
public ResponseEntity<? extends BasicResponse> getFaqDetail(@PathVariable("sno") int sno) {
FaqListModel result = null; FaqListModel result = null;
try {
result = service.getFaqDetail(sno); result = service.getFaqDetail(sno);
} catch (CustomException e) {
return ResponseEntity.ok().body(result); 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));
} }
/*FAQ 작성*/ /*FAQ 작성*/
@PostMapping("/insert") @Tag(name = "FAQ API", description = "FAQ 관련 API")
public void insertFaq(@RequestBody FaqListModel model) { @PostMapping
public ResponseEntity<? extends BasicResponse> insertFaq(@RequestBody FaqListModel model) {
service.insertFaq(model); boolean result = false;
try {
result = service.insertFaq(model);
} 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));
} }
/*FAQ 업데이트*/ /*FAQ 업데이트*/
@PostMapping("/update") @Tag(name = "FAQ API", description = "FAQ 관련 API")
public void updateFaq(@RequestBody FaqListModel model) { @PutMapping
public ResponseEntity<? extends BasicResponse> updateFaq(@RequestBody FaqListModel model) {
service.updateFaq(model); boolean result = false;
try {
result = service.updateFaq(model);
} 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));
} }
/*FAQ 논리 삭제*/ /*FAQ 논리 삭제*/
@PostMapping("/delete") @Tag(name = "FAQ API", description = "FAQ 관련 API")
public void deleteFaq(int sno) { @DeleteMapping("/{sno}")
public ResponseEntity<? extends BasicResponse> deleteFaq(@PathVariable("sno") int sno) {
service.deleteFaq(sno); // TODO 성공/실패 상태값 전송
try {
service.deleteFaq(sno);
} 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().build();
} }
} }

2
pav-server/src/main/java/com/palnet/biz/api/cns/faq/model/FaqListModel.java

@ -19,7 +19,7 @@ public class FaqListModel {
private String expsrYn; private String expsrYn;
private String delYn; // private String delYn;
private String createUserId; private String createUserId;

31
pav-server/src/main/java/com/palnet/biz/api/cns/faq/service/CnsFaqMapper.java

@ -0,0 +1,31 @@
package com.palnet.biz.api.cns.faq.service;
import com.palnet.biz.api.cns.faq.model.FaqListModel;
import com.palnet.biz.jpa.entity.CnsFaqBas;
import org.mapstruct.Mapper;
import org.mapstruct.MappingTarget;
import org.mapstruct.NullValuePropertyMappingStrategy;
import org.mapstruct.ReportingPolicy;
import org.mapstruct.factory.Mappers;
/**
* packageName : com.palnet.biz.api.cns.faq.service
* fileName : CnsFaqMapper
* author : dhji
* date : 2023-10-17(017)
* description :
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2023-10-17(017) dhji 최초 생성
*/
@Mapper(unmappedSourcePolicy = ReportingPolicy.IGNORE, unmappedTargetPolicy = ReportingPolicy.IGNORE, nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
public interface CnsFaqMapper {
CnsFaqMapper MAPPER = Mappers.getMapper(CnsFaqMapper.class);
FaqListModel toModel(CnsFaqBas updateEntity);
CnsFaqBas toEntity(FaqListModel model);
void mergeEntity(@MappingTarget CnsFaqBas prevData, FaqListModel model);
}

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

@ -1,12 +1,6 @@
package com.palnet.biz.api.cns.faq.service; package com.palnet.biz.api.cns.faq.service;
import java.time.Instant; import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil;
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.FaqListModel;
import com.palnet.biz.api.cns.faq.model.FaqListRQModel; import com.palnet.biz.api.cns.faq.model.FaqListRQModel;
import com.palnet.biz.jpa.entity.CnsFaqBas; import com.palnet.biz.jpa.entity.CnsFaqBas;
@ -14,9 +8,13 @@ import com.palnet.biz.jpa.repository.cns.CnsFaqBasRepository;
import com.palnet.biz.jpa.repository.cns.CnsFaqQueryRepository; import com.palnet.biz.jpa.repository.cns.CnsFaqQueryRepository;
import com.palnet.comn.code.ErrorCode; import com.palnet.comn.code.ErrorCode;
import com.palnet.comn.exception.CustomException; import com.palnet.comn.exception.CustomException;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.util.ArrayList;
import java.util.List;
@Slf4j @Slf4j
@Service @Service
@ -24,79 +22,81 @@ import lombok.extern.slf4j.Slf4j;
public class CnsFaqService { public class CnsFaqService {
private final CnsFaqQueryRepository query; private final CnsFaqQueryRepository query;
private final CnsFaqBasRepository cnsFaqBasRepository; private final CnsFaqBasRepository cnsFaqBasRepository;
private final JwtTokenUtil jwtTokenUtil;
public List<FaqListModel> getFaqList(FaqListRQModel model){ public List<FaqListModel> getFaqList(FaqListRQModel model){
List<FaqListModel> result = query.getFaqList(model.getCategory(), model.getWord()); List<FaqListModel> result = query.getFaqList(model.getCategory(), model.getWord());
if(result == null || result.size() < 1) throw new CustomException(ErrorCode.DATA_NO); if(result == null) result = new ArrayList<>();
return result; return result;
} }
public FaqListModel getFaqDetail(int sno){ public FaqListModel getFaqDetail(int sno){
cnsFaqBasRepository.updateViewCnt(sno); CnsFaqBas findEntity = cnsFaqBasRepository.findById(sno).orElseThrow(() -> new CustomException(ErrorCode.DATA_NO));
findEntity.setViewCnt(findEntity.getViewCnt() + 1);
FaqListModel result = query.getFaqDetail(sno); CnsFaqBas updateEntity = cnsFaqBasRepository.save(findEntity);
return CnsFaqMapper.MAPPER.toModel(updateEntity);
if(result == null) throw new CustomException(ErrorCode.DATA_NO);
return result;
} }
@Transactional @Transactional
public void insertFaq(FaqListModel model){ public boolean insertFaq(FaqListModel model){
String userId = jwtTokenUtil.getUserIdByToken();
CnsFaqBas bas = new CnsFaqBas(); CnsFaqBas bas = new CnsFaqBas();
bas.setCreateDt(Instant.now()); bas.setCreateUserId(userId);
bas.setUpdateDt(Instant.now()); bas.setUpdateUserId(userId);
bas.setCategory(model.getCategory()); bas.setCategory(model.getCategory());
bas.setContent(model.getContent()); bas.setContent(model.getContent());
bas.setCreateUserId(model.getCreateUserId());
bas.setDelYn(model.getDelYn());
bas.setExpsrYn(model.getExpsrYn()); bas.setExpsrYn(model.getExpsrYn());
bas.setTitle(model.getTitle()); bas.setTitle(model.getTitle());
bas.setUpdateUserId(model.getUpdateUserId());
bas.setDelYn("N");
bas.setViewCnt(0); bas.setViewCnt(0);
try { try {
cnsFaqBasRepository.save(bas); CnsFaqBas saveEntity = cnsFaqBasRepository.save(bas);
if(saveEntity != null) return true;
else return false;
} catch(Exception e) { } catch(Exception e) {
// TODO parameter validate...??
throw new CustomException(ErrorCode.NON_VALID_PARAMETER); throw new CustomException(ErrorCode.NON_VALID_PARAMETER);
} }
} }
@Transactional @Transactional
public void updateFaq(FaqListModel model) { public boolean updateFaq(FaqListModel model) {
String userId = jwtTokenUtil.getUserIdByToken();
FaqListModel prevData = query.getFaqDetail(model.getFaqSno());
CnsFaqBas prevData = cnsFaqBasRepository.findById(model.getFaqSno()).orElseThrow(() -> new CustomException(ErrorCode.DATA_NO));
if(prevData == null) throw new CustomException(ErrorCode.DATA_NO);
if(model.getCategory() != null) prevData.setCategory(model.getCategory()); if(model.getCategory() != null) prevData.setCategory(model.getCategory());
if(model.getTitle() != null) prevData.setTitle(model.getTitle()); if(model.getTitle() != null) prevData.setTitle(model.getTitle());
if(model.getContent() != null) prevData.setContent(model.getContent()); if(model.getContent() != null) prevData.setContent(model.getContent());
if(model.getExpsrYn() != null) prevData.setExpsrYn(model.getExpsrYn()); if(model.getExpsrYn() != null) prevData.setExpsrYn(model.getExpsrYn());
if(model.getUpdateUserId() != null) prevData.setUpdateUserId(model.getUpdateUserId()); prevData.setUpdateUserId(userId);
prevData.setUpdateDt(Instant.now());
try { try {
query.updateFaq(prevData); CnsFaqBas saveEntity = cnsFaqBasRepository.save(prevData);
if(saveEntity != null) return true;
else return false;
} catch(Exception e) { } catch(Exception e) {
// TODO parameter validate...??
throw new CustomException(ErrorCode.NON_VALID_PARAMETER); throw new CustomException(ErrorCode.NON_VALID_PARAMETER);
} }
} }
public void deleteFaq(int sno) { public void deleteFaq(int sno) {
// TODO 반환값이 실행한 갯수인지 확인 필요
int delCnt = cnsFaqBasRepository.deleteFaq(sno); int delCnt = cnsFaqBasRepository.deleteFaq(sno);
if(delCnt == 0) throw new CustomException(ErrorCode.DATA_NO); if(delCnt == 0) throw new CustomException(ErrorCode.DATA_NO);

8
pav-server/src/main/java/com/palnet/biz/jpa/entity/CnsFaqBas.java

@ -6,6 +6,8 @@ import java.time.Instant;
import javax.persistence.*; import javax.persistence.*;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
@Entity @Entity
@Data @Data
@ -41,13 +43,15 @@ public class CnsFaqBas 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;
} }

Loading…
Cancel
Save