init
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
package com.kamco.cd.training.members.service;
|
||||
|
||||
import com.kamco.cd.training.common.enums.error.AuthErrorCode;
|
||||
import com.kamco.cd.training.common.exception.CustomApiException;
|
||||
import com.kamco.cd.training.members.dto.SignInRequest;
|
||||
import com.kamco.cd.training.postgres.core.MembersCoreService;
|
||||
import com.kamco.cd.training.postgres.core.TokenCoreService;
|
||||
import java.util.UUID;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@Transactional(readOnly = true)
|
||||
public class AuthService {
|
||||
|
||||
private final MembersCoreService membersCoreService;
|
||||
private final TokenCoreService tokenCoreService;
|
||||
|
||||
/**
|
||||
* 토큰 저장
|
||||
*
|
||||
* @param subject
|
||||
* @param refreshToken
|
||||
* @param validityMs
|
||||
*/
|
||||
@Transactional
|
||||
public void tokenSave(String subject, String refreshToken, long validityMs) {
|
||||
tokenCoreService.save(subject, refreshToken, validityMs);
|
||||
}
|
||||
|
||||
/**
|
||||
* refreshToken을 DB와 비교 검증
|
||||
*
|
||||
* @param subject 사용자 식별(UUID)
|
||||
* @param requestRefreshToken refresh token
|
||||
*/
|
||||
public void validateRefreshToken(String subject, String requestRefreshToken) {
|
||||
String savedToken = tokenCoreService.getValidTokenOrThrow(subject);
|
||||
|
||||
if (!savedToken.equals(requestRefreshToken)) {
|
||||
throw new CustomApiException(AuthErrorCode.REFRESH_TOKEN_MISMATCH);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 로그아웃(토큰폐기)
|
||||
*
|
||||
* @param subject 사용자 식별(UUID)
|
||||
*/
|
||||
@Transactional
|
||||
public void logout(String subject) {
|
||||
// RefreshToken 폐기
|
||||
tokenCoreService.revokeBySubject(subject);
|
||||
}
|
||||
|
||||
/**
|
||||
* 로그인 일시 저장
|
||||
*
|
||||
* @param uuid
|
||||
*/
|
||||
@Transactional
|
||||
public void saveLogin(UUID uuid) {
|
||||
membersCoreService.saveLogin(uuid);
|
||||
}
|
||||
|
||||
/**
|
||||
* 사용자 상태 조회
|
||||
*
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
public String getUserStatus(SignInRequest request) {
|
||||
return membersCoreService.getUserStatus(request);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.kamco.cd.training.members.service;
|
||||
|
||||
import com.kamco.cd.training.auth.CustomUserDetails;
|
||||
import com.kamco.cd.training.postgres.entity.MemberEntity;
|
||||
import com.kamco.cd.training.postgres.repository.members.MembersRepository;
|
||||
import java.util.UUID;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
import org.springframework.security.core.userdetails.UserDetailsService;
|
||||
import org.springframework.security.core.userdetails.UsernameNotFoundException;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class MemberDetailsService implements UserDetailsService {
|
||||
|
||||
private final MembersRepository membersRepository;
|
||||
|
||||
@Override
|
||||
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
|
||||
UUID uuid = UUID.fromString(username);
|
||||
MemberEntity member =
|
||||
membersRepository
|
||||
.findByUUID(uuid)
|
||||
.orElseThrow(() -> new UsernameNotFoundException("USER NOT FOUND"));
|
||||
|
||||
return new CustomUserDetails(member);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.kamco.cd.training.members.service;
|
||||
|
||||
import com.kamco.cd.training.common.exception.CustomApiException;
|
||||
import com.kamco.cd.training.common.utils.CommonStringUtils;
|
||||
import com.kamco.cd.training.members.dto.MembersDto;
|
||||
import com.kamco.cd.training.members.dto.MembersDto.Basic;
|
||||
import com.kamco.cd.training.postgres.core.MembersCoreService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@Service
|
||||
@Transactional(readOnly = true)
|
||||
@RequiredArgsConstructor
|
||||
public class MembersService {
|
||||
|
||||
private final MembersCoreService membersCoreService;
|
||||
|
||||
/**
|
||||
* 회원목록 조회
|
||||
*
|
||||
* @param searchReq
|
||||
* @return
|
||||
*/
|
||||
public Page<Basic> findByMembers(MembersDto.SearchReq searchReq) {
|
||||
return membersCoreService.findByMembers(searchReq);
|
||||
}
|
||||
|
||||
/**
|
||||
* 패스워드 사용자 변경
|
||||
*
|
||||
* @param id
|
||||
* @param initReq
|
||||
*/
|
||||
@Transactional
|
||||
public void resetPassword(String id, MembersDto.InitReq initReq) {
|
||||
|
||||
if (!CommonStringUtils.isValidPassword(initReq.getNewPassword())) {
|
||||
throw new CustomApiException("WRONG_PASSWORD", HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
membersCoreService.resetPassword(id, initReq);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user