Browse Source

feat : content(faq, qna) 작업중

feature/renewal/contents
qkr7828 7 months ago
parent
commit
2712ce1700
  1. 6
      app/kac-app/src/main/java/kr/co/palnet/kac/app/core/security/AppSecurityConfig.java
  2. 60
      common/core/src/main/java/kr/co/palnet/kac/core/response/SuccessResponse.java
  3. 6
      data/cns/src/main/java/kr/co/palnet/kac/data/cns/model/CnsFaqBas.java
  4. 19
      data/cns/src/main/java/kr/co/palnet/kac/data/cns/repository/CnsFaqBasRepository.java
  5. 15
      data/cns/src/main/java/kr/co/palnet/kac/data/cns/repository/CnsQnaBasRepository.java
  6. 7
      web/api-cns/build.gradle
  7. 543
      web/api-cns/src/main/java/kr/co/palnet/kac/api/v1/cns/faq/controller/CnsFaqController.java
  8. 14
      web/api-cns/src/main/java/kr/co/palnet/kac/api/v1/cns/faq/model/FaqListDto.java
  9. 4
      web/api-cns/src/main/java/kr/co/palnet/kac/api/v1/cns/faq/model/FaqListRq.java
  10. 26
      web/api-cns/src/main/java/kr/co/palnet/kac/api/v1/cns/faq/model/FaqListRs.java
  11. 6
      web/api-cns/src/main/java/kr/co/palnet/kac/api/v1/cns/faq/model/FaqUpdateDto.java
  12. 255
      web/api-cns/src/main/java/kr/co/palnet/kac/api/v1/cns/faq/service/CnsFaqService.java

6
app/kac-app/src/main/java/kr/co/palnet/kac/app/core/security/AppSecurityConfig.java

