@Component
@RequiredArgsConstructor
public class MemberResolver implements HandlerMethodArgumentResolver {
private final OauthAccountRepository oauthAccountRepository;
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.getParameterType().equals(MemberDetails.class);
}
@Override
public MemberDetails resolveArgument(
MethodParameter parameter,
ModelAndViewContainer mavContainer,
NativeWebRequest webRequest,
WebDataBinderFactory binderFactory
) {
HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class);
Long accountId = (Long) request.getAttribute("account_id");
OauthAccount account = oauthAccountRepository.findByIdWithMember(accountId)
.orElseThrow(() -> new CommonException(NOT_FOUND_OAUTH_ACCOUNT));
return new MemberDetails(account.getMember().getId());
}
}
@Component
@RequiredArgsConstructor
public class OauthAccountResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.getParameterType().equals(OauthAccountDetails.class);
}
@Override
public OauthAccountDetails resolveArgument(
MethodParameter parameter,
ModelAndViewContainer mavContainer,
NativeWebRequest webRequest,
WebDataBinderFactory binderFactory
) {
HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class);
Long accountId = (Long) request.getAttribute("account_id");
return new OauthAccountDetails(accountId);
}
}
MemberResolver → MemberDetails 반환
OauthAccountResolver → OauthAccountDetails 반환
→ 공통적으로 DTO 반환 → 서비스 레이어에서 DB 재조회 발생