diff --git a/backend/src/main/java/com/staccato/exception/GlobalExceptionHandler.java b/backend/src/main/java/com/staccato/exception/GlobalExceptionHandler.java index 110a2648f..20a1337df 100644 --- a/backend/src/main/java/com/staccato/exception/GlobalExceptionHandler.java +++ b/backend/src/main/java/com/staccato/exception/GlobalExceptionHandler.java @@ -14,4 +14,10 @@ public ResponseEntity handleDateTimeParseException(DateTimePa return ResponseEntity.badRequest() .body(new ExceptionResponse(HttpStatus.BAD_REQUEST.toString(), "올바르지 않은 날짜 형식입니다.")); } + + @ExceptionHandler(InvalidIdException.class) + public ResponseEntity handleInvalidIdException(InvalidIdException e) { + return ResponseEntity.badRequest() + .body(new ExceptionResponse(HttpStatus.BAD_REQUEST.toString(), e.getMessage())); + } } diff --git a/backend/src/main/java/com/staccato/exception/InvalidIdException.java b/backend/src/main/java/com/staccato/exception/InvalidIdException.java new file mode 100644 index 000000000..97099c389 --- /dev/null +++ b/backend/src/main/java/com/staccato/exception/InvalidIdException.java @@ -0,0 +1,7 @@ +package com.staccato.exception; + +public class InvalidIdException extends RuntimeException { + public InvalidIdException(String message) { + super(message); + } +} diff --git a/backend/src/main/java/com/staccato/visit/controller/VisitController.java b/backend/src/main/java/com/staccato/visit/controller/VisitController.java index ed4309ae1..47b7db365 100644 --- a/backend/src/main/java/com/staccato/visit/controller/VisitController.java +++ b/backend/src/main/java/com/staccato/visit/controller/VisitController.java @@ -6,6 +6,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import com.staccato.exception.InvalidIdException; import com.staccato.visit.service.VisitService; import lombok.RequiredArgsConstructor; @@ -14,10 +15,15 @@ @RequestMapping("/visits") @RequiredArgsConstructor public class VisitController { + private static final int MIN_ID = 1; + private final VisitService visitService; @DeleteMapping("{visitId}") public ResponseEntity deleteById(@PathVariable Long visitId) { + if (visitId < MIN_ID) { + throw new InvalidIdException("방문 기록 식별자는 양수로 이루어져야 합니다."); + } visitService.deleteById(visitId); return ResponseEntity.noContent().build(); } diff --git a/backend/src/test/java/com/staccato/visit/controller/VisitControllerTest.java b/backend/src/test/java/com/staccato/visit/controller/VisitControllerTest.java index 402a67fda..5837e17dd 100644 --- a/backend/src/test/java/com/staccato/visit/controller/VisitControllerTest.java +++ b/backend/src/test/java/com/staccato/visit/controller/VisitControllerTest.java @@ -21,4 +21,15 @@ void deleteById() { .then().log().all() .statusCode(204); } + + @DisplayName("1보다 작은 id로 Visit 삭제를 시도하면 Bad Request를 반환한다.") + @Test + void deleteByIdFail() { + RestAssured.given().log().all() + .header("Authorization", "1") + .contentType(ContentType.JSON) + .when().delete("/visits/0") + .then().log().all() + .statusCode(400); + } }