From 68eccc2c097257bf47ddfdcd5b0b120e29335ad5 Mon Sep 17 00:00:00 2001 From: Sihun23 Date: Wed, 29 Jan 2025 19:18:24 +0900 Subject: [PATCH 1/2] =?UTF-8?q?CLAP-166=20feat:=ED=9A=8C=EC=9B=90=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=20API=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/admin/DeleteMemberController.java | 26 +++++++++++++++++++ .../inbound/admin/DeleteMemberUsecase.java | 5 ++++ .../port/inbound/domain/MemberService.java | 9 +++++++ .../service/admin/DeleteMemberService.java | 18 +++++++++++++ .../server/domain/model/member/Member.java | 4 +++ 5 files changed, 62 insertions(+) create mode 100644 src/main/java/clap/server/adapter/inbound/web/admin/DeleteMemberController.java create mode 100644 src/main/java/clap/server/application/port/inbound/admin/DeleteMemberUsecase.java create mode 100644 src/main/java/clap/server/application/service/admin/DeleteMemberService.java diff --git a/src/main/java/clap/server/adapter/inbound/web/admin/DeleteMemberController.java b/src/main/java/clap/server/adapter/inbound/web/admin/DeleteMemberController.java new file mode 100644 index 00000000..91f89b1f --- /dev/null +++ b/src/main/java/clap/server/adapter/inbound/web/admin/DeleteMemberController.java @@ -0,0 +1,26 @@ +package clap.server.adapter.inbound.web.admin; + +import clap.server.application.port.inbound.admin.DeleteMemberUsecase; +import clap.server.common.annotation.architecture.WebAdapter; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.security.access.annotation.Secured; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; + +@Tag(name = "05. Admin") +@WebAdapter +@RequiredArgsConstructor +@RequestMapping("/api/managements") +public class DeleteMemberController { + private final DeleteMemberUsecase deleteMemberUsecase; + + @Operation(summary = "회원 삭제 API") + @Secured("ROLE_ADMIN") + @PatchMapping("/members/{memberId}") + public void deleteMember(@PathVariable Long memberId) { + deleteMemberUsecase.deleteMember(memberId); + } +} diff --git a/src/main/java/clap/server/application/port/inbound/admin/DeleteMemberUsecase.java b/src/main/java/clap/server/application/port/inbound/admin/DeleteMemberUsecase.java new file mode 100644 index 00000000..b28091da --- /dev/null +++ b/src/main/java/clap/server/application/port/inbound/admin/DeleteMemberUsecase.java @@ -0,0 +1,5 @@ +package clap.server.application.port.inbound.admin; + +public interface DeleteMemberUsecase { + void deleteMember(Long memberId); +} \ No newline at end of file diff --git a/src/main/java/clap/server/application/port/inbound/domain/MemberService.java b/src/main/java/clap/server/application/port/inbound/domain/MemberService.java index ac2fb651..dc020073 100644 --- a/src/main/java/clap/server/application/port/inbound/domain/MemberService.java +++ b/src/main/java/clap/server/application/port/inbound/domain/MemberService.java @@ -1,5 +1,6 @@ package clap.server.application.port.inbound.domain; +import clap.server.application.port.outbound.member.CommandMemberPort; import clap.server.application.port.outbound.member.LoadMemberPort; import clap.server.domain.model.member.Member; import clap.server.exception.ApplicationException; @@ -13,6 +14,8 @@ @RequiredArgsConstructor public class MemberService { private final LoadMemberPort loadMemberPort; + private final CommandMemberPort commandMemberPort; + public Member findById(Long memberId) { return loadMemberPort.findById(memberId).orElseThrow( @@ -27,4 +30,10 @@ public Member findActiveMember(Long memberId) { public List findReviewers() { return loadMemberPort.findReviewers(); } + + public void deleteMember(Long memberId) { + Member member = findById(memberId); + member.setStatusDeleted(); + commandMemberPort.save(member); + } } diff --git a/src/main/java/clap/server/application/service/admin/DeleteMemberService.java b/src/main/java/clap/server/application/service/admin/DeleteMemberService.java new file mode 100644 index 00000000..50eb4342 --- /dev/null +++ b/src/main/java/clap/server/application/service/admin/DeleteMemberService.java @@ -0,0 +1,18 @@ +package clap.server.application.service.admin; + +import clap.server.application.port.inbound.admin.DeleteMemberUsecase; +import clap.server.application.port.inbound.domain.MemberService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class DeleteMemberService implements DeleteMemberUsecase { + private final MemberService memberService; + + @Override + public void deleteMember(Long memberId) { + memberService.deleteMember(memberId); + } +} + diff --git a/src/main/java/clap/server/domain/model/member/Member.java b/src/main/java/clap/server/domain/model/member/Member.java index f55b3fcc..62cd56b9 100644 --- a/src/main/java/clap/server/domain/model/member/Member.java +++ b/src/main/java/clap/server/domain/model/member/Member.java @@ -57,4 +57,8 @@ public String getNickname() { public boolean isReviewer() { return this.memberInfo != null && this.memberInfo.isReviewer(); } + + public void setStatusDeleted() { + this.status = MemberStatus.DELETED; + } } From aab1fa53796ece5333b9d7bd6d198b46342f4572 Mon Sep 17 00:00:00 2001 From: Sihun23 Date: Wed, 29 Jan 2025 23:04:52 +0900 Subject: [PATCH 2/2] =?UTF-8?q?CLAP-166=20fix:=EC=82=AD=EC=A0=9C=EC=9E=91?= =?UTF-8?q?=EC=97=85=20memberservice->deletememberservice=EB=A1=9C=20?= =?UTF-8?q?=EC=9C=84=EC=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../port/inbound/domain/MemberService.java | 5 ----- .../service/admin/DeleteMemberService.java | 16 +++++++++++++--- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/main/java/clap/server/application/port/inbound/domain/MemberService.java b/src/main/java/clap/server/application/port/inbound/domain/MemberService.java index dc020073..7a6684c9 100644 --- a/src/main/java/clap/server/application/port/inbound/domain/MemberService.java +++ b/src/main/java/clap/server/application/port/inbound/domain/MemberService.java @@ -31,9 +31,4 @@ public List findReviewers() { return loadMemberPort.findReviewers(); } - public void deleteMember(Long memberId) { - Member member = findById(memberId); - member.setStatusDeleted(); - commandMemberPort.save(member); - } } diff --git a/src/main/java/clap/server/application/service/admin/DeleteMemberService.java b/src/main/java/clap/server/application/service/admin/DeleteMemberService.java index 50eb4342..8a08105a 100644 --- a/src/main/java/clap/server/application/service/admin/DeleteMemberService.java +++ b/src/main/java/clap/server/application/service/admin/DeleteMemberService.java @@ -2,17 +2,27 @@ import clap.server.application.port.inbound.admin.DeleteMemberUsecase; import clap.server.application.port.inbound.domain.MemberService; +import clap.server.application.port.outbound.member.CommandMemberPort; +import clap.server.application.port.outbound.member.LoadMemberPort; +import clap.server.domain.model.member.Member; +import clap.server.exception.ApplicationException; +import clap.server.exception.code.MemberErrorCode; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @Service @RequiredArgsConstructor public class DeleteMemberService implements DeleteMemberUsecase { - private final MemberService memberService; + private final LoadMemberPort loadMemberPort; // 조회 작업용 Port + private final CommandMemberPort commandMemberPort; // 데이터 변경 작업용 Port @Override public void deleteMember(Long memberId) { - memberService.deleteMember(memberId); + Member member = loadMemberPort.findById(memberId) + .orElseThrow(() -> new ApplicationException(MemberErrorCode.MEMBER_NOT_FOUND)); + + member.setStatusDeleted(); + + commandMemberPort.save(member); } } -