Skip to content

Commit

Permalink
[MERGE/#170] 토큰 만료 확인 API 선후배 관계 없이 사용 가능하게 수정
Browse files Browse the repository at this point in the history
[REFACTOR/#170] 토큰 만료 확인 API 선후배 관계 없이 사용 가능하게 수정
  • Loading branch information
ckkim817 authored Dec 30, 2024
2 parents 99d1f9f + 95d4afe commit d852f83
Show file tree
Hide file tree
Showing 7 changed files with 57 additions and 55 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -66,4 +68,9 @@ public ResponseEntity<Void> verifyCode(

return ResponseEntity.ok().build();
}

@GetMapping("/auth/token/validate")
public ResponseEntity<ValidTokenResponse> validTokenExpired() {
return ResponseEntity.ok(memberService.validTokenExpired());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
);
}
}
Original file line number Diff line number Diff line change
@@ -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
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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(
Expand All @@ -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) {
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -20,50 +19,45 @@

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/v1")
@RequestMapping("/api/v1/senior")
public class SeniorController {

private final SeniorService seniorService;

@PatchMapping("/senior/profile")
@PatchMapping("/profile")
public ResponseEntity<Void> patchProfile(
@RequestBody SeniorProfileRequest seniorProfileRequest
) {
seniorService.patchSeniorProfile(seniorProfileRequest);
return ResponseEntity.ok().build();
}

@GetMapping("/senior/time/{seniorId}")
@GetMapping("/time/{seniorId}")
public ResponseEntity<PreferredTimeList> getPreferredTime(
@PathVariable final Long seniorId
) {
return ResponseEntity.ok(seniorService.getSeniorPreferredTime(seniorId));
}

@GetMapping("/senior/search")
@GetMapping("/search")
public ResponseEntity<SeniorFilterResponse> searchFieldPosition(
@RequestParam(required = false) final List<String> field,
@RequestParam(required = false) final List<String> position
) {
return ResponseEntity.ok(seniorService.searchSeniorFieldPosition(field, position));
}

@GetMapping("/senior/{seniorId}")
@GetMapping("/{seniorId}")
public ResponseEntity<SeniorProfileResponse> getSeniorProfile(
@PathVariable final Long seniorId
) {
return ResponseEntity.ok(seniorService.getSeniorProfile(seniorId));
}

@GetMapping("/senior/card/{seniorId}")
@GetMapping("/card/{seniorId}")
public ResponseEntity<SeniorCardProfileResponse> getSeniorCardProfile(
@PathVariable final Long seniorId
) {
return ResponseEntity.ok(seniorService.getSeniorCardProfile(seniorId));
}

@GetMapping("/auth/token/validate")
public ResponseEntity<SeniorNameResponse> validTokenExpired() {
return ResponseEntity.ok(seniorService.validTokenExpired());
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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());
}
}

0 comments on commit d852f83

Please sign in to comment.