@ -5,13 +5,9 @@ import kr.co.palnet.kac.config.security.exception.BaseAccessDeniedHandler;
import kr.co.palnet.kac.config.security.exception.BaseAuthenticationEntryPoint; import kr.co.palnet.kac.config.security.exception.BaseAuthenticationEntryPoint;
import kr.co.palnet.kac.config.security.service.BaseUserDetailsService; import kr.co.palnet.kac.config.security.service.BaseUserDetailsService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import org.springframework.core.annotation.Order;
import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer;
import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.SecurityFilterChain;
import java.util.ArrayList; import java.util.ArrayList;
@ -26,7 +22,7 @@ public class AppSecurityConfig extends SecurityConfig {
// 시큐리티 적용 안하는 URL 목록 // 시큐리티 적용 안하는 URL 목록
private final String[] IGNORE_URL = { private final String[] IGNORE_URL = {
"/v1/com/code/**", "/v1/**",
"/v1/user/account/register", "/v1/user/account/register",
}; };

60
common/core/src/main/java/kr/co/palnet/kac/core/response/SuccessResponse.java

@ -1,30 +1,30 @@
//package kr.co.palnet.kac.core.response; package kr.co.palnet.kac.core.response;
//
//import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
//import lombok.Data; import lombok.Data;
//import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
//
//import java.util.List; import java.util.List;
//
//
//@Data @Data
//@EqualsAndHashCode(callSuper=false) @EqualsAndHashCode(callSuper=false)
//public class SuccessResponse<T> extends BasicResponse { public class SuccessResponse<T> extends BasicResponse {
//
// @Schema(description = "응답 데이터 건수") @Schema(description = "응답 데이터 건수")
// private int count; private int count;
//
// @Schema(description = "응답 데이터") @Schema(description = "응답 데이터")
// private T data; private T data;
//
// public SuccessResponse(T data) { public SuccessResponse(T data) {
// this.data = data; this.data = data;
// if(data instanceof List) { if(data instanceof List) {
// this.count = ((List<?>)data).size(); this.count = ((List<?>)data).size();
// } else { } else {
// this.count = 1; this.count = 1;
// } }
// } }
//
//
//} }

6
data/cns/src/main/java/kr/co/palnet/kac/data/cns/model/CnsFaqBas.java

@ -9,7 +9,7 @@ import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.CreationTimestamp; import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp; import org.hibernate.annotations.UpdateTimestamp;
import java.time.Instant; import java.time.LocalDateTime;
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@ -64,7 +64,7 @@ public class CnsFaqBas {
// 등록일시 // 등록일시
@CreationTimestamp @CreationTimestamp
@Column(name = "CREATE_DT", columnDefinition = "datetime", updatable = false, nullable = false) @Column(name = "CREATE_DT", columnDefinition = "datetime", updatable = false, nullable = false)
private Instant createDt; private LocalDateTime createDt;
// 수정사용자ID // 수정사용자ID
@Column(name = "UPDATE_USER_ID", length = 30, nullable = false) @Column(name = "UPDATE_USER_ID", length = 30, nullable = false)
@ -73,6 +73,6 @@ public class CnsFaqBas {
// 수정일시 // 수정일시
@UpdateTimestamp @UpdateTimestamp
@Column(name = "UPDATE_DT", columnDefinition = "datetime", nullable = false) @Column(name = "UPDATE_DT", columnDefinition = "datetime", nullable = false)
private Instant updateDt; private LocalDateTime updateDt;
} }

19
data/cns/src/main/java/kr/co/palnet/kac/data/cns/repository/CnsFaqBasRepository.java

@ -1,9 +1,28 @@
package kr.co.palnet.kac.data.cns.repository; package kr.co.palnet.kac.data.cns.repository;
import jakarta.transaction.Transactional;
import kr.co.palnet.kac.data.cns.model.CnsFaqBas; import kr.co.palnet.kac.data.cns.model.CnsFaqBas;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
@Repository
public interface CnsFaqBasRepository extends JpaRepository<CnsFaqBas, Integer> { public interface CnsFaqBasRepository extends JpaRepository<CnsFaqBas, Integer> {
@Modifying
@Transactional
@Query("update CnsFaqBas c set c.viewCnt = c.viewCnt + 1" +
"where c.faqSno = :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);
} }

15
data/cns/src/main/java/kr/co/palnet/kac/data/cns/repository/CnsQnaBasRepository.java

@ -3,6 +3,21 @@ package kr.co.palnet.kac.data.cns.repository;
import kr.co.palnet.kac.data.cns.model.CnsQnaBas; import kr.co.palnet.kac.data.cns.model.CnsQnaBas;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
@Repository
public interface CnsQnaBasRepository extends JpaRepository<CnsQnaBas, Integer> { public interface CnsQnaBasRepository extends JpaRepository<CnsQnaBas, Integer> {
CnsQnaBas findFirstByTargetSnoAndDelYnAndExpsrYn(int targetSno, String delYn, String expsrYn);
CnsQnaBas findByQnaSnoAndDelYnAndExpsrYn(int qnaSno, String delYn, String expsrYn);
CnsQnaBas findFirstByQnaSnoAndTargetSnoAndDelYnAndExpsrYn(int qnaSno, int targetSno, String delYn, String expsrYn);
@Modifying
@Query("UPDATE CnsQnaBas q SET q.viewCnt = q.viewCnt + 1 WHERE q.qnaSno = :qnaSno")
void pulsViewCount(@Param("qnaSno")int qnaSno);
} }

7
web/api-cns/build.gradle

@ -7,6 +7,13 @@ dependencies {
compileOnly 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0' compileOnly 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0'
implementation project(":data:cns") implementation project(":data:cns")
implementation project(":data:com")
implementation project(":data:ctr")
implementation project(":data:flt")
implementation project(":data:other")
implementation project(":data:pty")
implementation project(":data:user")
implementation project(":common:core") implementation project(":common:core")
compileOnly project(":web:security") compileOnly project(":web:security")
} }

543
web/api-cns/src/main/java/kr/co/palnet/kac/api/v1/cns/faq/controller/CnsFaqController.java

@ -1,279 +1,264 @@
//package kr.co.palnet.kac.api.v1.cns.faq.controller; package kr.co.palnet.kac.api.v1.cns.faq.controller;
//
//
//import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
//import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
//import io.swagger.v3.oas.annotations.enums.ParameterIn; import io.swagger.v3.oas.annotations.enums.ParameterIn;
//import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponse;
//import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.responses.ApiResponses;
//import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
//import kr.co.palnet.kac.api.v1.cns.faq.model.FaqListDto; import kr.co.palnet.kac.api.v1.cns.faq.model.FaqListDto;
//import kr.co.palnet.kac.api.v1.cns.faq.model.FaqListRq; import kr.co.palnet.kac.api.v1.cns.faq.model.FaqListRq;
//import kr.co.palnet.kac.api.v1.cns.faq.model.FaqListRs; import kr.co.palnet.kac.api.v1.cns.faq.model.FaqListRs;
//import kr.co.palnet.kac.api.v1.cns.faq.model.FaqUpdateDto; import kr.co.palnet.kac.api.v1.cns.faq.model.FaqUpdateDto;
//import kr.co.palnet.kac.api.v1.cns.faq.service.CnsFaqService; import kr.co.palnet.kac.api.v1.cns.faq.service.CnsFaqService;
//import kr.co.palnet.kac.core.exception.BaseException; import kr.co.palnet.kac.core.exception.BaseException;
//import kr.co.palnet.kac.core.response.BasicResponse; import kr.co.palnet.kac.core.response.BasicResponse;
//import lombok.RequiredArgsConstructor; import kr.co.palnet.kac.core.response.ErrorResponse;
//import lombok.extern.slf4j.Slf4j; import kr.co.palnet.kac.core.response.SuccessResponse;
//import org.springframework.http.HttpStatus; import lombok.RequiredArgsConstructor;
//import org.springframework.http.ResponseEntity; import lombok.extern.slf4j.Slf4j;
//import org.springframework.web.ErrorResponse; import org.springframework.http.HttpStatus;
//import org.springframework.web.bind.annotation.*; import org.springframework.http.ResponseEntity;
// import org.springframework.web.bind.annotation.*;
//import java.util.HashMap;
//import java.util.List; import java.util.HashMap;
//import java.util.Map; import java.util.List;
// import java.util.Map;
//@RestController
//@Slf4j @RestController
//@RequiredArgsConstructor @Slf4j
//@RequestMapping(value = "/v1/cns/faq") @RequiredArgsConstructor
//@Tag(name = "FAQ", description = "FAQ 관련 API") @RequestMapping(value = "/v1/cns/faq")
//public class CnsFaqController { @Tag(name = "FAQ", description = "FAQ 관련 API")
// public class CnsFaqController {
// private final CnsFaqService service;
// private final CnsFaqService service;
// /**
// * FAQ 목록 조회하는 기능, /**
// * FaqListRQModel 값에 있는 조건값으로 조회함. * FAQ 목록 조회하는 기능,
// * @param model * FaqListRQModel 값에 있는 조건값으로 조회함.
// * @return * @param model
// */ * @return
// @GetMapping */
// @Operation(summary = "FAQ 조회", description = "FAQ를 조회하는 API 입니다.") @GetMapping
// public ResponseEntity<? extends BasicResponse> getFaqList(FaqListRq model) { @Operation(summary = "FAQ 조회", description = "FAQ를 조회하는 API 입니다.")
// List<FaqListRs> result = null; public ResponseEntity<? extends BasicResponse> getFaqList(FaqListRq model) {
// try { List<FaqListRs> result = null;
// result = service.getFaqList(model); // FaQ 항목들 조회하는 기능 try {
// } catch (BaseException e) { result = service.getFaqList(model); // FaQ 항목들 조회하는 기능
// /** } catch (BaseException e) {
// * try{ /**
// ... * try{
// } ...
// * try 영역 안 코드들중 문제가 생기면 오는 곳. }
// * CustomException은 개발자가 "의도적으로" 낸 예외처리, * try 영역 코드들중 문제가 생기면 오는 .
// * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 * CustomException은 개발자가 "의도적으로" 예외처리,
// */ * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
// Map<String, Object> resultMap = new HashMap<>(); */
// log.error("IGNORE : ", e); Map<String, Object> resultMap = new HashMap<>();
// resultMap.put("result", false); log.error("IGNORE : ", e);
// resultMap.put("errorCode", e.getErrorCode()); resultMap.put("result", false);
// resultMap.put("errorMessage", e.getMessage()); resultMap.put("errorCode", e.getErrorCode());
// return ResponseEntity.ok().body(new SuccessResponse<>(resultMap)); resultMap.put("errorMessage", e.getMessage());
// } catch (Exception e) { return ResponseEntity.ok().body(new SuccessResponse<>(resultMap));
// /** } catch (Exception e) {
// * try{ /**
// ... * try{
// } ...
// * try 영역 안 코드들중 문제가 생기면 오는 곳. }
// * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 * try 영역 코드들중 문제가 생기면 오는 .
// */ * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
// log.error("IGNORE : ", e); */
// return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) log.error("IGNORE : ", e);
// .body(new ErrorResponse("Server Error", "-1")); 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 상세 조회하는 기능, /**
// * 일련번호[sno]로 조회함. * FAQ 상세 조회하는 기능,
// * @param sno * 일련번호[sno] 조회함.
// * @return * @param sno
// */ * @return
// @GetMapping("/{sno}") */
// @Operation(summary = "FAQ 상세 조회", description = "특정 FAQ만 조회하는 API 입니다. sno 값 : 1, 2, 등 ....") @GetMapping("/{sno}")
// @ApiResponses(value = { @Operation(summary = "FAQ 상세 조회", description = "특정 FAQ만 조회하는 API 입니다. sno 값 : 1, 2, 등 ....")
// @ApiResponse(responseCode = "200", description = "성공", public ResponseEntity<? extends BasicResponse> getFaqDetail(
// content = { @Parameter(name="sno", description = "FAQ 시리얼 넘버", in = ParameterIn.PATH, example = "3")@PathVariable int sno) {
// @io.swagger.v3.oas.annotations.media.Content(mediaType = "application/json", FaqListRs result = null;
// array = @io.swagger.v3.oas.annotations.media.ArraySchema( try {
// schema = @io.swagger.v3.oas.annotations.media.Schema(implementation = FaqListDto.class))) result = service.getFaqDetail(sno); // 일련번호[sno]로 상세정보를 조회하는 기능
// }) } catch (BaseException e) {
// }) /**
// public ResponseEntity<? extends BasicResponse> getFaqDetail( * try{
// @Parameter(name="sno", description = "FAQ 시리얼 넘버", in = ParameterIn.PATH, example = "17")@PathVariable int sno) { ...
// FaqListRs result = null; }
// try { * try 영역 코드들중 문제가 생기면 오는 .
// result = service.getFaqDetail(sno); // 일련번호[sno]로 상세정보를 조회하는 기능 * CustomException은 개발자가 "의도적으로" 예외처리,
// } catch (CustomException e) { * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
// /** */
// * try{ Map<String, Object> resultMap = new HashMap<>();
// ... log.error("IGNORE : ", e);
// } resultMap.put("result", false);
// * try 영역 안 코드들중 문제가 생기면 오는 곳. resultMap.put("errorCode", e.getErrorCode());
// * CustomException은 개발자가 "의도적으로" 낸 예외처리, resultMap.put("errorMessage", e.getMessage());
// * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 return ResponseEntity.ok().body(new SuccessResponse<>(resultMap));
// */ } catch (Exception e) {
// Map<String, Object> resultMap = new HashMap<>(); /**
// log.error("IGNORE : ", e); * try{
// resultMap.put("result", false); ...
// resultMap.put("errorCode", e.getErrorCode()); }
// resultMap.put("errorMessage", e.getMessage()); * try 영역 코드들중 문제가 생기면 오는 .
// return ResponseEntity.ok().body(new SuccessResponse<>(resultMap)); * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
// } catch (Exception e) { */
// /** log.error("IGNORE : ", e);
// * try{ return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
// ... .body(new ErrorResponse("Server Error", "-1"));
// }
// * try 영역 안 코드들중 문제가 생기면 오는 곳. }
// * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 return ResponseEntity.ok().body(new SuccessResponse<>(result));
// */ }
// log.error("IGNORE : ", e);
// return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) /**
// .body(new ErrorResponse("Server Error", "-1")); * FAQ 작성하는 기능,
// * FaqListModel모델에 있는 값으로 작성하는 기능.
// } * @param model
// return ResponseEntity.ok().body(new SuccessResponse<>(result)); * @return
// } */
// @PostMapping
// /** @Operation(summary = "FAQ 작성", description = "FAQ를 작성하는 API 입니다.")
// * FAQ 작성하는 기능, public ResponseEntity<? extends BasicResponse> insertFaq(@RequestBody FaqListDto model) {
// * FaqListModel모델에 있는 값으로 작성하는 기능. boolean result = false;
// * @param model try {
// * @return result = service.insertFaq(model); // FaQ 추가하는 기능
// */ } catch (BaseException e) {
// @PostMapping /**
// @Operation(summary = "FAQ 작성", description = "FAQ를 작성하는 API 입니다.") * try{
// @ApiResponses(value = { ...
// @ApiResponse(responseCode = "200", description = "성공", }
// content = { * try 영역 코드들중 문제가 생기면 오는 .
// @io.swagger.v3.oas.annotations.media.Content(mediaType = "application/json", * CustomException은 개발자가 "의도적으로" 예외처리,
// array = @io.swagger.v3.oas.annotations.media.ArraySchema( * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
// schema = @io.swagger.v3.oas.annotations.media.Schema(implementation = SuccessResponse.class))) */
// }) Map<String, Object> resultMap = new HashMap<>();
// }) log.error("IGNORE : ", e);
// public ResponseEntity<? extends BasicResponse> insertFaq(@RequestBody FaqListDto model) { resultMap.put("result", false);
// boolean result = false; resultMap.put("errorCode", e.getErrorCode());
// try { resultMap.put("errorMessage", e.getMessage());
// result = service.insertFaq(model); // FaQ 추가하는 기능 return ResponseEntity.ok().body(new SuccessResponse<>(resultMap));
// } catch (CustomException e) { } catch (Exception e) {
// /** /**
// * try{ * try{
// ... ...
// } }
// * try 영역 안 코드들중 문제가 생기면 오는 곳. * try 영역 코드들중 문제가 생기면 오는 .
// * CustomException은 개발자가 "의도적으로" 낸 예외처리, * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
// * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 */
// */ log.error("IGNORE : ", e);
// Map<String, Object> resultMap = new HashMap<>(); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
// log.error("IGNORE : ", e); .body(new ErrorResponse("Server Error", "-1"));
// resultMap.put("result", false);
// resultMap.put("errorCode", e.getErrorCode()); }
// resultMap.put("errorMessage", e.getMessage()); return ResponseEntity.ok().body(new SuccessResponse<>(result));
// return ResponseEntity.ok().body(new SuccessResponse<>(resultMap));
// } catch (Exception e) {
// /** }
// * try{
// ... /**
// } * FAQ 업데이트 기능,
// * try 영역 안 코드들중 문제가 생기면 오는 곳. * FaqListModel 모델에 있는 값으로 업데이트함.
// * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 * @param model
// */ * @return
// log.error("IGNORE : ", e); */
// return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) @PutMapping
// .body(new ErrorResponse("Server Error", "-1")); @Operation(summary = "FAQ 수정", description = "FAQ를 수정하는 API 입니다.")
// @ApiResponses(value = {
// } @ApiResponse(responseCode = "200", description = "성공",
// return ResponseEntity.ok().body(new SuccessResponse<>(result)); content = {
// @io.swagger.v3.oas.annotations.media.Content(mediaType = "application/json",
// array = @io.swagger.v3.oas.annotations.media.ArraySchema(
// } schema = @io.swagger.v3.oas.annotations.media.Schema(implementation = SuccessResponse.class)))
// })
// /** })
// * FAQ 업데이트 기능, public ResponseEntity<? extends BasicResponse> updateFaq(@RequestBody FaqUpdateDto model) {
// * FaqListModel 모델에 있는 값으로 업데이트함. boolean result = false;
// * @param model try {
// * @return result = service.updateFaq(model); // FaQ 수정하는 기능
// */ } catch (BaseException e) {
// @PutMapping /**
// @Operation(summary = "FAQ 수정", description = "FAQ를 수정하는 API 입니다.") * try{
// @ApiResponses(value = { ...
// @ApiResponse(responseCode = "200", description = "성공", }
// content = { * try 영역 코드들중 문제가 생기면 오는 .
// @io.swagger.v3.oas.annotations.media.Content(mediaType = "application/json", * CustomException은 개발자가 "의도적으로" 예외처리,
// array = @io.swagger.v3.oas.annotations.media.ArraySchema( * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
// schema = @io.swagger.v3.oas.annotations.media.Schema(implementation = SuccessResponse.class))) */
// }) Map<String, Object> resultMap = new HashMap<>();
// }) log.error("IGNORE : ", e);
// public ResponseEntity<? extends BasicResponse> updateFaq(@RequestBody FaqUpdateDto model) { resultMap.put("result", false);
// boolean result = false; resultMap.put("errorCode", e.getErrorCode());
// try { resultMap.put("errorMessage", e.getMessage());
// result = service.updateFaq(model); // FaQ 수정하는 기능 return ResponseEntity.ok().body(new SuccessResponse<>(resultMap));
// } catch (CustomException e) { } catch (Exception e) {
// /** /**
// * try{ * try{
// ... ...
// } }
// * try 영역 안 코드들중 문제가 생기면 오는 곳. * try 영역 코드들중 문제가 생기면 오는 .
// * CustomException은 개발자가 "의도적으로" 낸 예외처리, * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
// * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 */
// */ log.error("IGNORE : ", e);
// Map<String, Object> resultMap = new HashMap<>(); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
// log.error("IGNORE : ", e); .body(new ErrorResponse("Server Error", "-1"));
// resultMap.put("result", false);
// resultMap.put("errorCode", e.getErrorCode()); }
// resultMap.put("errorMessage", e.getMessage()); return ResponseEntity.ok().body(new SuccessResponse<>(result));
// return ResponseEntity.ok().body(new SuccessResponse<>(resultMap));
// } catch (Exception e) { }
// /**
// * try{ /**
// ... * FAQ 삭제하는 기능,
// } * 일련번호[sno] 삭제하는 기능.
// * try 영역 안 코드들중 문제가 생기면 오는 곳. * @param sno
// * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 * @return
// */ */
// log.error("IGNORE : ", e); @DeleteMapping("/{sno}")
// return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) @Operation(summary = "FAQ 삭제", description = "특정 FAQ를 논리 삭제하는 API 입니다. sno 예시 : 1, 2, 등 ...")
// .body(new ErrorResponse("Server Error", "-1")); public ResponseEntity<? extends BasicResponse> deleteFaq(@PathVariable("sno") int sno) {
// // TODO 성공/실패 상태값 전송
// } try {
// return ResponseEntity.ok().body(new SuccessResponse<>(result)); service.deleteFaq(sno); // 일련번호[sno]로 삭제하는 기능
// } catch (BaseException e) {
// } /**
// * try{
// /** ...
// * FAQ 삭제하는 기능, }
// * 일련번호[sno]로 삭제하는 기능. * try 영역 코드들중 문제가 생기면 오는 .
// * @param sno * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
// * @return */
// */ Map<String, Object> resultMap = new HashMap<>();
// @DeleteMapping("/{sno}") log.error("IGNORE : ", e);
// @Operation(summary = "FAQ 삭제", description = "특정 FAQ를 논리 삭제하는 API 입니다. sno 예시 : 1, 2, 등 ...") resultMap.put("result", false);
// public ResponseEntity<? extends BasicResponse> deleteFaq(@PathVariable("sno") int sno) { resultMap.put("errorCode", e.getErrorCode());
// // TODO 성공/실패 상태값 전송 resultMap.put("errorMessage", e.getMessage());
// try { return ResponseEntity.ok().body(new SuccessResponse<>(resultMap));
// service.deleteFaq(sno); // 일련번호[sno]로 삭제하는 기능 } catch (Exception e) {
// } catch (CustomException e) { /**
// /** * try{
// * try{ ...
// ... }
// } * try 영역 코드들중 문제가 생기면 오는 .
// * try 영역 안 코드들중 문제가 생기면 오는 곳. * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
// * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 */
// */ log.error("IGNORE : ", e);
// Map<String, Object> resultMap = new HashMap<>(); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
// log.error("IGNORE : ", e); .body(new ErrorResponse("Server Error", "-1"));
// resultMap.put("result", false);
// resultMap.put("errorCode", e.getErrorCode()); }
// resultMap.put("errorMessage", e.getMessage()); return ResponseEntity.ok().build();
// return ResponseEntity.ok().body(new SuccessResponse<>(resultMap));
// } catch (Exception e) { }
// /** }
// * try{
// ...
// }
// * try 영역 안 코드들중 문제가 생기면 오는 곳.
// * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌
// */
// log.error("IGNORE : ", e);
// return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
// .body(new ErrorResponse("Server Error", "-1"));
//
// }
// return ResponseEntity.ok().build();
//
// }
//}

14
web/api-cns/src/main/java/kr/co/palnet/kac/api/v1/cns/faq/model/FaqListDto.java

@ -3,7 +3,7 @@ package kr.co.palnet.kac.api.v1.cns.faq.model;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import java.time.Instant; import java.time.LocalDateTime;
@Data @Data
public class FaqListDto { public class FaqListDto {
@ -31,14 +31,14 @@ public class FaqListDto {
@Schema(hidden = true) @Schema(hidden = true)
private String createUserId; private String createUserId;
@Schema(description = "생성일자", example = "2023-12-12", implementation = String.class) @Schema(description = "생성일자", example = "2023-12-12T00:00:00", implementation = String.class)
private Instant createDt; private LocalDateTime createDt;
@Schema(hidden = true) @Schema(hidden = true)
private String updateUserId; private String updateUserId;
@Schema(description = "업데이트 일자", example = "2023-12-12", implementation = String.class) @Schema(description = "업데이트 일자", example = "2023-12-12T00:00:00", implementation = String.class)
private Instant updateDt; private LocalDateTime updateDt;
} }

4
web/api-cns/src/main/java/kr/co/palnet/kac/api/v1/cns/faq/model/FaqListRq.java

@ -6,10 +6,10 @@ import lombok.Data;
@Data @Data
public class FaqListRq { public class FaqListRq {
@Schema(description = "FAQ 카테고리" , example = "비행승인") @Schema(description = "FAQ 카테고리" , example = "장치신고")
private String category; private String category;
@Schema(description = "해당 단어가 포함된 제목 검색" , example = "비행") @Schema(description = "해당 단어가 포함된 제목 검색" , example = "제목")
private String word; private String word;
} }

26
web/api-cns/src/main/java/kr/co/palnet/kac/api/v1/cns/faq/model/FaqListRs.java

@ -1,10 +1,13 @@
package kr.co.palnet.kac.api.v1.cns.faq.model; package kr.co.palnet.kac.api.v1.cns.faq.model;
import kr.co.palnet.kac.data.cns.model.CnsFaqBas;
import lombok.Builder;
import lombok.Data; import lombok.Data;
import java.time.Instant; import java.time.LocalDateTime;
@Data @Data
@Builder
public class FaqListRs { public class FaqListRs {
private int faqSno; private int faqSno;
@ -23,10 +26,25 @@ public class FaqListRs {
private String createUserId; private String createUserId;
private Instant createDt; private LocalDateTime createDt;
private String updateUserId; private String updateUserId;
private Instant updateDt; private LocalDateTime updateDt;
public static FaqListRs toRs(CnsFaqBas cnsFaqBas){
return FaqListRs.builder()
.faqSno(cnsFaqBas.getFaqSno().intValue())
.category(cnsFaqBas.getCategory())
.title(cnsFaqBas.getTitle())
.content(cnsFaqBas.getContent())
.viewCnt(cnsFaqBas.getViewCnt())
.expsrYn(cnsFaqBas.getExpsrYn())
.delYn(cnsFaqBas.getDelYn())
.createUserId(cnsFaqBas.getCreateUserId())
.createDt(cnsFaqBas.getCreateDt())
.updateUserId(cnsFaqBas.getUpdateUserId())
.updateDt(cnsFaqBas.getUpdateDt())
.build();
}
} }

6
web/api-cns/src/main/java/kr/co/palnet/kac/api/v1/cns/faq/model/FaqUpdateDto.java

@ -3,7 +3,7 @@ package kr.co.palnet.kac.api.v1.cns.faq.model;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import java.time.Instant; import java.time.LocalDateTime;
@Data @Data
public class FaqUpdateDto { public class FaqUpdateDto {
@ -33,12 +33,12 @@ public class FaqUpdateDto {
private String createUserId; private String createUserId;
@Schema(hidden = true) @Schema(hidden = true)
private Instant createDt; private LocalDateTime createDt;
@Schema(description = "수정한 사람" , example = "palnet") @Schema(description = "수정한 사람" , example = "palnet")
private String updateUserId; private String updateUserId;
@Schema(description = "업데이트 일자") @Schema(description = "업데이트 일자")
private Instant updateDt; private LocalDateTime updateDt;
} }

255
web/api-cns/src/main/java/kr/co/palnet/kac/api/v1/cns/faq/service/CnsFaqService.java

@ -1,126 +1,129 @@
//package kr.co.palnet.kac.api.v1.cns.faq.service; package kr.co.palnet.kac.api.v1.cns.faq.service;
//
//
//import jakarta.transaction.Transactional; import jakarta.transaction.Transactional;
//import kr.co.palnet.kac.api.v1.cns.faq.model.FaqListRq; import kr.co.palnet.kac.api.v1.cns.faq.model.FaqListDto;
//import kr.co.palnet.kac.api.v1.cns.faq.model.FaqListRs; import kr.co.palnet.kac.api.v1.cns.faq.model.FaqListRq;
//import kr.co.palnet.kac.core.code.ErrorCode; import kr.co.palnet.kac.api.v1.cns.faq.model.FaqListRs;
//import kr.co.palnet.kac.core.exception.BaseException; import kr.co.palnet.kac.api.v1.cns.faq.model.FaqUpdateDto;
//import kr.co.palnet.kac.data.cns.model.CnsFaqBas; import kr.co.palnet.kac.config.security.util.SessionHelper;
//import kr.co.palnet.kac.data.cns.repository.CnsFaqBasRepository; import kr.co.palnet.kac.core.exception.BaseErrorCode;
//import lombok.RequiredArgsConstructor; import kr.co.palnet.kac.core.exception.BaseException;
//import lombok.extern.slf4j.Slf4j; import kr.co.palnet.kac.data.cns.model.CnsFaqBas;
//import org.springframework.stereotype.Service; import kr.co.palnet.kac.data.cns.service.CnsFaqDomainService;
// import lombok.RequiredArgsConstructor;
//import java.util.ArrayList; import lombok.extern.slf4j.Slf4j;
//import java.util.List; import org.springframework.stereotype.Service;
//
//@Slf4j import java.util.List;
//@Service
//@RequiredArgsConstructor @Slf4j
//public class CnsFaqService { @Service
// @RequiredArgsConstructor
// private final CnsFaqQueryRepository query; public class CnsFaqService {
// private final CnsFaqBasRepository cnsFaqBasRepository;
// private final JwtTokenUtil jwtTokenUtil; private final CnsFaqDomainService cnsFaqDomainService;
//
// /** /**
// * FaQ 항목들 조회하는 기능. * FaQ 항목들 조회하는 기능.
// * @param model * @param model
// * @return * @return
// */ */
// public List<FaqListRs> getFaqList(FaqListRq model){ public List<FaqListRs> getFaqList(FaqListRq model){
//
// List<FaqListRs> result = query.getFaqList(model.getCategory(), model.getWord()); List<CnsFaqBas> result = cnsFaqDomainService.getFaqList(model.getCategory(), model.getWord());
//
// if(result == null) result = new ArrayList<>(); if(result == null) return null;
//
// return result; return result.stream().map(FaqListRs::toRs).toList();
//
// } }
//
// /** /**
// * 일련번호[sno]로 상세정보를 조회하는 기능. * 일련번호[sno] 상세정보를 조회하는 기능.
// * @param sno * @param sno
// * @return * @return
// */ */
// public FaqListRs getFaqDetail(int sno){ public FaqListRs getFaqDetail(int sno){
// cnsFaqBasRepository.updateViewCnt(sno); cnsFaqDomainService.updateViewCnt(sno);
// FaqListRs result = query.getFaqDetail(sno);
// if(result == null) throw new BaseException(ErrorCode.DATA_NO); CnsFaqBas result = cnsFaqDomainService.getFaqDetail(sno);
// return result;
// } if(result == null) throw new BaseException(BaseErrorCode.DATA_EMPTY);
//
// /** return FaqListRs.toRs(result);
// * FaQ 추가하는 기능. }
// * @param model
// * @return /**
// */ * FaQ 추가하는 기능.
// @Transactional * @param model
// public boolean insertFaq(FaqListModel model){ * @return
// String userId = jwtTokenUtil.getUserIdByToken(); */
// @Transactional
// CnsFaqBas bas = new CnsFaqBas(); public boolean insertFaq(FaqListDto model){
// String userId = SessionHelper.getUserId() == null ? "test" : SessionHelper.getUserId();
// bas.setCreateUserId(userId);
// bas.setUpdateUserId(userId); CnsFaqBas bas = new CnsFaqBas();
//
// bas.setCategory(model.getCategory()); bas.setCreateUserId(userId);
// bas.setContent(model.getContent()); bas.setUpdateUserId(userId);
// bas.setExpsrYn(model.getExpsrYn());
// bas.setTitle(model.getTitle()); bas.setCategory(model.getCategory());
// bas.setContent(model.getContent());
// bas.setDelYn("N"); bas.setExpsrYn(model.getExpsrYn());
// bas.setViewCnt(0); bas.setTitle(model.getTitle());
//
// try { bas.setDelYn("N");
// CnsFaqBas saveEntity = cnsFaqBasRepository.save(bas); bas.setViewCnt(0);
// if(saveEntity != null) return true;
// else return false; try {
// } catch(Exception e) { CnsFaqBas saveEntity = cnsFaqDomainService.saveFaqBas(bas);
// // TODO parameter validate...?? if(saveEntity != null) return true;
// throw new CustomException(ErrorCode.NON_VALID_PARAMETER); else return false;
// } } catch(Exception e) {
// } // TODO parameter validate...??
// throw new BaseException(BaseErrorCode.WEB_PARAM_INVALID);
// /** }
// * FaQ 수정하는 기능. }
// * @param model
// * @return /**
// */ * FaQ 수정하는 기능.
// @Transactional * @param model
// public boolean updateFaq(FaqUpdateModel model) { * @return
// String userId = jwtTokenUtil.getUserIdByToken(); */
// @Transactional
// CnsFaqBas prevData = cnsFaqBasRepository.findById(model.getFaqSno()).orElseThrow(() -> new CustomException(ErrorCode.DATA_NO)); public boolean updateFaq(FaqUpdateDto model) {
// String userId = SessionHelper.getUserId() == null ? "test" : SessionHelper.getUserId();
// if(model.getCategory() != null) prevData.setCategory(model.getCategory());
// if(model.getTitle() != null) prevData.setTitle(model.getTitle()); CnsFaqBas prevData = cnsFaqDomainService.findById(model.getFaqSno()).orElseThrow(() -> new BaseException(BaseErrorCode.DATA_EMPTY));
// if(model.getContent() != null) prevData.setContent(model.getContent());
// if(model.getExpsrYn() != null) prevData.setExpsrYn(model.getExpsrYn()); if(model.getCategory() != null) prevData.setCategory(model.getCategory());
// prevData.setUpdateUserId(userId); if(model.getTitle() != null) prevData.setTitle(model.getTitle());
// if(model.getContent() != null) prevData.setContent(model.getContent());
// if(model.getExpsrYn() != null) prevData.setExpsrYn(model.getExpsrYn());
// try { prevData.setUpdateUserId(userId);
// CnsFaqBas saveEntity = cnsFaqBasRepository.save(prevData);
// if(saveEntity != null) return true;
// else return false; try {
// } catch(Exception e) { CnsFaqBas saveEntity = cnsFaqDomainService.saveFaqBas(prevData);
// // TODO parameter validate...?? if(saveEntity != null) return true;
// throw new CustomException(ErrorCode.NON_VALID_PARAMETER); else return false;
// } } catch(Exception e) {
// } // TODO parameter validate...??
// throw new BaseException(BaseErrorCode.WEB_PARAM_INVALID);
// /** }
// * 일련번호[sno]로 삭제하는 기능. }
// * @param sno
// */ /**
// public void deleteFaq(int sno) { * 일련번호[sno] 삭제하는 기능.
// * @param sno
// // TODO 반환값이 실행한 갯수인지 확인 필요 */
// int delCnt = cnsFaqBasRepository.deleteFaq(sno); public void deleteFaq(int sno) {
//
// if(delCnt == 0) throw new CustomException(ErrorCode.DATA_NO); // TODO 반환값이 실행한 갯수인지 확인 필요
// int delCnt = cnsFaqDomainService.deleteFaq(sno);
// }
//} if(delCnt == 0) throw new BaseException(BaseErrorCode.DATA_EMPTY);
}
}
Loading…
Cancel
Save