Skip to content

Commit

Permalink
feat: spring rest docs 설정
Browse files Browse the repository at this point in the history
  • Loading branch information
juno-junho committed Sep 24, 2023
1 parent edd9039 commit b11a974
Show file tree
Hide file tree
Showing 6 changed files with 79 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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}")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ public ResponseEntity<Void> 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(),
Expand All @@ -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);
}

Expand Down
43 changes: 43 additions & 0 deletions src/main/java/com/ray/pominowner/store/domain/BusinessHour.java
Original file line number Diff line number Diff line change
@@ -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("오픈 시간은 마감 시간보다 빠를 수 없습니다.");
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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 -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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())
Expand Down

0 comments on commit b11a974

Please sign in to comment.