diff --git a/src/main/java/com/ieum/ict/ieum/IeumApplication.java b/src/main/java/com/ieum/ict/ieum/IeumApplication.java index e4a503f..3f5b5f3 100644 --- a/src/main/java/com/ieum/ict/ieum/IeumApplication.java +++ b/src/main/java/com/ieum/ict/ieum/IeumApplication.java @@ -19,14 +19,18 @@ public static void main(String[] args) { CommandLineRunner seedAdminUser(UserRepository userRepository, PasswordEncoder passwordEncoder) { return args -> userRepository.findByEmail("admin@ieum.com").ifPresentOrElse( user -> { + if (user.getLoginId() == null) { + user.updateLoginId("admin"); + } if (user.getRole() != UserRole.ADMIN) { user.updateRole(UserRole.ADMIN); - userRepository.save(user); } + userRepository.save(user); }, () -> { User admin = new User( "admin@ieum.com", + "admin", passwordEncoder.encode("admin1234!"), "ieum_admin" ); diff --git a/src/main/java/com/ieum/ict/ieum/admin/api/AdminUserResponse.java b/src/main/java/com/ieum/ict/ieum/admin/api/AdminUserResponse.java index 7910a88..98d0e04 100644 --- a/src/main/java/com/ieum/ict/ieum/admin/api/AdminUserResponse.java +++ b/src/main/java/com/ieum/ict/ieum/admin/api/AdminUserResponse.java @@ -3,6 +3,8 @@ import com.ieum.ict.ieum.auth.domain.User; import com.ieum.ict.ieum.auth.domain.UserRole; -public record AdminUserResponse(Long id, String email, String name, UserRole role) { - public static AdminUserResponse from(User user) { return new AdminUserResponse(user.getId(), user.getEmail(), user.getName(), user.getRole()); } +public record AdminUserResponse(Long id, String email, String loginId, String name, UserRole role) { + public static AdminUserResponse from(User user) { + return new AdminUserResponse(user.getId(), user.getEmail(), user.getLoginId(), user.getName(), user.getRole()); + } } diff --git a/src/main/java/com/ieum/ict/ieum/auth/api/AuthRequest.java b/src/main/java/com/ieum/ict/ieum/auth/api/AuthRequest.java index 4bacbc0..fbcd68e 100644 --- a/src/main/java/com/ieum/ict/ieum/auth/api/AuthRequest.java +++ b/src/main/java/com/ieum/ict/ieum/auth/api/AuthRequest.java @@ -6,9 +6,11 @@ public final class AuthRequest { private AuthRequest() {} - public record Signup(@NotBlank @Email String email, @NotBlank @Size(min = 8) String password, + public record Signup(@NotBlank @Email String email, + @NotBlank @Size(min = 4, max = 30) String loginId, + @NotBlank @Size(min = 8) String password, @NotBlank String name) {} - public record Login(@NotBlank @Email String email, @NotBlank String password) {} + public record Login(@NotBlank String loginId, @NotBlank String password) {} public record Refresh(@NotBlank String refreshToken) {} public record Logout(@NotBlank String refreshToken) {} } diff --git a/src/main/java/com/ieum/ict/ieum/auth/domain/User.java b/src/main/java/com/ieum/ict/ieum/auth/domain/User.java index 87a7ade..b8c5494 100644 --- a/src/main/java/com/ieum/ict/ieum/auth/domain/User.java +++ b/src/main/java/com/ieum/ict/ieum/auth/domain/User.java @@ -14,6 +14,8 @@ public class User { private Long id; @Column(nullable = false, unique = true) private String email; + @Column(unique = true) + private String loginId; @Column(nullable = false) private String password; @Column(nullable = false) @@ -25,19 +27,21 @@ public class User { @Column(nullable = false) private UserRole role = UserRole.USER; - public User(String email, String password, String name) { + public User(String email, String loginId, String password, String name) { this.email = email; + this.loginId = loginId; this.password = password; this.name = name; } public User(String email, String password, String name, AuthProvider authProvider) { - this(email, password, name); + this(email, null, password, name); this.authProvider = authProvider; } public void updateRefreshToken(String refreshToken) { this.refreshToken = refreshToken; } public void clearRefreshToken() { this.refreshToken = null; } public void updateRole(UserRole role) { this.role = role; } + public void updateLoginId(String loginId) { this.loginId = loginId; } public boolean isGoogleLogin() { return authProvider == AuthProvider.GOOGLE; } } diff --git a/src/main/java/com/ieum/ict/ieum/auth/repository/UserRepository.java b/src/main/java/com/ieum/ict/ieum/auth/repository/UserRepository.java index 22537db..6d7ae0b 100644 --- a/src/main/java/com/ieum/ict/ieum/auth/repository/UserRepository.java +++ b/src/main/java/com/ieum/ict/ieum/auth/repository/UserRepository.java @@ -6,5 +6,7 @@ public interface UserRepository extends JpaRepository { boolean existsByEmail(String email); + boolean existsByLoginId(String loginId); Optional findByEmail(String email); + Optional findByLoginId(String loginId); } diff --git a/src/main/java/com/ieum/ict/ieum/auth/service/AuthService.java b/src/main/java/com/ieum/ict/ieum/auth/service/AuthService.java index 44f47a3..0f70924 100644 --- a/src/main/java/com/ieum/ict/ieum/auth/service/AuthService.java +++ b/src/main/java/com/ieum/ict/ieum/auth/service/AuthService.java @@ -26,14 +26,22 @@ public void signup(AuthRequest.Signup request) { if (userRepository.existsByEmail(request.email())) { throw new ResponseStatusException(HttpStatus.CONFLICT, "이미 가입된 이메일입니다."); } - userRepository.save(new User(request.email(), passwordEncoder.encode(request.password()), request.name())); + if (userRepository.existsByLoginId(request.loginId())) { + throw new ResponseStatusException(HttpStatus.CONFLICT, "이미 사용 중인 아이디입니다."); + } + userRepository.save(new User( + request.email(), + request.loginId(), + passwordEncoder.encode(request.password()), + request.name() + )); } public AuthResponse login(AuthRequest.Login request) { - User user = userRepository.findByEmail(request.email()) - .orElseThrow(() -> new ResponseStatusException(HttpStatus.UNAUTHORIZED, "이메일 또는 비밀번호가 올바르지 않습니다.")); + User user = userRepository.findByLoginId(request.loginId()) + .orElseThrow(() -> new ResponseStatusException(HttpStatus.UNAUTHORIZED, "아이디 또는 비밀번호가 올바르지 않습니다.")); if (!passwordEncoder.matches(request.password(), user.getPassword())) { - throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "이메일 또는 비밀번호가 올바르지 않습니다."); + throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "아이디 또는 비밀번호가 올바르지 않습니다."); } String accessToken = jwtTokenProvider.create(user.getEmail(), "access", user.getRole().name(), 3600000); String refreshToken = jwtTokenProvider.create(user.getEmail(), "refresh", user.getRole().name(), 1209600000); @@ -75,7 +83,7 @@ public AuthResponse refresh(AuthRequest.Refresh request) { } public AuthResponse adminLogin(AuthRequest.Login request) { - User user = userRepository.findByEmail(request.email()) + User user = userRepository.findByLoginId(request.loginId()) .filter(candidate -> candidate.getRole() == UserRole.ADMIN) .orElseThrow(() -> new ResponseStatusException(HttpStatus.UNAUTHORIZED, "관리자 계정 정보가 올바르지 않습니다.")); if (!passwordEncoder.matches(request.password(), user.getPassword())) { diff --git a/src/main/java/com/ieum/ict/ieum/user/api/UserResponse.java b/src/main/java/com/ieum/ict/ieum/user/api/UserResponse.java index f4c6437..dbf65d9 100644 --- a/src/main/java/com/ieum/ict/ieum/user/api/UserResponse.java +++ b/src/main/java/com/ieum/ict/ieum/user/api/UserResponse.java @@ -1,3 +1,3 @@ package com.ieum.ict.ieum.user.api; -public record UserResponse(Long id, String email, String name) {} +public record UserResponse(Long id, String email, String loginId, String name) {} diff --git a/src/main/java/com/ieum/ict/ieum/user/service/UserService.java b/src/main/java/com/ieum/ict/ieum/user/service/UserService.java index 06b99f6..0a5ff54 100644 --- a/src/main/java/com/ieum/ict/ieum/user/service/UserService.java +++ b/src/main/java/com/ieum/ict/ieum/user/service/UserService.java @@ -16,6 +16,6 @@ public class UserService { public UserResponse getMyInfo(String email) { User user = userRepository.findByEmail(email) .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "사용자를 찾을 수 없습니다.")); - return new UserResponse(user.getId(), user.getEmail(), user.getName()); + return new UserResponse(user.getId(), user.getEmail(), user.getLoginId(), user.getName()); } }