diff --git a/backend/src/main/java/codezap/category/controller/CategoryController.java b/backend/src/main/java/codezap/category/controller/CategoryController.java index f6a7be1c6..2d3a15687 100644 --- a/backend/src/main/java/codezap/category/controller/CategoryController.java +++ b/backend/src/main/java/codezap/category/controller/CategoryController.java @@ -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; @@ -31,13 +32,13 @@ public class CategoryController implements SpringDocCategoryController { private final CategoryService categoryService; @PostMapping - public ResponseEntity createCategory( + public ResponseEntity 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 diff --git a/backend/src/main/java/codezap/category/controller/SpringDocCategoryController.java b/backend/src/main/java/codezap/category/controller/SpringDocCategoryController.java index 732fa5f9a..3608e4af5 100644 --- a/backend/src/main/java/codezap/category/controller/SpringDocCategoryController.java +++ b/backend/src/main/java/codezap/category/controller/SpringDocCategoryController.java @@ -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; @@ -32,7 +33,10 @@ public interface SpringDocCategoryController { @ErrorCase(description = "카테고리 이름이 255자를 초과한 경우", exampleMessage = "카테고리 이름은 최대 255자까지 입력 가능합니다."), @ErrorCase(description = "동일한 이름의 카테고리가 존재하는 경우", exampleMessage = "이름이 Spring 인 카테고리가 이미 존재합니다."), }) - ResponseEntity createCategory(MemberDto memberDto, CreateCategoryRequest createCategoryRequest); + ResponseEntity createCategory( + MemberDto memberDto, + CreateCategoryRequest createCategoryRequest + ); @SecurityRequirement(name = "쿠키 인증 토큰") @Operation(summary = "카테고리 목록 조회", description = "생성된 모든 카테고리를 조회합니다.") diff --git a/backend/src/main/java/codezap/category/dto/response/CreateCategoryResponse.java b/backend/src/main/java/codezap/category/dto/response/CreateCategoryResponse.java new file mode 100644 index 000000000..e35367014 --- /dev/null +++ b/backend/src/main/java/codezap/category/dto/response/CreateCategoryResponse.java @@ -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()); + } +} diff --git a/backend/src/main/java/codezap/category/service/CategoryService.java b/backend/src/main/java/codezap/category/service/CategoryService.java index 80741cfe8..400bb18e2 100644 --- a/backend/src/main/java/codezap/category/service/CategoryService.java +++ b/backend/src/main/java/codezap/category/service/CategoryService.java @@ -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; @@ -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) { diff --git a/backend/src/test/java/codezap/category/controller/CategoryControllerTest.java b/backend/src/test/java/codezap/category/controller/CategoryControllerTest.java index 5c1a9107f..718169e15 100644 --- a/backend/src/test/java/codezap/category/controller/CategoryControllerTest.java +++ b/backend/src/test/java/codezap/category/controller/CategoryControllerTest.java @@ -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; @@ -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) diff --git a/backend/src/test/java/codezap/category/service/CategoryServiceTest.java b/backend/src/test/java/codezap/category/service/CategoryServiceTest.java index 1023a6473..0bbffbf42 100644 --- a/backend/src/test/java/codezap/category/service/CategoryServiceTest.java +++ b/backend/src/test/java/codezap/category/service/CategoryServiceTest.java @@ -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; @@ -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 @@ -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); } }