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 3117d3e3..862588d9 100644 --- a/src/main/java/clap/server/application/service/admin/DeleteMemberService.java +++ b/src/main/java/clap/server/application/service/admin/DeleteMemberService.java @@ -7,7 +7,9 @@ import clap.server.exception.ApplicationException; import clap.server.exception.code.MemberErrorCode; import lombok.RequiredArgsConstructor; +import org.hibernate.Hibernate; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; @Service @RequiredArgsConstructor @@ -15,11 +17,14 @@ public class DeleteMemberService implements DeleteMemberUsecase { private final LoadMemberPort loadMemberPort; private final CommandMemberPort commandMemberPort; + @Transactional @Override public void deleteMember(Long memberId) { Member member = loadMemberPort.findById(memberId) .orElseThrow(() -> new ApplicationException(MemberErrorCode.MEMBER_NOT_FOUND)); + Hibernate.initialize(member.getDepartment()); + member.setStatusDeleted(); commandMemberPort.save(member); 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 82ed06f4..13b51b22 100644 --- a/src/main/java/clap/server/domain/model/member/Member.java +++ b/src/main/java/clap/server/domain/model/member/Member.java @@ -9,6 +9,7 @@ import lombok.*; import lombok.experimental.SuperBuilder; + @Getter @SuperBuilder @NoArgsConstructor(access = AccessLevel.PROTECTED) @@ -23,6 +24,8 @@ public class Member extends BaseTime { private String imageUrl; private MemberStatus status; private String password; + private Department department; + public Member(MemberInfo memberInfo, Boolean agitNotificationEnabled, Boolean emailNotificationEnabled, Boolean kakaoworkNotificationEnabled, diff --git a/src/test/java/clap/server/TestDataFactory.java b/src/test/java/clap/server/TestDataFactory.java index e433b310..af8ce39f 100644 --- a/src/test/java/clap/server/TestDataFactory.java +++ b/src/test/java/clap/server/TestDataFactory.java @@ -1,10 +1,12 @@ package clap.server; import clap.server.adapter.inbound.web.dto.task.request.FilterTaskListRequest; +import clap.server.adapter.outbound.persistense.entity.member.constant.DepartmentStatus; import clap.server.adapter.outbound.persistense.entity.member.constant.MemberRole; import clap.server.adapter.outbound.persistense.entity.member.constant.MemberStatus; import clap.server.adapter.outbound.persistense.entity.task.constant.LabelColor; import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus; +import clap.server.domain.model.member.Department; import clap.server.domain.model.member.Member; import clap.server.domain.model.member.MemberInfo; import clap.server.domain.model.task.Category; @@ -18,39 +20,90 @@ public class TestDataFactory { public static Member createAdmin() { - return new Member(1L, createAdminInfo(), null, - true, true, true, - null, MemberStatus.ACTIVE, "1111"); + return Member.builder() + .memberId(1L) + .memberInfo(createAdminInfo()) + .admin(null) + .kakaoworkNotificationEnabled(true) + .agitNotificationEnabled(true) + .emailNotificationEnabled(true) + .imageUrl(null) + .status(MemberStatus.ACTIVE) + .password("1111") + .department(createDepartment()) + .build(); } + public static Member createManagerWithReviewer() { - return new Member(2L, createManagerWithReviewerInfo(), createAdmin(), - true, true, true, - null, MemberStatus.ACTIVE, "1111"); + return Member.builder() + .memberId(2L) + .memberInfo(createManagerWithReviewerInfo()) + .admin(createAdmin()) + .kakaoworkNotificationEnabled(true) + .agitNotificationEnabled(true) + .emailNotificationEnabled(true) + .imageUrl(null) + .status(MemberStatus.ACTIVE) + .password("1111") + .department(createDepartment()) + .build(); } + public static Member createManager() { - return new Member(3L, createManagerInfo(), createAdmin(), - true, true, true, - null, MemberStatus.ACTIVE, "1111"); + return Member.builder() + .memberId(3L) + .memberInfo(createManagerInfo()) + .admin(createAdmin()) + .kakaoworkNotificationEnabled(true) + .agitNotificationEnabled(true) + .emailNotificationEnabled(true) + .imageUrl(null) + .status(MemberStatus.ACTIVE) + .password("1111") + .department(createDepartment()) + .build(); } + public static Member createUser() { - return new Member(4L, createUserInfo(), createAdmin(), - true, true, true, - null, MemberStatus.ACTIVE, "1111"); + return Member.builder() + .memberId(4L) + .memberInfo(createUserInfo()) + .admin(createAdmin()) + .kakaoworkNotificationEnabled(true) + .agitNotificationEnabled(true) + .emailNotificationEnabled(true) + .imageUrl(null) + .status(MemberStatus.ACTIVE) + .password("1111") + .department(createDepartment()) + .build(); } - public static MemberInfo createAdminInfo(){ + public static MemberInfo createAdminInfo() { return new MemberInfo("홍길동(관리자)", "atom8426@naver.com", "atom.admin", false, null, MemberRole.ROLE_ADMIN, "인프라"); } - public static MemberInfo createManagerWithReviewerInfo(){ + + public static MemberInfo createManagerWithReviewerInfo() { return new MemberInfo("홍길동(리뷰어)", "atom8426@naver.com", "atom.manager", true, null, MemberRole.ROLE_MANAGER, "인프라"); } - public static MemberInfo createManagerInfo(){ + + public static MemberInfo createManagerInfo() { return new MemberInfo("홍길동(매니저)", "atom8426@naver.com", "atom.manager", false, null, MemberRole.ROLE_MANAGER, "인프라"); } - public static MemberInfo createUserInfo(){ + + public static MemberInfo createUserInfo() { return new MemberInfo("홍길동(사용자)", "atom8426@naver.com", "atom.user", false, null, MemberRole.ROLE_USER, "인프라"); } + public static Department createDepartment() { + return Department.builder() + .departmentId(1L) + .adminId(1L) + .name("IT 부서") + .status(DepartmentStatus.ACTIVE) + .build(); + } + public static Category createMainCategory() { return Category.builder() .categoryId(1L) @@ -100,7 +153,6 @@ public static Label createLabel() { .build(); } - public static PageImpl createTaskPage(List tasks) { return new PageImpl<>(tasks); }