Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@

import static com.tiki.server.auth.message.SuccessMessage.*;

import java.security.Principal;

@RestController
@RequiredArgsConstructor
@RequestMapping("api/v1/auth")
Expand Down
7 changes: 4 additions & 3 deletions src/main/java/com/tiki/server/auth/service/AuthService.java
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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) {
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/com/tiki/server/common/entity/Position.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ public void deleteAll(final List<DeletedDocument> deletedDocuments) {
deletedDocumentRepository.deleteAll(deletedDocuments);
}

public void deleteAllByTeamId(final long teamId) {
deletedDocumentRepository.deleteAllByTeamId(teamId);
}

private DeletedDocument create(final Document document) {
return DeletedDocument.of(document);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,6 @@ public interface DeletedDocumentRepository extends JpaRepository<DeletedDocument
Optional<DeletedDocument> findByIdAndTeamId(final long id, final long teamId);

List<DeletedDocument> findAllByTeamId(final long teamId);

void deleteAllByTeamId(final long teamId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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) {
Expand Down Expand Up @@ -75,6 +77,7 @@ public void delete(final long memberId, final long teamId, final List<Long> docu
memberTeamManagerFinder.findByMemberIdAndTeamId(memberId, teamId);
List<Document> documents = documentFinder.findAllByIdAndTeamId(documentIds, teamId);
dtbAdapter.deleteAllByDocuments(documentIds);
ndDeleter.deleteAllByDocuments(documentIds);
deletedDocumentAdapter.save(documents);
documentDeleter.deleteAll(documents);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,8 @@ public class FolderDeleter {
public void deleteAll(final List<Folder> folders) {
folderRepository.deleteAll(folders);
}

public void deleteAllByTeamId(final long teamId) {
folderRepository.deleteAllByTeamId(teamId);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,6 @@ public interface FolderRepository extends JpaRepository<Folder, Long> {
Optional<Folder> findByIdAndTeamId(final long id, final long teamId);

List<Folder> findAllByPathStartsWith(final String path);

void deleteAllByTeamId(final long teamId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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) {
Expand Down Expand Up @@ -112,6 +114,7 @@ private void deleteChildFolders(final Folder folder) {

private void deleteDocuments(final Folder folder) {
List<Document> documents = documentFinder.findAllByFolderId(folder.getId());
ndDeleter.deleteAllByDocuments(documents.stream().map(Document::getId).toList());
deletedDocumentAdapter.save(documents);
documentDeleter.deleteAll(documents);
}
Expand Down
18 changes: 18 additions & 0 deletions src/main/java/com/tiki/server/member/adapter/MemberDeleter.java
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
public enum SuccessMessage {

SUCCESS_CREATE_MEMBER("회원가입 성공"),
SUCCESS_CHANGING_PASSWORD("비밀번호 변경 성공");
SUCCESS_CHANGING_PASSWORD("비밀번호 변경 성공"),
SUCCESS_WITHDRAWAL("회원 탈퇴 성공"),;

private final String message;
}
21 changes: 21 additions & 0 deletions src/main/java/com/tiki/server/member/service/MemberService.java
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;

Expand All @@ -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) {
Expand All @@ -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<MemberTeamManager> memberTeamManagers = memberTeamManagerFinder.findAllByMemberIdOrderByCreatedAt(memberId);
for (MemberTeamManager memberTeamManager : memberTeamManagers) {
Team team = teamFinder.findById(memberTeamManager.getTeamId());
memberTeamManager.checkMemberIsNotAdmin();
List<Note> 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(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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, "권한이 없습니다."),

Expand Down
4 changes: 4 additions & 0 deletions src/main/java/com/tiki/server/note/adapter/NoteDeleter.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,8 @@ public class NoteDeleter {
public void deleteNoteByIds(final List<Long> noteIds){
noteIds.forEach(noteRepository::deleteById);
}

public void deleteAllByTeamId(final long teamId) {
noteRepository.deleteAllByTeamId(teamId);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,7 @@ List<Note> findByTeamIdAndCreatedAtBeforeOrderByCreatedDesc(@Param("createdAt")
List<Note> findByTeamIdAndCreatedAtAfterOrderByCreatedAtAsc(@Param("createdAt") final LocalDateTime createdAt,
final Pageable pageable, final long teamId);

List<Note> findAllByMemberIdAndTeamId(final long memberId, final long TeamId);
List<Note> findAllByMemberIdAndTeamId(final long memberId, final long teamId);

void deleteAllByTeamId(final long teamId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,8 @@ public void deleteByNoteIdAndDocumentId(final long noteId, final List<Long> docu
ndRepository.deleteByNoteIdAndDocumentId(noteId, documentId)
);
}

public void deleteAllByDocuments(final List<Long> documentIds) {
ndRepository.deleteAllByDocumentIdIn(documentIds);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,6 @@ public interface NDRepository extends JpaRepository<NDManager, Long> {
void deleteByNoteIdAndDocumentId(final long noteId, final long documentId);

List<NDManager> findAllByNoteId(final long noteId);

void deleteAllByDocumentIdIn(final List<Long> documentIds);
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -21,4 +23,8 @@ public void deleteByNoteIdAndTimeBlockId(final long noteId, final List<Long> tim
ntbRepository.deleteByNoteIdAndTimeBlockId(noteId, timeBlockId)
);
}

public void deleteAllByTimeBlock(final TimeBlock timeBlock) {
ntbRepository.deleteAllByTimeBlockId(timeBlock.getId());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,6 @@ public interface NTBRepository extends JpaRepository<NTBManager, Long> {
List<NTBManager> findAllByNoteId(final long noteId);

List<NTBManager> findAllByTimeBlockId(final long timeBlockId);

void deleteAllByTimeBlockId(final long timeBlockId);
}
40 changes: 37 additions & 3 deletions src/main/java/com/tiki/server/team/service/TeamService.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;

Expand All @@ -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
Expand Down Expand Up @@ -78,9 +94,10 @@ public void deleteTeam(final long memberId, final long teamId) {
checkIsAdmin(memberId, teamId);
List<MemberTeamManager> memberTeamManagers = memberTeamManagerFinder.findAllByTeamId(teamId);
memberTeamManagerDeleter.deleteAll(memberTeamManagers);
List<Document> documents = documentFinder.findAllByTeamId(teamId);
documentDeleter.deleteAll(documents);
timeBlockDeleter.deleteAllByTeamId(teamId);
deleteDocuments(teamId);
deleteTimeBlocks(teamId);
noteDeleter.deleteAllByTeamId(teamId);
folderDeleter.deleteAllByTeamId(teamId);
teamDeleter.deleteById(teamId);
}

Expand Down Expand Up @@ -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<Document> documents = documentFinder.findAllByTeamId(teamId);
documents.forEach(Document -> awsHandler.deleteFile(Document.getFileKey()));
List<DeletedDocument> 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<TimeBlock> timeBlocks = timeBlockFinder.findAllByTeamId(teamId);
timeBlocks.forEach(ntbDeleter::deleteAllByTimeBlock);
timeBlocks.forEach(dtbAdapter::deleteAllByTimeBlock);
timeBlockDeleter.deleteAllByTeamId(teamId);
}
}
Loading