diff --git a/src/main/java/treehouse/server/api/invitation/business/InvitationService.java b/src/main/java/treehouse/server/api/invitation/business/InvitationService.java index cce16e2..1ebae1b 100644 --- a/src/main/java/treehouse/server/api/invitation/business/InvitationService.java +++ b/src/main/java/treehouse/server/api/invitation/business/InvitationService.java @@ -118,7 +118,7 @@ public InvitationResponseDTO.invitationAccept decisionInvitation(User user, Invi if (request.isAcceptDecision()==true) { treehouseId = invitation.getTreeHouse().getId(); // treehouse 관련 로직 개발 후, invitation.getTreeHouse.getId() 등으로 바꾸기 // 초대장 수락 - + invitationCommandAdapter.acceptInvitation(invitation); } return InvitationMapper.toInvitationResult(treehouseId); } diff --git a/src/main/java/treehouse/server/api/invitation/implement/InvitationCommandAdapter.java b/src/main/java/treehouse/server/api/invitation/implement/InvitationCommandAdapter.java index dc1818c..8f75e93 100644 --- a/src/main/java/treehouse/server/api/invitation/implement/InvitationCommandAdapter.java +++ b/src/main/java/treehouse/server/api/invitation/implement/InvitationCommandAdapter.java @@ -6,6 +6,7 @@ import treehouse.server.api.invitation.persistence.InvitationRepository; import treehouse.server.global.annotations.Adapter; import treehouse.server.global.entity.Invitation.Invitation; +import treehouse.server.global.entity.Invitation.InvitationStatus; import treehouse.server.global.entity.User.User; import treehouse.server.global.entity.User.UserRole; import treehouse.server.global.entity.redis.RefreshToken; @@ -27,4 +28,12 @@ public Invitation saveInvitation(Invitation invitation){ return invitationRepository.save(invitation); } + public void deleteInvitation(Invitation invitation){ + invitationRepository.delete(invitation); + } + + public void acceptInvitation(Invitation invitation) { + invitation.setStatus(InvitationStatus.ACCEPTED); + invitationRepository.save(invitation); + } } diff --git a/src/main/java/treehouse/server/api/invitation/implement/InvitationQueryAdapter.java b/src/main/java/treehouse/server/api/invitation/implement/InvitationQueryAdapter.java index f6c4d64..9139083 100644 --- a/src/main/java/treehouse/server/api/invitation/implement/InvitationQueryAdapter.java +++ b/src/main/java/treehouse/server/api/invitation/implement/InvitationQueryAdapter.java @@ -1,20 +1,16 @@ package treehouse.server.api.invitation.implement; -import io.swagger.models.auth.In; import lombok.RequiredArgsConstructor; -import org.springframework.transaction.annotation.Transactional; import treehouse.server.api.invitation.persistence.InvitationRepository; -import treehouse.server.api.invitation.presentation.dto.InvitationRequestDTO; import treehouse.server.global.annotations.Adapter; import treehouse.server.global.entity.Invitation.Invitation; +import treehouse.server.global.entity.Invitation.InvitationStatus; import treehouse.server.global.entity.User.User; import treehouse.server.global.entity.treeHouse.TreeHouse; import treehouse.server.global.exception.GlobalErrorCode; import treehouse.server.global.exception.ThrowClass.InvitationException; -import treehouse.server.global.exception.ThrowClass.UserException; import java.util.List; -import java.util.Optional; @Adapter @RequiredArgsConstructor @@ -23,7 +19,8 @@ public class InvitationQueryAdapter { private final InvitationRepository invitationRepository; public List findAllByPhone(String phone) { - return invitationRepository.findAllByPhone(phone); + return invitationRepository.findAllByPhone(phone) + .stream().filter(invitation -> invitation.getStatus().equals(InvitationStatus.PENDING)).toList(); } public Boolean existByPhoneNumber(String phoneNumber) { @@ -39,12 +36,13 @@ public Boolean existByPhoneAndTreehouse(String phoneNumber, TreeHouse treehouse) return invitationRepository.existsByPhoneAndTreeHouse(phoneNumber, treehouse); } - public Invitation findByReceiverAndTreeHouse(User user, TreeHouse treeHouse) { - return invitationRepository.findByReceiverAndTreeHouse(user, treeHouse) - .orElseThrow(() -> new InvitationException(GlobalErrorCode.INVITATION_NOT_FOUND)); - } - public Invitation findByPhoneAndTreeHouse(String phone, TreeHouse treeHouse) { return invitationRepository.findByPhoneAndTreeHouse(phone, treeHouse); } + + public Invitation findAcceptedInvitation(User user, TreeHouse treeHouse) { + return invitationRepository.findByReceiverAndTreeHouse(user, treeHouse) + .filter(invitation -> invitation.getStatus().equals(InvitationStatus.ACCEPTED)) + .orElseThrow(() -> new InvitationException(GlobalErrorCode.INVITATION_NOT_FOUND)); + } } diff --git a/src/main/java/treehouse/server/api/member/business/MemberService.java b/src/main/java/treehouse/server/api/member/business/MemberService.java index 37fca9a..8e9cf3f 100644 --- a/src/main/java/treehouse/server/api/member/business/MemberService.java +++ b/src/main/java/treehouse/server/api/member/business/MemberService.java @@ -6,6 +6,7 @@ import org.springframework.transaction.annotation.Transactional; import treehouse.server.api.branch.business.BranchService; import treehouse.server.api.branch.implementation.BranchQueryAdapter; +import treehouse.server.api.invitation.implement.InvitationCommandAdapter; import treehouse.server.api.invitation.implement.InvitationQueryAdapter; import treehouse.server.api.member.implementation.MemberCommandAdapter; import treehouse.server.api.member.implementation.MemberQueryAdapter; @@ -13,6 +14,7 @@ import treehouse.server.api.member.presentation.dto.MemberResponseDTO; import treehouse.server.api.treehouse.implementation.TreehouseQueryAdapter; import treehouse.server.global.entity.Invitation.Invitation; +import treehouse.server.global.entity.Invitation.InvitationStatus; import treehouse.server.global.entity.User.User; import treehouse.server.global.entity.branch.Branch; import treehouse.server.global.entity.member.Member; @@ -30,6 +32,8 @@ public class MemberService { private final MemberCommandAdapter memberCommandAdapter; private final TreehouseQueryAdapter treehouseQueryAdapter; private final BranchQueryAdapter branchQueryAdapter; + + private final InvitationCommandAdapter invitationCommandAdapter; private final InvitationQueryAdapter invitationQueryAdapter; private final BranchService branchService; @@ -50,8 +54,8 @@ public MemberResponseDTO.registerMember register(User user, MemberRequestDTO.reg treeHouse.addMember(savedMember); // TreeHouse에 Member 추가 // 트리하우스에 초대한 멤버와의 브랜치 생성 - Invitation invitation = invitationQueryAdapter.findByReceiverAndTreeHouse(user, treeHouse); - branchService.createBranch(treeHouse, invitation.getSender(), savedMember); + Invitation acceptedInvitation = invitationQueryAdapter.findAcceptedInvitation(user, treeHouse); + branchService.createBranch(treeHouse, acceptedInvitation.getSender(), savedMember); return MemberMapper.toRegister(savedMember); } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index f331f9d..8d749d3 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -73,8 +73,8 @@ jwt: key: ${JWT_SECRET} # secret : ${JWT_SECRET} authorities-key: authoritiesKey - access-token-validity-in-seconds: 180000 # 3 min - refresh-token-validity-in-seconds: 600000 # 5 min + access-token-validity-in-seconds: 600000 # 10 min + refresh-token-validity-in-seconds: 1200000 # 20 min firebase: admin-sdk: ${FCM_KEY}