Skip to content

Commit a0ebd44

Browse files
committed
CLAP-148 Feature : 카테고리 삭제 API 구현
<footer> - 관련: #120
1 parent d24fdf8 commit a0ebd44

File tree

5 files changed

+70
-2
lines changed

5 files changed

+70
-2
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package clap.server.adapter.inbound.web.admin;
2+
3+
import clap.server.adapter.inbound.security.SecurityUserDetails;
4+
import clap.server.application.port.inbound.admin.DeleteCategoryUsecase;
5+
import clap.server.common.annotation.architecture.WebAdapter;
6+
import io.swagger.v3.oas.annotations.Operation;
7+
import io.swagger.v3.oas.annotations.tags.Tag;
8+
import lombok.RequiredArgsConstructor;
9+
import org.springframework.security.access.annotation.Secured;
10+
import org.springframework.security.core.annotation.AuthenticationPrincipal;
11+
import org.springframework.web.bind.annotation.PatchMapping;
12+
import org.springframework.web.bind.annotation.PathVariable;
13+
import org.springframework.web.bind.annotation.RequestMapping;
14+
15+
@Tag(name = "카테고리 삭제")
16+
@WebAdapter
17+
@RequiredArgsConstructor
18+
@RequestMapping("/api/management")
19+
public class DeleteCategoryController {
20+
private final DeleteCategoryUsecase deleteCategoryUsecase;
21+
22+
@Operation(summary = "카테고리 삭제")
23+
@PatchMapping("/categories/{categoryId}")
24+
@Secured("ROLE_ADMIN")
25+
public void deleteCategory(@AuthenticationPrincipal SecurityUserDetails userInfo, @PathVariable Long categoryId) {
26+
deleteCategoryUsecase.deleteCategory(userInfo.getUserId(), categoryId);
27+
}
28+
}

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.springframework.security.access.annotation.Secured;
1111
import org.springframework.security.core.annotation.AuthenticationPrincipal;
1212
import org.springframework.web.bind.annotation.PatchMapping;
13+
import org.springframework.web.bind.annotation.PathVariable;
1314
import org.springframework.web.bind.annotation.RequestBody;
1415
import org.springframework.web.bind.annotation.RequestMapping;
1516

@@ -21,9 +22,9 @@ public class UpdateCategoryController {
2122
private final UpdateCategoryUsecase updateCategoryUsecase;
2223

2324
@Operation(summary = "카테고리 수정")
24-
@PatchMapping("/categories/categoryId")
25+
@PatchMapping("/categories/{categoryId}")
2526
@Secured("ROLE_ADMIN")
26-
public void updateCategory(@AuthenticationPrincipal SecurityUserDetails userInfo, Long categoryId,
27+
public void updateCategory(@AuthenticationPrincipal SecurityUserDetails userInfo, @PathVariable Long categoryId,
2728
@RequestBody UpdateCategoryRequest updateCategoryRequest) {
2829
updateCategoryUsecase.updateCategory(userInfo.getUserId(), categoryId, updateCategoryRequest.name(), updateCategoryRequest.code());
2930
}
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 DeleteCategoryUsecase {
4+
void deleteCategory(Long adminId, Long categoryId);
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.DeleteCategoryUsecase;
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 DeleteCategoryService implements DeleteCategoryUsecase {
18+
private final LoadCategoryPort loadCategoryPort;
19+
private final LoadMemberPort loadMemberPort;
20+
21+
@Override
22+
@Transactional
23+
public void deleteCategory(Long adminId, Long categoryId) {
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+
.deleteCategory(admin);
28+
}
29+
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,5 +45,10 @@ public void updateCategory(Member admin, String code, String name){
4545
this.code = code;
4646
this.name = name;
4747
}
48+
49+
public void deleteCategory(Member admin) {
50+
this.admin = admin;
51+
this.isDeleted = true;
52+
}
4853
}
4954

0 commit comments

Comments
 (0)