Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

카테고리 생성 시 생성된 카테고리 값 반환 #485

Merged
merged 3 commits into from
Aug 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import codezap.auth.configuration.AuthenticationPrinciple;
import codezap.category.dto.request.CreateCategoryRequest;
import codezap.category.dto.request.UpdateCategoryRequest;
import codezap.category.dto.response.CreateCategoryResponse;
import codezap.category.dto.response.FindAllCategoriesResponse;
import codezap.category.service.CategoryService;
import codezap.global.validation.ValidationSequence;
Expand All @@ -31,13 +32,13 @@ public class CategoryController implements SpringDocCategoryController {
private final CategoryService categoryService;

@PostMapping
public ResponseEntity<Void> createCategory(
public ResponseEntity<CreateCategoryResponse> createCategory(
@AuthenticationPrinciple MemberDto memberDto,
@Validated(ValidationSequence.class) @RequestBody CreateCategoryRequest createCategoryRequest
) {
Long createdCategoryId = categoryService.create(memberDto, createCategoryRequest);
return ResponseEntity.created(URI.create("/categories/" + createdCategoryId))
.build();
CreateCategoryResponse response = categoryService.create(memberDto, createCategoryRequest);
return ResponseEntity.created(URI.create("/categories/" + response.id()))
.body(response);
}

@GetMapping
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

import codezap.category.dto.request.CreateCategoryRequest;
import codezap.category.dto.request.UpdateCategoryRequest;
import codezap.category.dto.response.CreateCategoryResponse;
import codezap.category.dto.response.FindAllCategoriesResponse;
import codezap.global.swagger.error.ApiErrorResponse;
import codezap.global.swagger.error.ErrorCase;
Expand Down Expand Up @@ -32,7 +33,10 @@ public interface SpringDocCategoryController {
@ErrorCase(description = "카테고리 이름이 255자를 초과한 경우", exampleMessage = "카테고리 이름은 최대 255자까지 입력 가능합니다."),
@ErrorCase(description = "동일한 이름의 카테고리가 존재하는 경우", exampleMessage = "이름이 Spring 인 카테고리가 이미 존재합니다."),
})
ResponseEntity<Void> createCategory(MemberDto memberDto, CreateCategoryRequest createCategoryRequest);
ResponseEntity<CreateCategoryResponse> createCategory(
MemberDto memberDto,
CreateCategoryRequest createCategoryRequest
);

@SecurityRequirement(name = "쿠키 인증 토큰")
@Operation(summary = "카테고리 목록 조회", description = "생성된 모든 카테고리를 조회합니다.")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package codezap.category.dto.response;

import codezap.category.domain.Category;
import io.swagger.v3.oas.annotations.media.Schema;

public record CreateCategoryResponse(
@Schema(description = "카테고리 식별자", example = "1")
Long id,
@Schema(description = "카테고리 이름", example = "Spring")
String name
) {
public static CreateCategoryResponse from(Category category) {
return new CreateCategoryResponse(category.getId(), category.getName());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import codezap.category.domain.Category;
import codezap.category.dto.request.CreateCategoryRequest;
import codezap.category.dto.request.UpdateCategoryRequest;
import codezap.category.dto.response.CreateCategoryResponse;
import codezap.category.dto.response.FindAllCategoriesResponse;
import codezap.category.repository.CategoryRepository;
import codezap.global.exception.CodeZapException;
Expand All @@ -25,12 +26,12 @@ public class CategoryService {
private final MemberRepository memberRepository;

@Transactional
public Long create(MemberDto memberDto, CreateCategoryRequest createCategoryRequest) {
public CreateCategoryResponse create(MemberDto memberDto, CreateCategoryRequest createCategoryRequest) {
String categoryName = createCategoryRequest.name();
Member member = memberRepository.fetchById(memberDto.id());
validateDuplicatedCategory(categoryName, member);
Category category = new Category(categoryName, member);
return categoryRepository.save(category).getId();
Category category = categoryRepository.save(new Category(categoryName, member));
return CreateCategoryResponse.from(category);
}

public FindAllCategoriesResponse findAllByMember(Long memberId) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import codezap.category.domain.Category;
import codezap.category.dto.request.CreateCategoryRequest;
import codezap.category.dto.request.UpdateCategoryRequest;
import codezap.category.dto.response.CreateCategoryResponse;
import codezap.category.dto.response.FindAllCategoriesResponse;
import codezap.global.MockMvcTest;
import codezap.global.exception.CodeZapException;
Expand All @@ -51,7 +52,7 @@ void createCategorySuccess() throws Exception {

when(categoryService.create(
MemberDto.from(MemberFixture.memberFixture()), createCategoryRequest))
.thenReturn(categoryId);
.thenReturn(new CreateCategoryResponse(1L, "category"));

mvc.perform(post("/categories")
.contentType(MediaType.APPLICATION_JSON)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import codezap.category.domain.Category;
import codezap.category.dto.request.CreateCategoryRequest;
import codezap.category.dto.request.UpdateCategoryRequest;
import codezap.category.dto.response.CreateCategoryResponse;
import codezap.category.dto.response.FindAllCategoriesResponse;
import codezap.category.repository.CategoryRepository;
import codezap.category.repository.FakeCategoryRepository;
Expand Down Expand Up @@ -43,9 +44,9 @@ void createCategorySuccess() {
Member member = memberRepository.save(MemberFixture.memberFixture());
CreateCategoryRequest createCategoryRequest = new CreateCategoryRequest("category1");

Long categoryId = categoryService.create(MemberDto.from(member), createCategoryRequest);
CreateCategoryResponse response = categoryService.create(MemberDto.from(member), createCategoryRequest);

assertThat(categoryId).isEqualTo(1L);
assertThat(response.id()).isEqualTo(1L);
}

@Test
Expand All @@ -72,7 +73,9 @@ void createCategorySuccessWithOtherMemberAndSameName() {

CreateCategoryRequest createCategoryRequest = new CreateCategoryRequest("category");

assertThat(categoryService.create(MemberDto.from(otherMember), createCategoryRequest)).isEqualTo(2L);
CreateCategoryResponse response = categoryService.create(MemberDto.from(otherMember),
createCategoryRequest);
assertThat(response.id()).isEqualTo(2L);
}
}

Expand Down
Loading