From 98c8da785907504033cf01947bb6bcc13d5e5bf2 Mon Sep 17 00:00:00 2001 From: Daseul Kim Date: Thu, 16 Jan 2025 11:28:15 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=BA=94=EB=B2=84=EC=8A=A4=20=ED=8C=9D?= =?UTF-8?q?=EC=97=85=20=EC=83=81=ED=83=9C=20=EC=83=9D=EC=84=B1/=EC=A0=80?= =?UTF-8?q?=EC=9E=A5/=EC=82=AD=EC=A0=9C=20api=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CanvasPopupStatusController.java | 80 ++++++++++++++++ .../CanvasPopupStatusMapper.java | 37 ++++++++ .../CanvasPopupStatusService.java | 91 +++++++++++++++++++ .../dto/CanvasPopupStatus.java | 28 ++++++ .../CanvasPopupStatusMapper.xml | 51 +++++++++++ 5 files changed, 287 insertions(+) create mode 100644 src/main/java/com/interplug/qcast/biz/canvaspopupstatus/CanvasPopupStatusController.java create mode 100644 src/main/java/com/interplug/qcast/biz/canvaspopupstatus/CanvasPopupStatusMapper.java create mode 100644 src/main/java/com/interplug/qcast/biz/canvaspopupstatus/CanvasPopupStatusService.java create mode 100644 src/main/java/com/interplug/qcast/biz/canvaspopupstatus/dto/CanvasPopupStatus.java create mode 100644 src/main/resources/mappers/canvaspopupstatus/CanvasPopupStatusMapper.xml diff --git a/src/main/java/com/interplug/qcast/biz/canvaspopupstatus/CanvasPopupStatusController.java b/src/main/java/com/interplug/qcast/biz/canvaspopupstatus/CanvasPopupStatusController.java new file mode 100644 index 00000000..3cdcdef4 --- /dev/null +++ b/src/main/java/com/interplug/qcast/biz/canvaspopupstatus/CanvasPopupStatusController.java @@ -0,0 +1,80 @@ +package com.interplug.qcast.biz.canvaspopupstatus; + +import com.interplug.qcast.biz.canvaspopupstatus.dto.CanvasPopupStatus; +import com.interplug.qcast.config.Exception.ErrorCode; +import com.interplug.qcast.config.Exception.QcastException; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +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.ResponseStatus; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/v1/canvas-popup-status") +@RequiredArgsConstructor +@Tag(name = "CanvasPopupStatusController", description = "Canvas Popup Status 관련 API") +public class CanvasPopupStatusController { + + private final CanvasPopupStatusService canvasPopupStatusService; + + /** + * 캔버스 팝업 상태를 조회한다. + * + * @param objectNo 물건정보 번호 + * @param planNo plan 번호 + * @param popupType 캔버스 팝업 단계 + * @return 조회된 CanvasPopupStatus 객체 + * @throws QcastException 조회된 데이터가 없을 경우 예외 발생 + */ + @Operation(description = "캔버스 팝업 상태를 조회한다.") + @GetMapping + public CanvasPopupStatus getCanvasPopupStatus( + @RequestParam @Schema(description = "물건정보 번호") String objectNo, + @RequestParam @Schema(description = "plan 번호") Integer planNo, + @RequestParam @Schema(description = "캔버스 팝업 단계") String popupType) + throws QcastException { + if (objectNo == null + || objectNo.trim().isEmpty() + || planNo == null + || popupType == null + || popupType.trim().isEmpty()) { + throw new QcastException(ErrorCode.INVALID_INPUT_VALUE); + } + return canvasPopupStatusService.selectCanvasPopupStatus(objectNo, planNo, popupType); + } + + /** + * 캔버스 팝업 상태를 저장 또는 수정한다. + * + * @param canvasPopupStatus 저장 또는 수정할 CanvasPopupStatus 객체 + * @throws QcastException 저장 또는 수정 중 예외 발생 시 + */ + @Operation(description = "캔버스 팝업 상태를 저장 또는 수정한다.") + @PostMapping + public void saveCanvasPopupStatus(@RequestBody CanvasPopupStatus canvasPopupStatus) + throws QcastException { + canvasPopupStatusService.saveCanvasPopupStatus(canvasPopupStatus); + } + + /** + * 캔버스 팝업 상태를 삭제한다. (미사용) + * + * @param canvasPopupStatus 삭제할 CanvasPopupStatus 객체 + * @throws QcastException 삭제 중 예외 발생 시 + */ + @Operation(description = "캔버스 팝업 상태를 삭제한다. (미사용)") + @DeleteMapping + @ResponseStatus(HttpStatus.NO_CONTENT) + public void deleteCanvasPopupStatus(@RequestBody CanvasPopupStatus canvasPopupStatus) + throws QcastException { + canvasPopupStatusService.deleteCanvasPopupStatus(canvasPopupStatus); + } +} diff --git a/src/main/java/com/interplug/qcast/biz/canvaspopupstatus/CanvasPopupStatusMapper.java b/src/main/java/com/interplug/qcast/biz/canvaspopupstatus/CanvasPopupStatusMapper.java new file mode 100644 index 00000000..bfe59520 --- /dev/null +++ b/src/main/java/com/interplug/qcast/biz/canvaspopupstatus/CanvasPopupStatusMapper.java @@ -0,0 +1,37 @@ +package com.interplug.qcast.biz.canvaspopupstatus; + +import com.interplug.qcast.biz.canvaspopupstatus.dto.CanvasPopupStatus; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface CanvasPopupStatusMapper { + + /** + * Canvas Popup Status 조회 + * + * @param canvasPopupStatus 조회할 CanvasPopupStatus 객체 + * @return 조회된 CanvasPopupStatus 객체 + */ + public CanvasPopupStatus selectCanvasPopupStatus(CanvasPopupStatus canvasPopupStatus); + + /** + * Canvas Popup Status 생성 + * + * @param canvasPopupStatus 생성할 CanvasPopupStatus 객체 + */ + public void insertCanvasPopupStatus(CanvasPopupStatus canvasPopupStatus); + + /** + * Canvas Popup Status 수정 + * + * @param canvasPopupStatus 수정할 CanvasPopupStatus 객체 + */ + public void updateCanvasPopupStatus(CanvasPopupStatus canvasPopupStatus); + + /** + * Canvas Popup Status 삭제 + * + * @param canvasPopupStatus 삭제할 CanvasPopupStatus 객체 + */ + public void deleteCanvasPopupStatus(CanvasPopupStatus canvasPopupStatus); +} diff --git a/src/main/java/com/interplug/qcast/biz/canvaspopupstatus/CanvasPopupStatusService.java b/src/main/java/com/interplug/qcast/biz/canvaspopupstatus/CanvasPopupStatusService.java new file mode 100644 index 00000000..aaffa1b1 --- /dev/null +++ b/src/main/java/com/interplug/qcast/biz/canvaspopupstatus/CanvasPopupStatusService.java @@ -0,0 +1,91 @@ +package com.interplug.qcast.biz.canvaspopupstatus; + +import com.interplug.qcast.biz.canvaspopupstatus.dto.CanvasPopupStatus; +import com.interplug.qcast.config.Exception.ErrorCode; +import com.interplug.qcast.config.Exception.QcastException; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class CanvasPopupStatusService { + + private final CanvasPopupStatusMapper canvasPopupStatusMapper; + + /** + * Canvas Popup Status 조회 + * + * @param objectNo 조회할 object 번호 + * @param planNo 조회할 plan 번호 + * @param popupType 조회할 popup 타입 + * @return 조회된 CanvasPopupStatus 객체 + * @throws QcastException 조회된 데이터가 없을 경우 예외 발생 + */ + public CanvasPopupStatus selectCanvasPopupStatus( + String objectNo, Integer planNo, String popupType) throws QcastException { + CanvasPopupStatus request = + CanvasPopupStatus.builder().objectNo(objectNo).planNo(planNo).popupType(popupType).build(); + CanvasPopupStatus cps = canvasPopupStatusMapper.selectCanvasPopupStatus(request); + if (cps == null) throw new QcastException(ErrorCode.NOT_FOUND); + return cps; + } + + /** + * Canvas Popup Status 저장 - 이미 존재하는 데이터인 경우 수정, 없는 경우 생성 + * + * @param cps 저장할 CanvasPopupStatus 객체 + * @throws QcastException 저장 중 예외 발생 시 + */ + public void saveCanvasPopupStatus(CanvasPopupStatus cps) throws QcastException { + CanvasPopupStatus chk = canvasPopupStatusMapper.selectCanvasPopupStatus(cps); + if (chk == null) { + createCanvasPopupStatus(cps); + } else { + updateCanvasPopupStatus(cps); + } + } + + /** + * Canvas Popup Status 생성 + * + * @param cps 생성할 CanvasPopupStatus 객체 + * @throws QcastException 생성 중 예외 발생 시 + */ + public void createCanvasPopupStatus(CanvasPopupStatus cps) throws QcastException { + try { + canvasPopupStatusMapper.insertCanvasPopupStatus(cps); + } catch (Exception e) { + throw new QcastException(ErrorCode.INTERNAL_SERVER_ERROR, e.getMessage()); + } + } + + /** + * Canvas Popup Status 수정 + * + * @param cps 수정할 CanvasPopupStatus 객체 + * @throws QcastException 수정 중 예외 발생 시 + */ + public void updateCanvasPopupStatus(CanvasPopupStatus cps) throws QcastException { + try { + canvasPopupStatusMapper.updateCanvasPopupStatus(cps); + } catch (Exception e) { + throw new QcastException(ErrorCode.INTERNAL_SERVER_ERROR, e.getMessage()); + } + } + + /** + * Canvas Popup Status 삭제 + * + * @param cps 삭제할 CanvasPopupStatus 객체 + * @throws QcastException 삭제 중 예외 발생 시 + */ + public void deleteCanvasPopupStatus(CanvasPopupStatus cps) throws QcastException { + // 존재 유무 확인 + selectCanvasPopupStatus(cps.getObjectNo(), cps.getPlanNo(), cps.getPopupType()); + try { + canvasPopupStatusMapper.deleteCanvasPopupStatus(cps); + } catch (Exception e) { + throw new QcastException(ErrorCode.INTERNAL_SERVER_ERROR, e.getMessage()); + } + } +} diff --git a/src/main/java/com/interplug/qcast/biz/canvaspopupstatus/dto/CanvasPopupStatus.java b/src/main/java/com/interplug/qcast/biz/canvaspopupstatus/dto/CanvasPopupStatus.java new file mode 100644 index 00000000..2cad4a04 --- /dev/null +++ b/src/main/java/com/interplug/qcast/biz/canvaspopupstatus/dto/CanvasPopupStatus.java @@ -0,0 +1,28 @@ +package com.interplug.qcast.biz.canvaspopupstatus.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@Builder +@Schema(description = "캔버스 팝업 상태") +public class CanvasPopupStatus { + + // @Schema(description = "id") + // private Long id; + + @Schema(description = "물건정보 번호") + private String objectNo; + + @Schema(description = "plan 번호") + private Integer planNo; + + @Schema(description = "캔버스 팝업 단계") + private String popupType; + + @Schema(description = "캔버스 팝업 상태 데이터") + private String popupStatus; +} diff --git a/src/main/resources/mappers/canvaspopupstatus/CanvasPopupStatusMapper.xml b/src/main/resources/mappers/canvaspopupstatus/CanvasPopupStatusMapper.xml new file mode 100644 index 00000000..52dcb1ed --- /dev/null +++ b/src/main/resources/mappers/canvaspopupstatus/CanvasPopupStatusMapper.xml @@ -0,0 +1,51 @@ + + + + + + + + + INSERT INTO T_CANVAS_POPUP_STATUS + (object_no, + plan_no, + popup_type, + popup_status) + VALUES (#{objectNo}, + #{planNo}, + #{popupType}, + #{popupStatus}) + + + + UPDATE T_CANVAS_POPUP_STATUS + SET popup_status = #{popupStatus} + WHERE object_no = #{objectNo} + AND plan_no = #{planNo} + AND popup_type = #{popupType} + + + + DELETE + FROM T_CANVAS_POPUP_STATUS + WHERE object_no = #{objectNo} + AND plan_no = #{planNo} + AND popup_type = #{popupType} + + + \ No newline at end of file