diff --git a/src/main/java/com/ray/pominowner/menu/controller/OptionController.java b/src/main/java/com/ray/pominowner/menu/controller/OptionController.java index e5185bd3..6e7e03fa 100644 --- a/src/main/java/com/ray/pominowner/menu/controller/OptionController.java +++ b/src/main/java/com/ray/pominowner/menu/controller/OptionController.java @@ -49,10 +49,10 @@ public void updateOption(@RequestBody OptionUpdateRequest request, @PathVariable OptionUpdateInfo optionUpdateInfo = new OptionUpdateInfo( request.name(), request.price(), - request.selected(), - request.optionId() + request.selected() ); - optionService.updateOption(optionUpdateInfo); + + optionService.updateOption(optionUpdateInfo, optionId); } @DeleteMapping("/{optionId}") diff --git a/src/main/java/com/ray/pominowner/menu/controller/OptionGroupController.java b/src/main/java/com/ray/pominowner/menu/controller/OptionGroupController.java index f792eac1..a07f19bf 100644 --- a/src/main/java/com/ray/pominowner/menu/controller/OptionGroupController.java +++ b/src/main/java/com/ray/pominowner/menu/controller/OptionGroupController.java @@ -40,8 +40,8 @@ public ResponseEntity registerOptionGroup(@RequestBody OptionGroupRequest return ResponseEntity.created(URI.create("/api/v1/option-groups/" + optionGroupId)).build(); } - @PutMapping - public void updateOptionGroup(@RequestBody OptionGroupUpdateRequest request) { + @PutMapping("/{optionGroupId}") + public void updateOptionGroup(@RequestBody OptionGroupUpdateRequest request, @PathVariable Long optionGroupId) { OptionGroupUpdateInfo optionGroupUpdateInfo = new OptionGroupUpdateInfo( request.name(), request.maxOptionCount(), @@ -50,8 +50,8 @@ public void updateOptionGroup(@RequestBody OptionGroupUpdateRequest request) { optionGroupService.updateOptionGroup(optionGroupUpdateInfo, optionGroupId); } - @DeleteMapping - public void deleteOptionGroup(@RequestParam Long optionGroupId) { + @DeleteMapping("/{optionGroupId}") + public void deleteOptionGroup(@PathVariable Long optionGroupId) { optionGroupService.deleteOptionGroup(optionGroupId); } diff --git a/src/main/java/com/ray/pominowner/store/domain/BusinessHour.java b/src/main/java/com/ray/pominowner/store/domain/BusinessHour.java new file mode 100644 index 00000000..22a79de1 --- /dev/null +++ b/src/main/java/com/ray/pominowner/store/domain/BusinessHour.java @@ -0,0 +1,43 @@ +package com.ray.pominowner.store.domain; + +import jakarta.persistence.Column; +import jakarta.persistence.Embeddable; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.util.Assert; + +import java.time.LocalTime; + +import static lombok.AccessLevel.PROTECTED; + +@Embeddable +@EqualsAndHashCode() +@NoArgsConstructor(access = PROTECTED) +public class BusinessHour { + + @Column + @DateTimeFormat(pattern = "HH:mm:ss") + private LocalTime openTime = LocalTime.MAX; + + @Column + @DateTimeFormat(pattern = "HH:mm:ss") + private LocalTime closeTime = LocalTime.MAX; + + + public BusinessHour(LocalTime openTime, LocalTime closeTime) { + validateConstructor(openTime, closeTime); + this.openTime = openTime; + this.closeTime = closeTime; + } + + private void validateConstructor(LocalTime openTime, LocalTime closeTime) { + Assert.notNull(openTime, "오픈 시간은 필수 입니다."); + Assert.notNull(closeTime, "마감 시간은 필수 입니다."); + + if (openTime.isAfter(closeTime)) { + throw new IllegalArgumentException("오픈 시간은 마감 시간보다 빠를 수 없습니다."); + } + } + +} diff --git a/src/test/java/com/ray/pominowner/menu/controller/MenuControllerTest.java b/src/test/java/com/ray/pominowner/menu/controller/MenuControllerTest.java index 0e2516df..ccfa7241 100644 --- a/src/test/java/com/ray/pominowner/menu/controller/MenuControllerTest.java +++ b/src/test/java/com/ray/pominowner/menu/controller/MenuControllerTest.java @@ -118,7 +118,6 @@ void successUpdateMenu() throws Exception { // given doNothing().when(menuService).updateMenu(any(), any()); - // when, then MockMultipartHttpServletRequestBuilder builder = RestDocumentationRequestBuilders.multipart("/api/v1/menus/1"); builder.with(request -> { diff --git a/src/test/java/com/ray/pominowner/menu/controller/OptionControllerTest.java b/src/test/java/com/ray/pominowner/menu/controller/OptionControllerTest.java index 15cfe90c..760b0278 100644 --- a/src/test/java/com/ray/pominowner/menu/controller/OptionControllerTest.java +++ b/src/test/java/com/ray/pominowner/menu/controller/OptionControllerTest.java @@ -125,7 +125,21 @@ void successRegisterOption() throws Exception { .contentType(MediaType.APPLICATION_JSON) .content(mapper.writeValueAsString(optionRequest))) .andExpect(status().isCreated()) - .andExpect(header().stringValues("Location", "/api/v1/options/1")); + .andExpect(header().stringValues("Location", "/api/v1/options/1")) + .andDo( + document("option/save", + requestFields( + fieldWithPath("name").type(STRING).description("옵션 이름"), + fieldWithPath("price").type(NUMBER).description("옵션 가격"), + fieldWithPath("selected").type(BOOLEAN).description("옵션 선택 여부"), + fieldWithPath("optionGroupId").type(NUMBER).description("옵션 그룹 id") + ), + responseHeaders( + headerWithName("Location").description("옵션 등록 후 세부 정보 redirection link") + ) + ) + ); + } @Test @@ -142,7 +156,19 @@ void successUpdateOption() throws Exception { .with(csrf()) .contentType(MediaType.APPLICATION_JSON) .content(mapper.writeValueAsString(optionUpdateRequest))) - .andExpect(status().isOk()); + .andExpect(status().isOk()) + .andDo( + document("option/update", + pathParameters( + parameterWithName("optionId").description("옵션 아이디") + ), + requestFields( + fieldWithPath("name").type(STRING).description("옵션 이름"), + fieldWithPath("price").type(NUMBER).description("옵션 가격"), + fieldWithPath("selected").type(BOOLEAN).description("옵션 선택 여부") + ) + ) + ); } @Test diff --git a/src/test/java/com/ray/pominowner/menu/controller/OptionGroupControllerTest.java b/src/test/java/com/ray/pominowner/menu/controller/OptionGroupControllerTest.java index 0f09652d..f5bd0fbe 100644 --- a/src/test/java/com/ray/pominowner/menu/controller/OptionGroupControllerTest.java +++ b/src/test/java/com/ray/pominowner/menu/controller/OptionGroupControllerTest.java @@ -115,7 +115,7 @@ void successRegisterOption() throws Exception { Long optionGroupId = 1L; OptionGroupRequest optionGroupRequest = new OptionGroupRequest("옵션 그룹 1", 10, false, storeId); given(optionGroupService.registerOptionGroup(any(OptionGroup.class))).willReturn(optionGroupId); - + // when, then mvc.perform(post("/api/v1/option-groups") .with(csrf())