diff --git a/src/main/java/com/tiki/server/auth/controller/AuthController.java b/src/main/java/com/tiki/server/auth/controller/AuthController.java index 2175d28e..4031d92b 100644 --- a/src/main/java/com/tiki/server/auth/controller/AuthController.java +++ b/src/main/java/com/tiki/server/auth/controller/AuthController.java @@ -21,6 +21,8 @@ import static com.tiki.server.auth.message.SuccessMessage.*; +import java.security.Principal; + @RestController @RequiredArgsConstructor @RequestMapping("api/v1/auth") diff --git a/src/main/java/com/tiki/server/auth/service/AuthService.java b/src/main/java/com/tiki/server/auth/service/AuthService.java index 8356da3d..e669d88f 100644 --- a/src/main/java/com/tiki/server/auth/service/AuthService.java +++ b/src/main/java/com/tiki/server/auth/service/AuthService.java @@ -44,7 +44,7 @@ public class AuthService { private final PasswordEncoder passwordEncoder; public SignInGetResponse signIn(final SignInRequest request) { - Member member = checkMemberEmpty(request); + Member member = checkMemberEmpty(request.email()); checkPasswordMatching(member, request.password()); Authentication authentication = createAuthentication(member.getId()); String accessToken = jwtGenerator.generateAccessToken(authentication); @@ -64,8 +64,9 @@ public ReissueGetResponse reissueToken(final HttpServletRequest request) { return ReissueGetResponse.from(accessToken); } - private Member checkMemberEmpty(final SignInRequest request) { - return memberFinder.findByEmail(Email.from(request.email())).orElseThrow(() -> new MemberException(INVALID_MEMBER)); + private Member checkMemberEmpty(final String email) { + return memberFinder.findByEmail(Email.from(email)) + .orElseThrow(() -> new MemberException(INVALID_MEMBER)); } private void checkTokenEmpty(final String token) { diff --git a/src/main/java/com/tiki/server/common/entity/Position.java b/src/main/java/com/tiki/server/common/entity/Position.java index 7db100b8..54517710 100644 --- a/src/main/java/com/tiki/server/common/entity/Position.java +++ b/src/main/java/com/tiki/server/common/entity/Position.java @@ -23,4 +23,8 @@ public static Position getAccessiblePosition(final String type) { default -> throw new TimeBlockException(INVALID_TYPE); }; } + + public static boolean isAdmin(final Position position) { + return position == ADMIN; + } } diff --git a/src/main/java/com/tiki/server/document/adapter/DeletedDocumentAdapter.java b/src/main/java/com/tiki/server/document/adapter/DeletedDocumentAdapter.java index 6b17e8a6..334ada86 100644 --- a/src/main/java/com/tiki/server/document/adapter/DeletedDocumentAdapter.java +++ b/src/main/java/com/tiki/server/document/adapter/DeletedDocumentAdapter.java @@ -36,6 +36,10 @@ public void deleteAll(final List deletedDocuments) { deletedDocumentRepository.deleteAll(deletedDocuments); } + public void deleteAllByTeamId(final long teamId) { + deletedDocumentRepository.deleteAllByTeamId(teamId); + } + private DeletedDocument create(final Document document) { return DeletedDocument.of(document); } diff --git a/src/main/java/com/tiki/server/document/repository/DeletedDocumentRepository.java b/src/main/java/com/tiki/server/document/repository/DeletedDocumentRepository.java index 52dff8bd..e5ec516e 100644 --- a/src/main/java/com/tiki/server/document/repository/DeletedDocumentRepository.java +++ b/src/main/java/com/tiki/server/document/repository/DeletedDocumentRepository.java @@ -12,4 +12,6 @@ public interface DeletedDocumentRepository extends JpaRepository findByIdAndTeamId(final long id, final long teamId); List findAllByTeamId(final long teamId); + + void deleteAllByTeamId(final long teamId); } diff --git a/src/main/java/com/tiki/server/document/service/DocumentService.java b/src/main/java/com/tiki/server/document/service/DocumentService.java index 4f05c92b..20d62b9d 100644 --- a/src/main/java/com/tiki/server/document/service/DocumentService.java +++ b/src/main/java/com/tiki/server/document/service/DocumentService.java @@ -26,6 +26,7 @@ import com.tiki.server.folder.entity.Folder; import com.tiki.server.memberteammanager.adapter.MemberTeamManagerFinder; import com.tiki.server.memberteammanager.entity.MemberTeamManager; +import com.tiki.server.notedocumentmanager.adapter.NDDeleter; import com.tiki.server.team.adapter.TeamFinder; import com.tiki.server.team.entity.Team; @@ -44,6 +45,7 @@ public class DocumentService { private final DeletedDocumentAdapter deletedDocumentAdapter; private final TeamFinder teamFinder; private final DTBAdapter dtbAdapter; + private final NDDeleter ndDeleter; private final AwsHandler awsHandler; public DocumentsGetResponse getAllDocuments(final long memberId, final long teamId, final String type) { @@ -75,6 +77,7 @@ public void delete(final long memberId, final long teamId, final List docu memberTeamManagerFinder.findByMemberIdAndTeamId(memberId, teamId); List documents = documentFinder.findAllByIdAndTeamId(documentIds, teamId); dtbAdapter.deleteAllByDocuments(documentIds); + ndDeleter.deleteAllByDocuments(documentIds); deletedDocumentAdapter.save(documents); documentDeleter.deleteAll(documents); } diff --git a/src/main/java/com/tiki/server/folder/adapter/FolderDeleter.java b/src/main/java/com/tiki/server/folder/adapter/FolderDeleter.java index aecb7c68..bb03c979 100644 --- a/src/main/java/com/tiki/server/folder/adapter/FolderDeleter.java +++ b/src/main/java/com/tiki/server/folder/adapter/FolderDeleter.java @@ -17,4 +17,8 @@ public class FolderDeleter { public void deleteAll(final List folders) { folderRepository.deleteAll(folders); } + + public void deleteAllByTeamId(final long teamId) { + folderRepository.deleteAllByTeamId(teamId); + } } diff --git a/src/main/java/com/tiki/server/folder/repository/FolderRepository.java b/src/main/java/com/tiki/server/folder/repository/FolderRepository.java index 8b184542..95d46213 100644 --- a/src/main/java/com/tiki/server/folder/repository/FolderRepository.java +++ b/src/main/java/com/tiki/server/folder/repository/FolderRepository.java @@ -16,4 +16,6 @@ public interface FolderRepository extends JpaRepository { Optional findByIdAndTeamId(final long id, final long teamId); List findAllByPathStartsWith(final String path); + + void deleteAllByTeamId(final long teamId); } diff --git a/src/main/java/com/tiki/server/folder/service/FolderService.java b/src/main/java/com/tiki/server/folder/service/FolderService.java index bdb1efb2..e3355c79 100644 --- a/src/main/java/com/tiki/server/folder/service/FolderService.java +++ b/src/main/java/com/tiki/server/folder/service/FolderService.java @@ -22,6 +22,7 @@ import com.tiki.server.folder.entity.Folder; import com.tiki.server.folder.exception.FolderException; import com.tiki.server.memberteammanager.adapter.MemberTeamManagerFinder; +import com.tiki.server.notedocumentmanager.adapter.NDDeleter; import lombok.RequiredArgsConstructor; @@ -37,6 +38,7 @@ public class FolderService { private final DocumentDeleter documentDeleter; private final DeletedDocumentAdapter deletedDocumentAdapter; private final FolderDeleter folderDeleter; + private final NDDeleter ndDeleter; public FoldersGetResponse get(final long memberId, final long teamId, final Long folderId) { @@ -112,6 +114,7 @@ private void deleteChildFolders(final Folder folder) { private void deleteDocuments(final Folder folder) { List documents = documentFinder.findAllByFolderId(folder.getId()); + ndDeleter.deleteAllByDocuments(documents.stream().map(Document::getId).toList()); deletedDocumentAdapter.save(documents); documentDeleter.deleteAll(documents); } diff --git a/src/main/java/com/tiki/server/member/adapter/MemberDeleter.java b/src/main/java/com/tiki/server/member/adapter/MemberDeleter.java new file mode 100644 index 00000000..ecda6545 --- /dev/null +++ b/src/main/java/com/tiki/server/member/adapter/MemberDeleter.java @@ -0,0 +1,18 @@ +package com.tiki.server.member.adapter; + +import com.tiki.server.common.support.RepositoryAdapter; +import com.tiki.server.member.entity.Member; +import com.tiki.server.member.repository.MemberRepository; + +import lombok.RequiredArgsConstructor; + +@RepositoryAdapter +@RequiredArgsConstructor +public class MemberDeleter { + + private final MemberRepository memberRepository; + + public void delete(final Member member) { + memberRepository.delete(member); + } +} diff --git a/src/main/java/com/tiki/server/member/controller/MemberController.java b/src/main/java/com/tiki/server/member/controller/MemberController.java index 8190560d..6b711eee 100644 --- a/src/main/java/com/tiki/server/member/controller/MemberController.java +++ b/src/main/java/com/tiki/server/member/controller/MemberController.java @@ -17,6 +17,7 @@ import static com.tiki.server.member.message.SuccessMessage.SUCCESS_CHANGING_PASSWORD; import static com.tiki.server.member.message.SuccessMessage.SUCCESS_CREATE_MEMBER; +import static com.tiki.server.member.message.SuccessMessage.SUCCESS_WITHDRAWAL; import static com.tiki.server.team.message.SuccessMessage.SUCCESS_GET_JOINED_TEAM; @RestController @@ -54,4 +55,12 @@ public SuccessResponse changePassword( memberService.changePassword(passwordChangeRequest); return SuccessResponse.success(SUCCESS_CHANGING_PASSWORD.getMessage()); } + + @ResponseStatus(HttpStatus.OK) + @GetMapping("/withdrawal") + public SuccessResponse withdrawal(final Principal principal) { + long memberId = Long.parseLong(principal.getName()); + memberService.withdrawal(memberId); + return SuccessResponse.success(SUCCESS_WITHDRAWAL.getMessage()); + } } diff --git a/src/main/java/com/tiki/server/member/message/SuccessMessage.java b/src/main/java/com/tiki/server/member/message/SuccessMessage.java index a99abbe8..e7212ab3 100644 --- a/src/main/java/com/tiki/server/member/message/SuccessMessage.java +++ b/src/main/java/com/tiki/server/member/message/SuccessMessage.java @@ -8,7 +8,8 @@ public enum SuccessMessage { SUCCESS_CREATE_MEMBER("회원가입 성공"), - SUCCESS_CHANGING_PASSWORD("비밀번호 변경 성공"); + SUCCESS_CHANGING_PASSWORD("비밀번호 변경 성공"), + SUCCESS_WITHDRAWAL("회원 탈퇴 성공"),; private final String message; } diff --git a/src/main/java/com/tiki/server/member/service/MemberService.java b/src/main/java/com/tiki/server/member/service/MemberService.java index be4fdd4e..ee32ca9d 100644 --- a/src/main/java/com/tiki/server/member/service/MemberService.java +++ b/src/main/java/com/tiki/server/member/service/MemberService.java @@ -1,5 +1,6 @@ package com.tiki.server.member.service; +import com.tiki.server.member.adapter.MemberDeleter; import com.tiki.server.member.adapter.MemberFinder; import com.tiki.server.member.adapter.MemberSaver; import com.tiki.server.member.dto.request.PasswordChangeRequest; @@ -8,8 +9,11 @@ import com.tiki.server.email.Email; import com.tiki.server.member.entity.Member; import com.tiki.server.member.exception.MemberException; +import com.tiki.server.memberteammanager.adapter.MemberTeamManagerDeleter; import com.tiki.server.memberteammanager.adapter.MemberTeamManagerFinder; import com.tiki.server.memberteammanager.entity.MemberTeamManager; +import com.tiki.server.note.adapter.NoteFinder; +import com.tiki.server.note.entity.Note; import com.tiki.server.team.adapter.TeamFinder; import com.tiki.server.team.entity.Team; @@ -32,9 +36,12 @@ public class MemberService { private final MemberSaver memberSaver; private final MemberFinder memberFinder; + private final MemberDeleter memberDeleter; private final PasswordEncoder passwordEncoder; private final TeamFinder teamFinder; + private final NoteFinder noteFinder; private final MemberTeamManagerFinder memberTeamManagerFinder; + private final MemberTeamManagerDeleter memberTeamManagerDeleter; @Transactional public void signUp(final MemberProfileCreateRequest request) { @@ -59,6 +66,20 @@ public void changePassword(final PasswordChangeRequest request) { member.resetPassword(passwordEncoder.encode(request.password())); } + @Transactional + public void withdrawal(final long memberId) { + Member member = memberFinder.findById(memberId); + List memberTeamManagers = memberTeamManagerFinder.findAllByMemberIdOrderByCreatedAt(memberId); + for (MemberTeamManager memberTeamManager : memberTeamManagers) { + Team team = teamFinder.findById(memberTeamManager.getTeamId()); + memberTeamManager.checkMemberIsNotAdmin(); + List notes = noteFinder.findAllByMemberIdAndTeamId(memberId, team.getId()); + notes.forEach(Note::deleteMemberDependency); + memberTeamManagerDeleter.delete(memberTeamManager); + } + memberDeleter.delete(member); + } + private Member createMember(final MemberProfileCreateRequest request) { return Member.of( request.email(), diff --git a/src/main/java/com/tiki/server/memberteammanager/entity/MemberTeamManager.java b/src/main/java/com/tiki/server/memberteammanager/entity/MemberTeamManager.java index 3cd56074..e6e34d35 100644 --- a/src/main/java/com/tiki/server/memberteammanager/entity/MemberTeamManager.java +++ b/src/main/java/com/tiki/server/memberteammanager/entity/MemberTeamManager.java @@ -62,6 +62,12 @@ public void checkMemberAccessible(final Position accesiblePosition) { } } + public void checkMemberIsNotAdmin() { + if (Position.isAdmin(this.position)) { + throw new MemberTeamManagerException(CANNOT_QUIT_TEAM); + } + } + public void updateName(final String name){ this.name = name; } diff --git a/src/main/java/com/tiki/server/memberteammanager/message/ErrorCode.java b/src/main/java/com/tiki/server/memberteammanager/message/ErrorCode.java index 0134d070..b7e40816 100644 --- a/src/main/java/com/tiki/server/memberteammanager/message/ErrorCode.java +++ b/src/main/java/com/tiki/server/memberteammanager/message/ErrorCode.java @@ -13,7 +13,9 @@ @AllArgsConstructor public enum ErrorCode { - CONFLICT_TEAM_MEMBER(BAD_REQUEST,"이미 존재하는 팀원입니다"), + CONFLICT_TEAM_MEMBER(BAD_REQUEST, "이미 존재하는 팀원입니다."), + CANNOT_QUIT_TEAM(BAD_REQUEST, "팀을 탈퇴할 수 없습니다."), + /* 403 FORBIDDEN : 권한 없음 */ INVALID_AUTHORIZATION(FORBIDDEN, "권한이 없습니다."), diff --git a/src/main/java/com/tiki/server/note/adapter/NoteDeleter.java b/src/main/java/com/tiki/server/note/adapter/NoteDeleter.java index 1080645c..be7dbfda 100644 --- a/src/main/java/com/tiki/server/note/adapter/NoteDeleter.java +++ b/src/main/java/com/tiki/server/note/adapter/NoteDeleter.java @@ -15,4 +15,8 @@ public class NoteDeleter { public void deleteNoteByIds(final List noteIds){ noteIds.forEach(noteRepository::deleteById); } + + public void deleteAllByTeamId(final long teamId) { + noteRepository.deleteAllByTeamId(teamId); + } } diff --git a/src/main/java/com/tiki/server/note/repository/NoteRepository.java b/src/main/java/com/tiki/server/note/repository/NoteRepository.java index e8e6ab54..72dd3cc2 100644 --- a/src/main/java/com/tiki/server/note/repository/NoteRepository.java +++ b/src/main/java/com/tiki/server/note/repository/NoteRepository.java @@ -21,5 +21,7 @@ List findByTeamIdAndCreatedAtBeforeOrderByCreatedDesc(@Param("createdAt") List findByTeamIdAndCreatedAtAfterOrderByCreatedAtAsc(@Param("createdAt") final LocalDateTime createdAt, final Pageable pageable, final long teamId); - List findAllByMemberIdAndTeamId(final long memberId, final long TeamId); + List findAllByMemberIdAndTeamId(final long memberId, final long teamId); + + void deleteAllByTeamId(final long teamId); } diff --git a/src/main/java/com/tiki/server/notedocumentmanager/adapter/NDDeleter.java b/src/main/java/com/tiki/server/notedocumentmanager/adapter/NDDeleter.java index ac63ea35..bc08829f 100644 --- a/src/main/java/com/tiki/server/notedocumentmanager/adapter/NDDeleter.java +++ b/src/main/java/com/tiki/server/notedocumentmanager/adapter/NDDeleter.java @@ -21,4 +21,8 @@ public void deleteByNoteIdAndDocumentId(final long noteId, final List docu ndRepository.deleteByNoteIdAndDocumentId(noteId, documentId) ); } + + public void deleteAllByDocuments(final List documentIds) { + ndRepository.deleteAllByDocumentIdIn(documentIds); + } } diff --git a/src/main/java/com/tiki/server/notedocumentmanager/repository/NDRepository.java b/src/main/java/com/tiki/server/notedocumentmanager/repository/NDRepository.java index f924cc1f..1c88b933 100644 --- a/src/main/java/com/tiki/server/notedocumentmanager/repository/NDRepository.java +++ b/src/main/java/com/tiki/server/notedocumentmanager/repository/NDRepository.java @@ -12,4 +12,6 @@ public interface NDRepository extends JpaRepository { void deleteByNoteIdAndDocumentId(final long noteId, final long documentId); List findAllByNoteId(final long noteId); + + void deleteAllByDocumentIdIn(final List documentIds); } diff --git a/src/main/java/com/tiki/server/notetimeblockmanager/adapter/NTBDeleter.java b/src/main/java/com/tiki/server/notetimeblockmanager/adapter/NTBDeleter.java index 13269f49..ad0af86c 100644 --- a/src/main/java/com/tiki/server/notetimeblockmanager/adapter/NTBDeleter.java +++ b/src/main/java/com/tiki/server/notetimeblockmanager/adapter/NTBDeleter.java @@ -2,6 +2,8 @@ import com.tiki.server.common.support.RepositoryAdapter; import com.tiki.server.notetimeblockmanager.repository.NTBRepository; +import com.tiki.server.timeblock.entity.TimeBlock; + import lombok.RequiredArgsConstructor; import java.util.List; @@ -21,4 +23,8 @@ public void deleteByNoteIdAndTimeBlockId(final long noteId, final List tim ntbRepository.deleteByNoteIdAndTimeBlockId(noteId, timeBlockId) ); } + + public void deleteAllByTimeBlock(final TimeBlock timeBlock) { + ntbRepository.deleteAllByTimeBlockId(timeBlock.getId()); + } } diff --git a/src/main/java/com/tiki/server/notetimeblockmanager/repository/NTBRepository.java b/src/main/java/com/tiki/server/notetimeblockmanager/repository/NTBRepository.java index b6a70e8e..281c3eb9 100644 --- a/src/main/java/com/tiki/server/notetimeblockmanager/repository/NTBRepository.java +++ b/src/main/java/com/tiki/server/notetimeblockmanager/repository/NTBRepository.java @@ -14,4 +14,6 @@ public interface NTBRepository extends JpaRepository { List findAllByNoteId(final long noteId); List findAllByTimeBlockId(final long timeBlockId); + + void deleteAllByTimeBlockId(final long timeBlockId); } diff --git a/src/main/java/com/tiki/server/team/service/TeamService.java b/src/main/java/com/tiki/server/team/service/TeamService.java index 46c8fc05..0109ad36 100644 --- a/src/main/java/com/tiki/server/team/service/TeamService.java +++ b/src/main/java/com/tiki/server/team/service/TeamService.java @@ -4,12 +4,19 @@ import java.util.List; +import com.tiki.server.document.adapter.DeletedDocumentAdapter; import com.tiki.server.document.adapter.DocumentDeleter; import com.tiki.server.document.adapter.DocumentFinder; +import com.tiki.server.document.entity.DeletedDocument; import com.tiki.server.document.entity.Document; +import com.tiki.server.documenttimeblockmanager.adapter.DTBAdapter; import com.tiki.server.external.util.AwsHandler; +import com.tiki.server.folder.adapter.FolderDeleter; import com.tiki.server.memberteammanager.adapter.MemberTeamManagerDeleter; import com.tiki.server.memberteammanager.adapter.MemberTeamManagerFinder; +import com.tiki.server.note.adapter.NoteDeleter; +import com.tiki.server.notedocumentmanager.adapter.NDDeleter; +import com.tiki.server.notetimeblockmanager.adapter.NTBDeleter; import com.tiki.server.team.adapter.TeamDeleter; import com.tiki.server.team.adapter.TeamFinder; import com.tiki.server.team.dto.request.TeamInformUpdateServiceRequest; @@ -33,6 +40,8 @@ import com.tiki.server.team.entity.Category; import com.tiki.server.team.entity.Team; import com.tiki.server.timeblock.adapter.TimeBlockDeleter; +import com.tiki.server.timeblock.adapter.TimeBlockFinder; +import com.tiki.server.timeblock.entity.TimeBlock; import lombok.RequiredArgsConstructor; @@ -47,10 +56,17 @@ public class TeamService { private final MemberFinder memberFinder; private final DocumentFinder documentFinder; private final DocumentDeleter documentDeleter; + private final TimeBlockFinder timeBlockFinder; private final TimeBlockDeleter timeBlockDeleter; private final MemberTeamManagerFinder memberTeamManagerFinder; private final MemberTeamManagerDeleter memberTeamManagerDeleter; private final MemberTeamManagerSaver memberTeamManagerSaver; + private final DTBAdapter dtbAdapter; + private final NTBDeleter ntbDeleter; + private final NDDeleter ndDeleter; + private final DeletedDocumentAdapter deletedDocumentAdapter; + private final FolderDeleter folderDeleter; + private final NoteDeleter noteDeleter; private final AwsHandler awsHandler; @Transactional @@ -78,9 +94,10 @@ public void deleteTeam(final long memberId, final long teamId) { checkIsAdmin(memberId, teamId); List memberTeamManagers = memberTeamManagerFinder.findAllByTeamId(teamId); memberTeamManagerDeleter.deleteAll(memberTeamManagers); - List documents = documentFinder.findAllByTeamId(teamId); - documentDeleter.deleteAll(documents); - timeBlockDeleter.deleteAllByTeamId(teamId); + deleteDocuments(teamId); + deleteTimeBlocks(teamId); + noteDeleter.deleteAllByTeamId(teamId); + folderDeleter.deleteAllByTeamId(teamId); teamDeleter.deleteById(teamId); } @@ -131,4 +148,21 @@ private MemberTeamManager checkIsAdmin(final long memberId, final long teamId) { accessMember.checkMemberAccessible(ADMIN); return accessMember; } + + private void deleteDocuments(final long teamId) { + List documents = documentFinder.findAllByTeamId(teamId); + documents.forEach(Document -> awsHandler.deleteFile(Document.getFileKey())); + List deletedDocuments = deletedDocumentAdapter.get(teamId); + deletedDocuments.forEach(DeletedDocument -> awsHandler.deleteFile(DeletedDocument.getFileKey())); + deletedDocumentAdapter.deleteAllByTeamId(teamId); + ndDeleter.deleteAllByDocuments(documents.stream().map(Document::getId).toList()); + documentDeleter.deleteAll(documents); + } + + private void deleteTimeBlocks(final long teamId) { + List timeBlocks = timeBlockFinder.findAllByTeamId(teamId); + timeBlocks.forEach(ntbDeleter::deleteAllByTimeBlock); + timeBlocks.forEach(dtbAdapter::deleteAllByTimeBlock); + timeBlockDeleter.deleteAllByTeamId(teamId); + } } diff --git a/src/main/java/com/tiki/server/timeblock/service/TimeBlockService.java b/src/main/java/com/tiki/server/timeblock/service/TimeBlockService.java index a5d1082a..792cd482 100644 --- a/src/main/java/com/tiki/server/timeblock/service/TimeBlockService.java +++ b/src/main/java/com/tiki/server/timeblock/service/TimeBlockService.java @@ -1,5 +1,6 @@ package com.tiki.server.timeblock.service; +import com.tiki.server.notetimeblockmanager.adapter.NTBDeleter; import com.tiki.server.timeblock.dto.request.TimeBlockUpdateRequest; import com.tiki.server.timeblock.service.dto.response.AllTimeBlockServiceResponse; import java.util.List; @@ -47,6 +48,7 @@ public class TimeBlockService { private final DTBAdapter dtbAdapter; private final NTBFinder ntbFinder; private final NoteFinder noteFinder; + private final NTBDeleter ntbDeleter; @Transactional public TimeBlockCreateResponse createTimeBlock( @@ -121,6 +123,7 @@ public void deleteTimeBlock(final long memberId, final long teamId, final long t TimeBlock timeBlock = timeBlockFinder.findByIdAndTeamId(timeBlockId, teamId); memberTeamManager.checkMemberAccessible(timeBlock.getAccessiblePosition()); dtbAdapter.deleteAllByTimeBlock(timeBlock); + ntbDeleter.deleteAllByTimeBlock(timeBlock); timeBlockDeleter.deleteById(timeBlock.getId()); }