Skip to content

Commit cde5457

Browse files
CLAP-147 Feature : 카테고리 수정 API 구현
* CLAP-147 Feature : 카테고리 수정 API 구현 <footer> - 관련: #119 * CLAP-147 Feature : 카테고리 추가, 수정 API 리뷰반영 수정 <footer> - 관련: #119
1 parent eb34ee8 commit cde5457

File tree

6 files changed

+82
-3
lines changed

6 files changed

+82
-3
lines changed

src/main/java/clap/server/adapter/inbound/web/admin/AddCategoryController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
@Tag(name = "카테고리 추가")
1919
@WebAdapter
2020
@RequiredArgsConstructor
21-
@RequestMapping("/api")
21+
@RequestMapping("/api/management")
2222
public class AddCategoryController {
2323
private final AddCategoryUsecase addCategoryUsecase;
2424

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package clap.server.adapter.inbound.web.admin;
2+
3+
import clap.server.adapter.inbound.security.SecurityUserDetails;
4+
import clap.server.adapter.inbound.web.dto.admin.UpdateCategoryRequest;
5+
import clap.server.application.port.inbound.admin.UpdateCategoryUsecase;
6+
import clap.server.common.annotation.architecture.WebAdapter;
7+
import io.swagger.v3.oas.annotations.Operation;
8+
import io.swagger.v3.oas.annotations.tags.Tag;
9+
import lombok.RequiredArgsConstructor;
10+
import org.springframework.security.access.annotation.Secured;
11+
import org.springframework.security.core.annotation.AuthenticationPrincipal;
12+
import org.springframework.web.bind.annotation.PatchMapping;
13+
import org.springframework.web.bind.annotation.RequestBody;
14+
import org.springframework.web.bind.annotation.RequestMapping;
15+
16+
@Tag(name = "카테고리 수정")
17+
@WebAdapter
18+
@RequiredArgsConstructor
19+
@RequestMapping("/api/management")
20+
public class UpdateCategoryController {
21+
private final UpdateCategoryUsecase updateCategoryUsecase;
22+
23+
@Operation(summary = "카테고리 수정")
24+
@PatchMapping("/categories/categoryId")
25+
@Secured("ROLE_ADMIN")
26+
public void updateCategory(@AuthenticationPrincipal SecurityUserDetails userInfo, Long categoryId,
27+
@RequestBody UpdateCategoryRequest updateCategoryRequest) {
28+
updateCategoryUsecase.updateCategory(userInfo.getUserId(), categoryId, updateCategoryRequest.name(), updateCategoryRequest.code());
29+
}
30+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package clap.server.adapter.inbound.web.dto.admin;
2+
3+
import jakarta.validation.constraints.NotBlank;
4+
import jakarta.validation.constraints.Pattern;
5+
import org.hibernate.validator.constraints.Length;
6+
7+
public record UpdateCategoryRequest(
8+
@NotBlank @Length(max = 20)
9+
String name,
10+
@NotBlank @Pattern(regexp = "^[A-Z]{1,2}$", message = "올바른 카테고리 코드 형식이 아닙니다.")
11+
String code
12+
) {
13+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package clap.server.application.port.inbound.admin;
2+
3+
public interface UpdateCategoryUsecase {
4+
void updateCategory(Long adminId, Long categoryId, String name, String code);
5+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package clap.server.application.service.admin;
2+
3+
import clap.server.application.port.inbound.admin.UpdateCategoryUsecase;
4+
import clap.server.application.port.outbound.member.LoadMemberPort;
5+
import clap.server.application.port.outbound.task.LoadCategoryPort;
6+
import clap.server.common.annotation.architecture.ApplicationService;
7+
import clap.server.domain.model.member.Member;
8+
import clap.server.exception.ApplicationException;
9+
import lombok.RequiredArgsConstructor;
10+
import org.springframework.transaction.annotation.Transactional;
11+
12+
import static clap.server.exception.code.MemberErrorCode.ACTIVE_MEMBER_NOT_FOUND;
13+
import static clap.server.exception.code.TaskErrorCode.CATEGORY_NOT_FOUND;
14+
15+
@ApplicationService
16+
@RequiredArgsConstructor
17+
public class UpdateCategoryService implements UpdateCategoryUsecase {
18+
private final LoadCategoryPort loadCategoryPort;
19+
private final LoadMemberPort loadMemberPort;
20+
21+
@Override
22+
@Transactional
23+
public void updateCategory(Long adminId, Long categoryId, String name, String code) {
24+
Member admin = loadMemberPort.findActiveMemberById(adminId).orElseThrow(() -> new ApplicationException(ACTIVE_MEMBER_NOT_FOUND));
25+
loadCategoryPort.findById(categoryId)
26+
.orElseThrow(() -> new ApplicationException(CATEGORY_NOT_FOUND))
27+
.updateCategory(admin, name, code);
28+
}
29+
}

src/main/java/clap/server/domain/model/task/Category.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,10 @@ public static Category createSubCategory(Member admin, Category mainCategory, St
4040
.build();
4141
}
4242

43-
public void updateMainCategory(Category mainCategory){
44-
this.mainCategory = mainCategory;
43+
public void updateCategory(Member admin, String code, String name){
44+
this.admin = admin;
45+
this.code = code;
46+
this.name = name;
4547
}
4648
}
4749

0 commit comments

Comments
 (0)