diff --git a/src/main/java/org/sopt/seonyakServer/domain/member/controller/MemberController.java b/src/main/java/org/sopt/seonyakServer/domain/member/controller/MemberController.java index 0df82d1..311d694 100644 --- a/src/main/java/org/sopt/seonyakServer/domain/member/controller/MemberController.java +++ b/src/main/java/org/sopt/seonyakServer/domain/member/controller/MemberController.java @@ -7,10 +7,12 @@ import org.sopt.seonyakServer.domain.member.dto.MemberJoinResponse; import org.sopt.seonyakServer.domain.member.dto.NicknameRequest; import org.sopt.seonyakServer.domain.member.dto.SendCodeRequest; +import org.sopt.seonyakServer.domain.member.dto.ValidTokenResponse; import org.sopt.seonyakServer.domain.member.dto.VerifyCodeRequest; import org.sopt.seonyakServer.domain.member.service.MemberService; import org.sopt.seonyakServer.global.common.external.client.dto.MemberLoginRequest; import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PatchMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -66,4 +68,9 @@ public ResponseEntity verifyCode( return ResponseEntity.ok().build(); } + + @GetMapping("/auth/token/validate") + public ResponseEntity validTokenExpired() { + return ResponseEntity.ok(memberService.validTokenExpired()); + } } diff --git a/src/main/java/org/sopt/seonyakServer/domain/member/dto/LoginSuccessResponse.java b/src/main/java/org/sopt/seonyakServer/domain/member/dto/LoginSuccessResponse.java index 0f5fa45..508ccba 100644 --- a/src/main/java/org/sopt/seonyakServer/domain/member/dto/LoginSuccessResponse.java +++ b/src/main/java/org/sopt/seonyakServer/domain/member/dto/LoginSuccessResponse.java @@ -5,18 +5,16 @@ @JsonInclude(JsonInclude.Include.NON_NULL) public record LoginSuccessResponse( String role, - String accessToken, - String nickname + String accessToken ) { + public static LoginSuccessResponse of( final String role, - final String accessToken, - final String nickname + final String accessToken ) { return new LoginSuccessResponse( role, - accessToken, - nickname + accessToken ); } } diff --git a/src/main/java/org/sopt/seonyakServer/domain/member/dto/ValidTokenResponse.java b/src/main/java/org/sopt/seonyakServer/domain/member/dto/ValidTokenResponse.java new file mode 100644 index 0000000..ffac5df --- /dev/null +++ b/src/main/java/org/sopt/seonyakServer/domain/member/dto/ValidTokenResponse.java @@ -0,0 +1,20 @@ +package org.sopt.seonyakServer.domain.member.dto; + +import com.fasterxml.jackson.annotation.JsonInclude; + +@JsonInclude(JsonInclude.Include.NON_NULL) +public record ValidTokenResponse( + String nickname, + Boolean isPending +) { + + public static ValidTokenResponse of( + final String nickname, + final Boolean isPending + ) { + return new ValidTokenResponse( + nickname, + isPending + ); + } +} diff --git a/src/main/java/org/sopt/seonyakServer/domain/member/service/MemberService.java b/src/main/java/org/sopt/seonyakServer/domain/member/service/MemberService.java index cb8d930..6bf99e2 100644 --- a/src/main/java/org/sopt/seonyakServer/domain/member/service/MemberService.java +++ b/src/main/java/org/sopt/seonyakServer/domain/member/service/MemberService.java @@ -13,6 +13,7 @@ import org.sopt.seonyakServer.domain.member.dto.MemberJoinResponse; import org.sopt.seonyakServer.domain.member.dto.NicknameRequest; import org.sopt.seonyakServer.domain.member.dto.SendCodeRequest; +import org.sopt.seonyakServer.domain.member.dto.ValidTokenResponse; import org.sopt.seonyakServer.domain.member.dto.VerifyCodeRequest; import org.sopt.seonyakServer.domain.member.model.Member; import org.sopt.seonyakServer.domain.member.model.SocialType; @@ -117,9 +118,8 @@ private LoginSuccessResponse getTokenDto(final MemberInfoResponse memberInfoResp } String role = determineRole(member); - String nickname = determineNickname(member); - return getTokenByMemberId(role, member.getId(), nickname); + return getTokenByMemberId(role, member.getId()); } private boolean isExistingMember( @@ -131,29 +131,21 @@ private boolean isExistingMember( public LoginSuccessResponse getTokenByMemberId( final String role, - final Long id, - final String nickname + final Long id ) { MemberAuthentication memberAuthentication = new MemberAuthentication(id, null, null); - return LoginSuccessResponse.of(role, jwtTokenProvider.issueAccessToken(memberAuthentication), nickname); + return LoginSuccessResponse.of(role, jwtTokenProvider.issueAccessToken(memberAuthentication)); } private String determineRole(Member member) { if (member.getSenior() == null) { return member.getPhoneNumber() != null ? "JUNIOR" : null; } else { - return member.getSenior().getCatchphrase() != null ? "SENIOR" : "SENIOR_PENDING"; + return "SENIOR"; } } - private String determineNickname(Member member) { - if (member.getSenior() != null && member.getSenior().getCatchphrase() == null) { - return member.getNickname(); - } - return null; - } - // 닉네임 유효성 검증 @Transactional(readOnly = true) public void validNickname(final NicknameRequest nicknameRequest) { @@ -184,7 +176,7 @@ public MemberJoinResponse patchMemberJoin(MemberJoinRequest memberJoinRequest) { memberJoinRequest.departmentList() ); - if ("SENIOR_PENDING".equals(memberJoinRequest.role())) { + if ("SENIOR".equals(memberJoinRequest.role()) && member.getSenior() == null) { member.addSenior(seniorService.createSenior(memberJoinRequest, member)); } else if (!"JUNIOR".equals(memberJoinRequest.role())) { throw new CustomException(ErrorType.INVALID_USER_TYPE_ERROR); @@ -250,4 +242,18 @@ public void deleteMembersWithNullPhoneNumber() { LocalDateTime oneHourAgo = LocalDateTime.now().minusMinutes(60); memberRepository.deleteByPhoneNumberIsNullAndUpdatedAtBefore(oneHourAgo); } + + @Transactional(readOnly = true) + public ValidTokenResponse validTokenExpired() { + Member member = memberRepository.findMemberByIdOrThrow(principalHandler.getUserIdFromPrincipal()); + Boolean isPending; + + if (member.getSenior() == null) { + isPending = null; + } else { + isPending = member.getSenior().getCatchphrase() == null; + } + + return ValidTokenResponse.of(member.getNickname(), isPending); + } } diff --git a/src/main/java/org/sopt/seonyakServer/domain/senior/controller/SeniorController.java b/src/main/java/org/sopt/seonyakServer/domain/senior/controller/SeniorController.java index e91bcc7..3431b45 100644 --- a/src/main/java/org/sopt/seonyakServer/domain/senior/controller/SeniorController.java +++ b/src/main/java/org/sopt/seonyakServer/domain/senior/controller/SeniorController.java @@ -4,7 +4,6 @@ import lombok.RequiredArgsConstructor; import org.sopt.seonyakServer.domain.senior.dto.SeniorCardProfileResponse; import org.sopt.seonyakServer.domain.senior.dto.SeniorFilterResponse; -import org.sopt.seonyakServer.domain.senior.dto.SeniorNameResponse; import org.sopt.seonyakServer.domain.senior.dto.SeniorProfileRequest; import org.sopt.seonyakServer.domain.senior.dto.SeniorProfileResponse; import org.sopt.seonyakServer.domain.senior.model.PreferredTimeList; @@ -20,12 +19,12 @@ @RestController @RequiredArgsConstructor -@RequestMapping("/api/v1") +@RequestMapping("/api/v1/senior") public class SeniorController { private final SeniorService seniorService; - @PatchMapping("/senior/profile") + @PatchMapping("/profile") public ResponseEntity patchProfile( @RequestBody SeniorProfileRequest seniorProfileRequest ) { @@ -33,14 +32,14 @@ public ResponseEntity patchProfile( return ResponseEntity.ok().build(); } - @GetMapping("/senior/time/{seniorId}") + @GetMapping("/time/{seniorId}") public ResponseEntity getPreferredTime( @PathVariable final Long seniorId ) { return ResponseEntity.ok(seniorService.getSeniorPreferredTime(seniorId)); } - @GetMapping("/senior/search") + @GetMapping("/search") public ResponseEntity searchFieldPosition( @RequestParam(required = false) final List field, @RequestParam(required = false) final List position @@ -48,22 +47,17 @@ public ResponseEntity searchFieldPosition( return ResponseEntity.ok(seniorService.searchSeniorFieldPosition(field, position)); } - @GetMapping("/senior/{seniorId}") + @GetMapping("/{seniorId}") public ResponseEntity getSeniorProfile( @PathVariable final Long seniorId ) { return ResponseEntity.ok(seniorService.getSeniorProfile(seniorId)); } - @GetMapping("/senior/card/{seniorId}") + @GetMapping("/card/{seniorId}") public ResponseEntity getSeniorCardProfile( @PathVariable final Long seniorId ) { return ResponseEntity.ok(seniorService.getSeniorCardProfile(seniorId)); } - - @GetMapping("/auth/token/validate") - public ResponseEntity validTokenExpired() { - return ResponseEntity.ok(seniorService.validTokenExpired()); - } } diff --git a/src/main/java/org/sopt/seonyakServer/domain/senior/dto/SeniorNameResponse.java b/src/main/java/org/sopt/seonyakServer/domain/senior/dto/SeniorNameResponse.java deleted file mode 100644 index f1949f3..0000000 --- a/src/main/java/org/sopt/seonyakServer/domain/senior/dto/SeniorNameResponse.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.sopt.seonyakServer.domain.senior.dto; - -public record SeniorNameResponse( - String name -) { - - public static SeniorNameResponse of( - final String name - ) { - return new SeniorNameResponse( - name - ); - } -} diff --git a/src/main/java/org/sopt/seonyakServer/domain/senior/service/SeniorService.java b/src/main/java/org/sopt/seonyakServer/domain/senior/service/SeniorService.java index 9fd5cae..0a62b0d 100644 --- a/src/main/java/org/sopt/seonyakServer/domain/senior/service/SeniorService.java +++ b/src/main/java/org/sopt/seonyakServer/domain/senior/service/SeniorService.java @@ -8,7 +8,6 @@ import org.sopt.seonyakServer.domain.member.repository.MemberRepository; import org.sopt.seonyakServer.domain.senior.dto.SeniorCardProfileResponse; import org.sopt.seonyakServer.domain.senior.dto.SeniorFilterResponse; -import org.sopt.seonyakServer.domain.senior.dto.SeniorNameResponse; import org.sopt.seonyakServer.domain.senior.dto.SeniorProfileRequest; import org.sopt.seonyakServer.domain.senior.dto.SeniorProfileResponse; import org.sopt.seonyakServer.domain.senior.model.PreferredTimeList; @@ -110,12 +109,4 @@ public SeniorCardProfileResponse getSeniorCardProfile(final Long seniorId) { senior.getMember().getImage() ); } - - @Transactional(readOnly = true) - public SeniorNameResponse validTokenExpired() { - Senior senior = seniorRepository.findSeniorByMemberId(principalHandler.getUserIdFromPrincipal()) - .orElseThrow(() -> new CustomException(ErrorType.NOT_FOUND_SENIOR_BY_MEMBER)); - - return SeniorNameResponse.of(senior.getMember().getNickname()); - } }