From c537cd5e1856d45d422526a91a4ee36565109127 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=B5=9C=EB=AF=B8=EB=9E=98?= Date: Mon, 21 Oct 2024 21:10:24 +0900 Subject: [PATCH 1/6] feature :: add approved column to user --- .../domain/user/domain/entity/user/User.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/keepgoing/keepserver/domain/user/domain/entity/user/User.java b/src/main/java/com/keepgoing/keepserver/domain/user/domain/entity/user/User.java index 659c833..dd4a75e 100644 --- a/src/main/java/com/keepgoing/keepserver/domain/user/domain/entity/user/User.java +++ b/src/main/java/com/keepgoing/keepserver/domain/user/domain/entity/user/User.java @@ -7,6 +7,7 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.Setter; import java.time.LocalDateTime; import java.util.ArrayList; @@ -14,6 +15,7 @@ @Entity @Getter +@Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Table(name = "users") public class User { @@ -58,6 +60,12 @@ public class User { @Column private LocalDateTime statusTime; + /* + 교사 계정 승인 여부 + */ + @Column(nullable = false) + private boolean approved; + @OneToMany(mappedBy = "teacher", fetch = FetchType.LAZY) private List notices = new ArrayList<>(); @@ -68,13 +76,15 @@ public static User registerUser( String email, String password, String name, - boolean teacher + boolean teacher, + boolean approved ) { User user = new User(); user.email = email; user.password = password; user.name = name; user.teacher = teacher; + user.approved = approved; return user; } From c5a6a1da60ac729bf6ae9cf63cbdffc69eea80cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=B5=9C=EB=AF=B8=EB=9E=98?= Date: Mon, 21 Oct 2024 21:12:18 +0900 Subject: [PATCH 2/6] feature :: add approved value --- .../keepserver/domain/user/dto/request/SignupRequest.java | 3 ++- .../domain/user/security/service/UserDetailsImpl.java | 8 ++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/keepgoing/keepserver/domain/user/dto/request/SignupRequest.java b/src/main/java/com/keepgoing/keepserver/domain/user/dto/request/SignupRequest.java index 9e23cf2..a5aa5a6 100644 --- a/src/main/java/com/keepgoing/keepserver/domain/user/dto/request/SignupRequest.java +++ b/src/main/java/com/keepgoing/keepserver/domain/user/dto/request/SignupRequest.java @@ -7,6 +7,7 @@ public record SignupRequest( String email, String password, String name, - boolean isTeacher + boolean isTeacher, + boolean isApproved ) { } diff --git a/src/main/java/com/keepgoing/keepserver/domain/user/security/service/UserDetailsImpl.java b/src/main/java/com/keepgoing/keepserver/domain/user/security/service/UserDetailsImpl.java index 5b89344..6aed4e7 100644 --- a/src/main/java/com/keepgoing/keepserver/domain/user/security/service/UserDetailsImpl.java +++ b/src/main/java/com/keepgoing/keepserver/domain/user/security/service/UserDetailsImpl.java @@ -26,12 +26,15 @@ public class UserDetailsImpl implements UserDetails { @Getter private final boolean teacher; - public UserDetailsImpl(Long id, String email, String name, String password, boolean teacher) { + private final boolean approved; + + public UserDetailsImpl(Long id, String email, String name, String password, boolean teacher, boolean approved) { this.id = id; this.email = email; this.name = name; this.password = password; this.teacher = teacher; + this.approved = approved; } public static UserDetailsImpl build(User user) { @@ -40,7 +43,8 @@ public static UserDetailsImpl build(User user) { user.getEmail(), user.getName(), user.getPassword(), - user.isTeacher() + user.isTeacher(), + user.isApproved() ); } From 7afdcc6fbacee40f1fd873543b82d0f99018d075 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=B5=9C=EB=AF=B8=EB=9E=98?= Date: Mon, 21 Oct 2024 21:13:16 +0900 Subject: [PATCH 3/6] feature :: add user error code --- .../keepgoing/keepserver/global/exception/user/UserError.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/keepgoing/keepserver/global/exception/user/UserError.java b/src/main/java/com/keepgoing/keepserver/global/exception/user/UserError.java index 53bcb46..9c6646e 100644 --- a/src/main/java/com/keepgoing/keepserver/global/exception/user/UserError.java +++ b/src/main/java/com/keepgoing/keepserver/global/exception/user/UserError.java @@ -9,7 +9,8 @@ @RequiredArgsConstructor public enum UserError implements ErrorProperty { USER_NOT_TEACHER(HttpStatus.BAD_REQUEST, "선생님이 아닙니다."), - USER_NOT_FOUND(HttpStatus.BAD_REQUEST, "해당 학생을 찾을 수 없습니다"); + USER_NOT_FOUND(HttpStatus.BAD_REQUEST, "해당 학생을 찾을 수 없습니다"), + TEACHER_ACCOUNT_NOT_APPROVED(HttpStatus.UNAUTHORIZED, "교사 계정이 승인되지 않았습니다."); private final HttpStatus status; private final String message; From fa1be7a5cd1dd19dfa1120c084b86cbbd738a147 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=B5=9C=EB=AF=B8=EB=9E=98?= Date: Mon, 21 Oct 2024 21:13:20 +0900 Subject: [PATCH 4/6] feature :: add user error exception --- .../keepserver/global/exception/user/UserException.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/keepgoing/keepserver/global/exception/user/UserException.java b/src/main/java/com/keepgoing/keepserver/global/exception/user/UserException.java index 30a023e..a003cbe 100644 --- a/src/main/java/com/keepgoing/keepserver/global/exception/user/UserException.java +++ b/src/main/java/com/keepgoing/keepserver/global/exception/user/UserException.java @@ -6,6 +6,7 @@ public class UserException extends BusinessException { private static final UserException USER_NOT_TEACHER = new UserException(UserError.USER_NOT_TEACHER); private static final UserException USER_NOT_FOUND = new UserException(UserError.USER_NOT_FOUND); + private static final UserException TEACHER_ACCOUNT_NOT_APPROVED = new UserException(UserError.TEACHER_ACCOUNT_NOT_APPROVED); public UserException(ErrorProperty error) { super(error); @@ -15,4 +16,5 @@ public static UserException userNotTeacher() { return USER_NOT_TEACHER; } public static UserException userNotFound(){ return USER_NOT_FOUND; } + public static UserException teacherAccountNotApproved() {return TEACHER_ACCOUNT_NOT_APPROVED; } } From dbb60e706b198cd42802b2cc3b082a580e7da478 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=B5=9C=EB=AF=B8=EB=9E=98?= Date: Mon, 21 Oct 2024 21:13:46 +0900 Subject: [PATCH 5/6] feature :: add check teacher approval logic to login logic --- .../domain/user/service/user/UserServiceImpl.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/keepgoing/keepserver/domain/user/service/user/UserServiceImpl.java b/src/main/java/com/keepgoing/keepserver/domain/user/service/user/UserServiceImpl.java index 0c83b01..6d9023a 100644 --- a/src/main/java/com/keepgoing/keepserver/domain/user/service/user/UserServiceImpl.java +++ b/src/main/java/com/keepgoing/keepserver/domain/user/service/user/UserServiceImpl.java @@ -105,14 +105,24 @@ public Optional getUserByEmail(String email){ } /* 인증 및 JWT 토큰 생성 */ + @Override public JwtResponse authenticateAndGenerateJWT(String email, String password) { Authentication authentication = authenticationManager.authenticate( new UsernamePasswordAuthenticationToken(email, password)); SecurityContextHolder.getContext().setAuthentication(authentication); - String jwt = jwtUtils.generateJwtToken(authentication); UserDetailsImpl userDetails = (UserDetailsImpl) authentication.getPrincipal(); + if (userDetails.isTeacher()) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new UserException(UserError.USER_NOT_FOUND)); + + if (!user.isApproved()) { + throw new BusinessException(UserError.TEACHER_ACCOUNT_NOT_APPROVED); + } + } + + String jwt = jwtUtils.generateJwtToken(authentication); return JwtResponse.setJwtResponse(jwt, userDetails.getId(), userDetails.getEmail(), userDetails.getName(), userDetails.isTeacher()); } @@ -131,7 +141,8 @@ private User createUser(SignupRequest signupRequest) { signupRequest.email(), encoder.encode(signupRequest.password()), signupRequest.name(), - signupRequest.isTeacher() + signupRequest.isTeacher(), + signupRequest.isApproved() ); } From 102e14dc0a0494b1c68e81cb2ac5f2cbb199e5f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=B5=9C=EB=AF=B8=EB=9E=98?= Date: Mon, 21 Oct 2024 21:16:32 +0900 Subject: [PATCH 6/6] refactor :: separate method --- .../domain/user/service/user/UserServiceImpl.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/keepgoing/keepserver/domain/user/service/user/UserServiceImpl.java b/src/main/java/com/keepgoing/keepserver/domain/user/service/user/UserServiceImpl.java index 6d9023a..c530c23 100644 --- a/src/main/java/com/keepgoing/keepserver/domain/user/service/user/UserServiceImpl.java +++ b/src/main/java/com/keepgoing/keepserver/domain/user/service/user/UserServiceImpl.java @@ -113,6 +113,13 @@ public JwtResponse authenticateAndGenerateJWT(String email, String password) { UserDetailsImpl userDetails = (UserDetailsImpl) authentication.getPrincipal(); + checkTeacherApproval(userDetails); + + String jwt = jwtUtils.generateJwtToken(authentication); + return JwtResponse.setJwtResponse(jwt, userDetails.getId(), userDetails.getEmail(), userDetails.getName(), userDetails.isTeacher()); + } + + private void checkTeacherApproval(UserDetailsImpl userDetails) { if (userDetails.isTeacher()) { User user = userRepository.findById(userDetails.getId()) .orElseThrow(() -> new UserException(UserError.USER_NOT_FOUND)); @@ -121,9 +128,6 @@ public JwtResponse authenticateAndGenerateJWT(String email, String password) { throw new BusinessException(UserError.TEACHER_ACCOUNT_NOT_APPROVED); } } - - String jwt = jwtUtils.generateJwtToken(authentication); - return JwtResponse.setJwtResponse(jwt, userDetails.getId(), userDetails.getEmail(), userDetails.getName(), userDetails.isTeacher()); } private String getNameByAuthentication(Authentication authentication) {