From 744a0b12fb633e99a4c44d00cebd000f87641ab3 Mon Sep 17 00:00:00 2001 From: heunseoRyu Date: Thu, 23 May 2024 09:30:35 +0900 Subject: [PATCH 1/4] [Fix] :: all code migration @Query to queryDSL --- .../beep/domain/auth/mapper/AuthMapper.java | 19 ++- .../auth/presentation/AuthController.java | 34 ++--- .../{SignInRequest.java => SignInReq.java} | 2 +- .../{SignUpRequest.java => SignUpReq.java} | 2 +- ...freshRequest.java => TokenRefreshReq.java} | 2 +- .../{SignInResponse.java => SignInRes.java} | 2 +- ...reshResponse.java => TokenRefreshRes.java} | 2 +- .../beep/domain/auth/service/AuthService.java | 52 +++---- ...{AttendanceEntity.java => Attendance.java} | 8 +- .../domain/{RoomEntity.java => Room.java} | 2 +- .../repository/AttendanceRepository.java | 10 +- .../domain/repository/RoomRepository.java | 5 +- .../querydsl/AttendanceRepositoryCustom.java | 16 ++- .../querydsl/RoomRepositoryCustom.java | 4 +- .../impl/AttendanceRepositoryCustomImpl.java | 92 ++++++++----- .../impl/RoomRepositoryCustomImpl.java | 21 ++- ...Exception.java => NotExitedException.java} | 6 +- .../beep/domain/beep/mapper/BeepMapper.java | 47 ++----- .../beep/presentation/BeepController.java | 29 ++-- .../{Attendance.java => AttendanceVO.java} | 2 +- .../dto/{Room.java => RoomVO.java} | 2 +- ...ExitRoomRequest.java => EnterRoomReq.java} | 2 +- ...EnterRoomRequest.java => ExitRoomReq.java} | 2 +- ...uest.java => InitializeAttendanceReq.java} | 2 +- ...Response.java => AttendanceByCodeRes.java} | 2 +- .../beep/domain/beep/service/BeepService.java | 40 +++--- .../{StudentIdEntity.java => StudentId.java} | 2 +- .../repository/StudentIdRepository.java | 23 +--- .../querydsl/StudentIdRepositoryCustom.java | 9 +- .../StudentIdRepositoryCustomImpl.java | 65 +++------ .../domain/student/mapper/StudentMapper.java | 70 ++-------- .../presentation/StudentController.java | 45 ++++--- ...ntIdRequest.java => SaveStudentIdReq.java} | 2 +- ...Request.java => StudentByGradeClsReq.java} | 2 +- ...GetClsResponse.java => ClsByGradeRes.java} | 7 +- ...esponse.java => StudentByGradeClsRes.java} | 7 +- ...nfoResponse.java => StudentByNameRes.java} | 4 +- ...entResponse.java => StudentByUserRes.java} | 12 +- ...inStudentResponse.java => StudentRes.java} | 4 +- .../student/service/StudentService.java | 84 +++--------- .../domain/{JobEntity.java => Job.java} | 2 +- .../domain/repository/JobRepository.java | 11 +- .../domain/teacher/mapper/TeacherMapper.java | 32 +---- .../presentation/TeacherController.java | 24 ++-- .../{SaveJobRequest.java => SaveJobReq.java} | 2 +- ...nfoResponse.java => TeacherByUserRes.java} | 2 +- ...inTeacherResponse.java => TeacherRes.java} | 2 +- .../teacher/service/TeacherService.java | 40 ++---- .../domain/{UserEntity.java => User.java} | 2 +- .../user/domain/repository/UserRepo.java | 20 +++ .../domain/repository/UserRepository.java | 33 ----- .../repository/querydsl/UserRepoCustom.java | 25 ++++ .../querydsl/UserRepoCustomImpl.java | 127 ++++++++++++++++++ .../querydsl/UserRepositoryCustom.java | 5 - .../querydsl/UserRepositoryCustomImpl.java | 12 -- .../beep/domain/user/mapper/UserMapper.java | 26 ++-- .../user/presentation/UserController.java | 12 +- .../dto/{User.java => UserVO.java} | 5 +- ...{ChangePwRequest.java => ChangePwReq.java} | 4 +- ...walRequest.java => WithdrawalUserReq.java} | 2 +- .../{UserIdResponse.java => UserIdRes.java} | 2 +- .../beep/domain/user/service/UserService.java | 37 +++-- .../common/dto/request/PageRequest.java | 13 ++ .../common/repository/UserSecurity.java | 4 +- .../common/repository/UserSecurityImpl.java | 35 +---- .../beep/global/common/service/UserUtil.java | 15 +-- ...onfiguration.java => MailRedisConfig.java} | 2 +- ...Configuration.java => SecurityConfig.java} | 3 +- .../global/security/auth/AuthDetails.java | 20 +-- .../global/security/jwt/JwtExtractor.java | 30 ++--- .../jwt/filter/JwtExceptionFilter.java | 47 ++----- 71 files changed, 605 insertions(+), 734 deletions(-) rename src/main/java/com/beep/beep/domain/auth/presentation/dto/request/{SignInRequest.java => SignInReq.java} (83%) rename src/main/java/com/beep/beep/domain/auth/presentation/dto/request/{SignUpRequest.java => SignUpReq.java} (88%) rename src/main/java/com/beep/beep/domain/auth/presentation/dto/request/{TokenRefreshRequest.java => TokenRefreshReq.java} (77%) rename src/main/java/com/beep/beep/domain/auth/presentation/dto/response/{SignInResponse.java => SignInRes.java} (89%) rename src/main/java/com/beep/beep/domain/auth/presentation/dto/response/{TokenRefreshResponse.java => TokenRefreshRes.java} (85%) rename src/main/java/com/beep/beep/domain/beep/domain/{AttendanceEntity.java => Attendance.java} (64%) rename src/main/java/com/beep/beep/domain/beep/domain/{RoomEntity.java => Room.java} (95%) rename src/main/java/com/beep/beep/domain/beep/exception/{NonExitException.java => NotExitedException.java} (56%) rename src/main/java/com/beep/beep/domain/beep/presentation/dto/{Attendance.java => AttendanceVO.java} (91%) rename src/main/java/com/beep/beep/domain/beep/presentation/dto/{Room.java => RoomVO.java} (91%) rename src/main/java/com/beep/beep/domain/beep/presentation/dto/request/{ExitRoomRequest.java => EnterRoomReq.java} (79%) rename src/main/java/com/beep/beep/domain/beep/presentation/dto/request/{EnterRoomRequest.java => ExitRoomReq.java} (79%) rename src/main/java/com/beep/beep/domain/beep/presentation/dto/request/{SaveAttendanceRequest.java => InitializeAttendanceReq.java} (75%) rename src/main/java/com/beep/beep/domain/beep/presentation/dto/response/{GetAttendanceResponse.java => AttendanceByCodeRes.java} (88%) rename src/main/java/com/beep/beep/domain/student/domain/{StudentIdEntity.java => StudentId.java} (94%) rename src/main/java/com/beep/beep/domain/student/presentation/dto/request/{StudentIdRequest.java => SaveStudentIdReq.java} (85%) rename src/main/java/com/beep/beep/domain/student/presentation/dto/request/{GetStudentRequest.java => StudentByGradeClsReq.java} (82%) rename src/main/java/com/beep/beep/domain/student/presentation/dto/response/{GetClsResponse.java => ClsByGradeRes.java} (69%) rename src/main/java/com/beep/beep/domain/student/presentation/dto/response/{GetStudentResponse.java => StudentByGradeClsRes.java} (71%) rename src/main/java/com/beep/beep/domain/student/presentation/dto/response/{StudentInfoResponse.java => StudentByNameRes.java} (83%) rename src/main/java/com/beep/beep/domain/student/presentation/dto/response/{SearchStudentResponse.java => StudentByUserRes.java} (56%) rename src/main/java/com/beep/beep/domain/student/presentation/dto/response/{AdminStudentResponse.java => StudentRes.java} (86%) rename src/main/java/com/beep/beep/domain/teacher/domain/{JobEntity.java => Job.java} (96%) rename src/main/java/com/beep/beep/domain/teacher/presentation/dto/request/{SaveJobRequest.java => SaveJobReq.java} (85%) rename src/main/java/com/beep/beep/domain/teacher/presentation/dto/response/{TeacherInfoResponse.java => TeacherByUserRes.java} (89%) rename src/main/java/com/beep/beep/domain/teacher/presentation/dto/response/{AdminTeacherResponse.java => TeacherRes.java} (90%) rename src/main/java/com/beep/beep/domain/user/domain/{UserEntity.java => User.java} (97%) create mode 100644 src/main/java/com/beep/beep/domain/user/domain/repository/UserRepo.java delete mode 100644 src/main/java/com/beep/beep/domain/user/domain/repository/UserRepository.java create mode 100644 src/main/java/com/beep/beep/domain/user/domain/repository/querydsl/UserRepoCustom.java create mode 100644 src/main/java/com/beep/beep/domain/user/domain/repository/querydsl/UserRepoCustomImpl.java delete mode 100644 src/main/java/com/beep/beep/domain/user/domain/repository/querydsl/UserRepositoryCustom.java delete mode 100644 src/main/java/com/beep/beep/domain/user/domain/repository/querydsl/UserRepositoryCustomImpl.java rename src/main/java/com/beep/beep/domain/user/presentation/dto/{User.java => UserVO.java} (78%) rename src/main/java/com/beep/beep/domain/user/presentation/dto/request/{ChangePwRequest.java => ChangePwReq.java} (62%) rename src/main/java/com/beep/beep/domain/user/presentation/dto/request/{WithdrawalRequest.java => WithdrawalUserReq.java} (78%) rename src/main/java/com/beep/beep/domain/user/presentation/dto/response/{UserIdResponse.java => UserIdRes.java} (87%) create mode 100644 src/main/java/com/beep/beep/global/common/dto/request/PageRequest.java rename src/main/java/com/beep/beep/global/config/{MailRedisConfiguration.java => MailRedisConfig.java} (96%) rename src/main/java/com/beep/beep/global/security/{SecurityConfiguration.java => SecurityConfig.java} (97%) diff --git a/src/main/java/com/beep/beep/domain/auth/mapper/AuthMapper.java b/src/main/java/com/beep/beep/domain/auth/mapper/AuthMapper.java index a4bcb25..aa2c168 100644 --- a/src/main/java/com/beep/beep/domain/auth/mapper/AuthMapper.java +++ b/src/main/java/com/beep/beep/domain/auth/mapper/AuthMapper.java @@ -1,22 +1,19 @@ package com.beep.beep.domain.auth.mapper; -import com.beep.beep.domain.auth.presentation.dto.request.SignUpRequest; -import com.beep.beep.domain.user.domain.UserEntity; +import com.beep.beep.domain.auth.presentation.dto.request.SignUpReq; +import com.beep.beep.domain.user.domain.User; import com.beep.beep.domain.user.domain.enums.UserType; import org.springframework.stereotype.Component; -import static com.beep.beep.domain.user.domain.enums.UserType.ADMIN; -import static com.beep.beep.domain.user.domain.enums.UserType.TEACHER; - @Component public class AuthMapper { - public UserEntity toUser(SignUpRequest request, UserType authority){ - return UserEntity.builder() - .id(request.getId()) - .password(request.getPassword()) - .email(request.getEmail()) - .name(request.getName()) + public User toUser(SignUpReq req, UserType authority){ + return User.builder() + .id(req.getId()) + .password(req.getPassword()) + .email(req.getEmail()) + .name(req.getName()) .authority(authority).build(); } diff --git a/src/main/java/com/beep/beep/domain/auth/presentation/AuthController.java b/src/main/java/com/beep/beep/domain/auth/presentation/AuthController.java index 2ed5ddf..61e8dbf 100644 --- a/src/main/java/com/beep/beep/domain/auth/presentation/AuthController.java +++ b/src/main/java/com/beep/beep/domain/auth/presentation/AuthController.java @@ -1,11 +1,11 @@ package com.beep.beep.domain.auth.presentation; -import com.beep.beep.domain.auth.presentation.dto.request.SignInRequest; -import com.beep.beep.domain.auth.presentation.dto.request.SignUpRequest; -import com.beep.beep.domain.auth.presentation.dto.request.TokenRefreshRequest; -import com.beep.beep.domain.auth.presentation.dto.response.SignInResponse; -import com.beep.beep.domain.auth.presentation.dto.response.TokenRefreshResponse; +import com.beep.beep.domain.auth.presentation.dto.request.SignInReq; +import com.beep.beep.domain.auth.presentation.dto.request.SignUpReq; +import com.beep.beep.domain.auth.presentation.dto.request.TokenRefreshReq; +import com.beep.beep.domain.auth.presentation.dto.response.SignInRes; +import com.beep.beep.domain.auth.presentation.dto.response.TokenRefreshRes; import com.beep.beep.domain.auth.service.AuthService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -31,43 +31,43 @@ public class AuthController { @ResponseStatus(HttpStatus.CREATED) @Operation(summary = "학생 회원가입", description = "학생계정으로 회원가입합니다. (unauthenticated)") public void studentSignUp( - @RequestBody SignUpRequest request + @RequestBody SignUpReq req ){ - authService.studentSignUp(request); + authService.studentSignUp(req); } @PostMapping("/sign-up/teacher") @ResponseStatus(HttpStatus.CREATED) @Operation(summary = "선생님 회원가입", description = "선생님계정으로 회원가입합니다. (unauthenticated)") public void teacherSignUp( - @RequestBody SignUpRequest request + @RequestBody SignUpReq req ){ - authService.teacherSignUp(request); + authService.teacherSignUp(req); } @PostMapping("/sign-up/admin") @ResponseStatus(HttpStatus.CREATED) @Operation(summary = "관리자 회원가입", description = "관리자계정으로 회원가입합니다. (unauthenticated)") public void adminSignUp( - @RequestBody SignUpRequest request + @RequestBody SignUpReq req ){ - authService.adminSignUp(request); + authService.adminSignUp(req); } @PostMapping("/sign-in") @Operation(summary = "로그인", description = "모든 계정이 이 요청을 통해 로그인 합니다. (unauthenticated)") - public SignInResponse signIn( - @Validated @RequestBody SignInRequest request + public SignInRes signIn( + @Validated @RequestBody SignInReq req ) { - return authService.signIn(request); + return authService.signIn(req); } @GetMapping("/refresh") @Operation(summary = "토큰 재발급", description = "access 토큰 재발급 (student,teacher,admin)") - public TokenRefreshResponse refresh( - @Validated @RequestBody TokenRefreshRequest request + public TokenRefreshRes refresh( + @Validated @RequestBody TokenRefreshReq req ) { - return authService.refresh(request); + return authService.refresh(req); } diff --git a/src/main/java/com/beep/beep/domain/auth/presentation/dto/request/SignInRequest.java b/src/main/java/com/beep/beep/domain/auth/presentation/dto/request/SignInReq.java similarity index 83% rename from src/main/java/com/beep/beep/domain/auth/presentation/dto/request/SignInRequest.java rename to src/main/java/com/beep/beep/domain/auth/presentation/dto/request/SignInReq.java index 414d71d..5492198 100644 --- a/src/main/java/com/beep/beep/domain/auth/presentation/dto/request/SignInRequest.java +++ b/src/main/java/com/beep/beep/domain/auth/presentation/dto/request/SignInReq.java @@ -3,7 +3,7 @@ import lombok.Getter; @Getter -public class SignInRequest { +public class SignInReq { private String id; private String password; } diff --git a/src/main/java/com/beep/beep/domain/auth/presentation/dto/request/SignUpRequest.java b/src/main/java/com/beep/beep/domain/auth/presentation/dto/request/SignUpReq.java similarity index 88% rename from src/main/java/com/beep/beep/domain/auth/presentation/dto/request/SignUpRequest.java rename to src/main/java/com/beep/beep/domain/auth/presentation/dto/request/SignUpReq.java index 23852c0..baf36a2 100644 --- a/src/main/java/com/beep/beep/domain/auth/presentation/dto/request/SignUpRequest.java +++ b/src/main/java/com/beep/beep/domain/auth/presentation/dto/request/SignUpReq.java @@ -5,7 +5,7 @@ @Getter @Setter -public class SignUpRequest { +public class SignUpReq { private String id; private String password; private String email; diff --git a/src/main/java/com/beep/beep/domain/auth/presentation/dto/request/TokenRefreshRequest.java b/src/main/java/com/beep/beep/domain/auth/presentation/dto/request/TokenRefreshReq.java similarity index 77% rename from src/main/java/com/beep/beep/domain/auth/presentation/dto/request/TokenRefreshRequest.java rename to src/main/java/com/beep/beep/domain/auth/presentation/dto/request/TokenRefreshReq.java index 2d0d2a2..cf812f6 100644 --- a/src/main/java/com/beep/beep/domain/auth/presentation/dto/request/TokenRefreshRequest.java +++ b/src/main/java/com/beep/beep/domain/auth/presentation/dto/request/TokenRefreshReq.java @@ -3,6 +3,6 @@ import lombok.Getter; @Getter -public class TokenRefreshRequest { +public class TokenRefreshReq { private String token; } diff --git a/src/main/java/com/beep/beep/domain/auth/presentation/dto/response/SignInResponse.java b/src/main/java/com/beep/beep/domain/auth/presentation/dto/response/SignInRes.java similarity index 89% rename from src/main/java/com/beep/beep/domain/auth/presentation/dto/response/SignInResponse.java rename to src/main/java/com/beep/beep/domain/auth/presentation/dto/response/SignInRes.java index f6dc836..9064a1b 100644 --- a/src/main/java/com/beep/beep/domain/auth/presentation/dto/response/SignInResponse.java +++ b/src/main/java/com/beep/beep/domain/auth/presentation/dto/response/SignInRes.java @@ -8,7 +8,7 @@ @Getter @Builder @AllArgsConstructor -public class SignInResponse { +public class SignInRes { private String accessToken; private String refreshToken; } diff --git a/src/main/java/com/beep/beep/domain/auth/presentation/dto/response/TokenRefreshResponse.java b/src/main/java/com/beep/beep/domain/auth/presentation/dto/response/TokenRefreshRes.java similarity index 85% rename from src/main/java/com/beep/beep/domain/auth/presentation/dto/response/TokenRefreshResponse.java rename to src/main/java/com/beep/beep/domain/auth/presentation/dto/response/TokenRefreshRes.java index 64a89a6..9316e6b 100644 --- a/src/main/java/com/beep/beep/domain/auth/presentation/dto/response/TokenRefreshResponse.java +++ b/src/main/java/com/beep/beep/domain/auth/presentation/dto/response/TokenRefreshRes.java @@ -7,6 +7,6 @@ @Getter @Builder @AllArgsConstructor -public class TokenRefreshResponse { +public class TokenRefreshRes { private String accessToken; } diff --git a/src/main/java/com/beep/beep/domain/auth/service/AuthService.java b/src/main/java/com/beep/beep/domain/auth/service/AuthService.java index 61dd64e..cc60f51 100644 --- a/src/main/java/com/beep/beep/domain/auth/service/AuthService.java +++ b/src/main/java/com/beep/beep/domain/auth/service/AuthService.java @@ -1,14 +1,14 @@ package com.beep.beep.domain.auth.service; import com.beep.beep.domain.auth.mapper.AuthMapper; -import com.beep.beep.domain.auth.presentation.dto.request.SignInRequest; -import com.beep.beep.domain.auth.presentation.dto.request.SignUpRequest; -import com.beep.beep.domain.auth.presentation.dto.request.TokenRefreshRequest; -import com.beep.beep.domain.auth.presentation.dto.response.SignInResponse; -import com.beep.beep.domain.auth.presentation.dto.response.TokenRefreshResponse; -import com.beep.beep.domain.user.domain.UserEntity; +import com.beep.beep.domain.auth.presentation.dto.request.SignInReq; +import com.beep.beep.domain.auth.presentation.dto.request.SignUpReq; +import com.beep.beep.domain.auth.presentation.dto.request.TokenRefreshReq; +import com.beep.beep.domain.auth.presentation.dto.response.SignInRes; +import com.beep.beep.domain.auth.presentation.dto.response.TokenRefreshRes; +import com.beep.beep.domain.user.domain.User; import com.beep.beep.domain.user.domain.enums.UserType; -import com.beep.beep.domain.user.domain.repository.UserRepository; +import com.beep.beep.domain.user.domain.repository.UserRepo; import com.beep.beep.domain.user.exception.PasswordWrongException; import com.beep.beep.global.common.service.UserUtil; import com.beep.beep.global.security.jwt.JwtExtractor; @@ -33,50 +33,50 @@ public class AuthService { private final JwtProvider jwtProvider; private final JwtExtractor jwtExtractor; private final AuthMapper authMapper; - private final UserRepository userRepository; + private final UserRepo userRepository; private final UserUtil userUtil; /** 학생 회원가입 */ - public void studentSignUp(SignUpRequest request){ - signUp(request,STUDENT); + public void studentSignUp(SignUpReq req){ + signUp(req,STUDENT); } - public void teacherSignUp(SignUpRequest request){ - signUp(request,TEACHER); + public void teacherSignUp(SignUpReq req){ + signUp(req,TEACHER); } - public void adminSignUp(SignUpRequest request){ - signUp(request,ADMIN); + public void adminSignUp(SignUpReq req){ + signUp(req,ADMIN); } - public SignInResponse signIn(SignInRequest request){ - UserEntity user = userUtil.findUserById(request.getId()); + public SignInRes signIn(SignInReq req){ + User user = userUtil.findUserById(req.getId()); - if (!encoder.matches(request.getPassword(), user.getPassword())) + if (!encoder.matches(req.getPassword(), user.getPassword())) throw PasswordWrongException.EXCEPTION; - return SignInResponse.builder() + return SignInRes.builder() .accessToken(jwtProvider.generateAccessToken(user.getEmail(), user.getAuthority())) .refreshToken(jwtProvider.generateRefreshToken(user.getEmail(), user.getAuthority())) .build(); } - public TokenRefreshResponse refresh(TokenRefreshRequest request){ - Jws claims = jwtExtractor.getClaims(jwtExtractor.extractToken(request.getToken())); // 토큰 정보 발췌 + public TokenRefreshRes refresh(TokenRefreshReq req){ + Jws claims = jwtExtractor.getClaims(jwtExtractor.extractToken(req.getToken())); // 토큰 정보 발췌 if (jwtExtractor.isWrongType(claims, JwtType.REFRESH)) // refresh가 아니면 throw TokenTypeException.EXCEPTION; - return TokenRefreshResponse.builder() + return TokenRefreshRes.builder() .accessToken(jwtProvider.generateAccessToken(claims.getBody().getSubject(), (UserType) claims.getHeader().get("authority"))).build(); } - private void signUp(SignUpRequest request,UserType authority){ - existsById(request.getId()); // id 중복 체크 - userUtil.checkEmail(request.getEmail()); // email 중복 체크 + private void signUp(SignUpReq req, UserType authority){ + existsById(req.getId()); // id 중복 체크 + userUtil.checkEmail(req.getEmail()); // email 중복 체크 - request.setPassword(encoder.encode(request.getPassword())); // password 인코딩 - userRepository.save(authMapper.toUser(request,authority)); // 저장 + req.setPassword(encoder.encode(req.getPassword())); // password 인코딩 + userRepository.save(authMapper.toUser(req,authority)); // 저장 } private void existsById(String id){ diff --git a/src/main/java/com/beep/beep/domain/beep/domain/AttendanceEntity.java b/src/main/java/com/beep/beep/domain/beep/domain/Attendance.java similarity index 64% rename from src/main/java/com/beep/beep/domain/beep/domain/AttendanceEntity.java rename to src/main/java/com/beep/beep/domain/beep/domain/Attendance.java index 8aa961c..0dd1f30 100644 --- a/src/main/java/com/beep/beep/domain/beep/domain/AttendanceEntity.java +++ b/src/main/java/com/beep/beep/domain/beep/domain/Attendance.java @@ -1,17 +1,11 @@ package com.beep.beep.domain.beep.domain; -import com.beep.beep.domain.student.domain.StudentIdEntity; -import com.beep.beep.domain.user.domain.UserEntity; -import com.beep.beep.domain.user.presentation.dto.User; import com.beep.beep.global.common.entity.BaseTime; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; import jakarta.persistence.Table; import lombok.AccessLevel; -import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; @@ -22,7 +16,7 @@ @Table(name = "tb_attendance") @NoArgsConstructor(access = AccessLevel.PROTECTED) @SuperBuilder -public class AttendanceEntity extends BaseTime { +public class Attendance extends BaseTime { @Id private Long userIdx; diff --git a/src/main/java/com/beep/beep/domain/beep/domain/RoomEntity.java b/src/main/java/com/beep/beep/domain/beep/domain/Room.java similarity index 95% rename from src/main/java/com/beep/beep/domain/beep/domain/RoomEntity.java rename to src/main/java/com/beep/beep/domain/beep/domain/Room.java index 31b3697..7bb5412 100644 --- a/src/main/java/com/beep/beep/domain/beep/domain/RoomEntity.java +++ b/src/main/java/com/beep/beep/domain/beep/domain/Room.java @@ -14,7 +14,7 @@ @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Table(name = "tb_room") @SuperBuilder -public class RoomEntity { +public class Room { @Id private String code; diff --git a/src/main/java/com/beep/beep/domain/beep/domain/repository/AttendanceRepository.java b/src/main/java/com/beep/beep/domain/beep/domain/repository/AttendanceRepository.java index 85f03ba..184cec1 100644 --- a/src/main/java/com/beep/beep/domain/beep/domain/repository/AttendanceRepository.java +++ b/src/main/java/com/beep/beep/domain/beep/domain/repository/AttendanceRepository.java @@ -1,14 +1,8 @@ package com.beep.beep.domain.beep.domain.repository; -import com.beep.beep.domain.beep.domain.AttendanceEntity; +import com.beep.beep.domain.beep.domain.Attendance; import com.beep.beep.domain.beep.domain.repository.querydsl.AttendanceRepositoryCustom; -import com.beep.beep.domain.beep.presentation.dto.Attendance; import org.springframework.data.repository.CrudRepository; -import java.util.List; - -public interface AttendanceRepository extends CrudRepository , AttendanceRepositoryCustom { - - AttendanceEntity findByUserIdx(Long userIdx); - +public interface AttendanceRepository extends CrudRepository , AttendanceRepositoryCustom { } diff --git a/src/main/java/com/beep/beep/domain/beep/domain/repository/RoomRepository.java b/src/main/java/com/beep/beep/domain/beep/domain/repository/RoomRepository.java index d1e9f42..463a184 100644 --- a/src/main/java/com/beep/beep/domain/beep/domain/repository/RoomRepository.java +++ b/src/main/java/com/beep/beep/domain/beep/domain/repository/RoomRepository.java @@ -1,10 +1,9 @@ package com.beep.beep.domain.beep.domain.repository; -import com.beep.beep.domain.beep.domain.RoomEntity; +import com.beep.beep.domain.beep.domain.Room; import com.beep.beep.domain.beep.domain.repository.querydsl.RoomRepositoryCustom; import org.springframework.data.repository.CrudRepository; -public interface RoomRepository extends CrudRepository , RoomRepositoryCustom { - RoomEntity findByCode(String code); +public interface RoomRepository extends CrudRepository , RoomRepositoryCustom { } diff --git a/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/AttendanceRepositoryCustom.java b/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/AttendanceRepositoryCustom.java index 311617e..79342ca 100644 --- a/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/AttendanceRepositoryCustom.java +++ b/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/AttendanceRepositoryCustom.java @@ -1,13 +1,19 @@ package com.beep.beep.domain.beep.domain.repository.querydsl; -import com.beep.beep.domain.beep.presentation.dto.response.GetAttendanceResponse; -import com.beep.beep.domain.student.presentation.dto.response.StudentInfoResponse; -import com.beep.beep.domain.user.presentation.dto.User; +import com.beep.beep.domain.beep.presentation.dto.response.AttendanceByCodeRes; +import com.beep.beep.domain.student.presentation.dto.request.StudentByGradeClsReq; +import com.beep.beep.domain.student.presentation.dto.response.StudentByGradeClsRes; +import com.beep.beep.domain.student.presentation.dto.response.StudentByUserRes; +import com.beep.beep.domain.user.presentation.dto.UserVO; import java.util.List; public interface AttendanceRepositoryCustom { - List attendanceListByCode(String code); -// StudentInfoResponse studentInfo(User user); + List studentListByGradeCls(StudentByGradeClsReq request); + + List attendanceListByCode(String code); + + StudentByUserRes studentByUser(UserVO userVO); + } diff --git a/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/RoomRepositoryCustom.java b/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/RoomRepositoryCustom.java index d19951e..c9ab389 100644 --- a/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/RoomRepositoryCustom.java +++ b/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/RoomRepositoryCustom.java @@ -1,9 +1,9 @@ package com.beep.beep.domain.beep.domain.repository.querydsl; -import com.beep.beep.domain.beep.presentation.dto.Room; +import com.beep.beep.domain.beep.presentation.dto.RoomVO; import java.util.List; public interface RoomRepositoryCustom { - List roomListByName(String name); + List roomListByName(String name); } diff --git a/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/impl/AttendanceRepositoryCustomImpl.java b/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/impl/AttendanceRepositoryCustomImpl.java index 2639268..88a41fc 100644 --- a/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/impl/AttendanceRepositoryCustomImpl.java +++ b/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/impl/AttendanceRepositoryCustomImpl.java @@ -2,9 +2,11 @@ import com.beep.beep.domain.beep.domain.repository.querydsl.AttendanceRepositoryCustom; -import com.beep.beep.domain.beep.presentation.dto.response.GetAttendanceResponse; -import com.beep.beep.domain.student.presentation.dto.response.StudentInfoResponse; -import com.beep.beep.domain.user.presentation.dto.User; +import com.beep.beep.domain.beep.presentation.dto.response.AttendanceByCodeRes; +import com.beep.beep.domain.student.presentation.dto.request.StudentByGradeClsReq; +import com.beep.beep.domain.student.presentation.dto.response.StudentByGradeClsRes; +import com.beep.beep.domain.student.presentation.dto.response.StudentByUserRes; +import com.beep.beep.domain.user.presentation.dto.UserVO; import com.querydsl.core.types.ConstructorExpression; import com.querydsl.core.types.Projections; import com.querydsl.jpa.impl.JPAQueryFactory; @@ -13,10 +15,10 @@ import java.util.List; -import static com.beep.beep.domain.beep.domain.QAttendanceEntity.attendanceEntity; -import static com.beep.beep.domain.beep.domain.QRoomEntity.roomEntity; -import static com.beep.beep.domain.student.domain.QStudentIdEntity.studentIdEntity; -import static com.beep.beep.domain.user.domain.QUserEntity.userEntity; +import static com.beep.beep.domain.beep.domain.QAttendance.attendance; +import static com.beep.beep.domain.beep.domain.QRoom.room; +import static com.beep.beep.domain.student.domain.QStudentId.studentId; +import static com.beep.beep.domain.user.domain.QUser.user; @Repository @RequiredArgsConstructor @@ -24,44 +26,68 @@ public class AttendanceRepositoryCustomImpl implements AttendanceRepositoryCusto private final JPAQueryFactory query; + @Override + public List studentListByGradeCls(StudentByGradeClsReq req) { + return query.select(memberListConstructorExpression()) + .from(studentId) + .innerJoin(attendance).on(attendance.userIdx.eq(studentId.userIdx)) + .innerJoin(room).on(room.code.eq(attendance.code)) + .innerJoin(user).on(user.idx.eq(studentId.userIdx)) + .where(studentId.grade.eq(req.getGrade()),studentId.cls.eq(req.getCls())) + .orderBy(studentId.num.asc()) + .fetch(); + } + // room d에 누가 있는지 쿼리 // code로 attendance조회 , user -> name , room -> roomName , studentId 정보 @Override - public List attendanceListByCode(String code) { + public List attendanceListByCode(String code) { return query .select(attendanceListConstructorExpression()) - .from(attendanceEntity) - .where(attendanceEntity.code.eq(code)) - .orderBy(attendanceEntity.userIdx.asc()) + .from(attendance) + .innerJoin(user).on(user.idx.eq(attendance.userIdx)) + .innerJoin(studentId).on(studentId.userIdx.eq(attendance.userIdx)) + .innerJoin(room).on(room.code.eq(attendance.code)) + .where(attendance.code.eq(code)) + .orderBy(attendance.userIdx.asc()) .fetch(); } -// @Override -// public StudentInfoResponse studentInfo(User user) { -// return query.select(studentInfoConstructorExpression(user)) -// .from(attendanceEntity) -// .where(attendanceEntity.userIdx.eq(user.getIdx())) -// .fetch(); -// } - - private ConstructorExpression attendanceListConstructorExpression() { - return Projections.constructor(GetAttendanceResponse.class, - userEntity.name, - studentIdEntity.grade, - studentIdEntity.cls, - studentIdEntity.num); + @Override + public StudentByUserRes studentByUser(UserVO userVO) { + return query.select(studentInfoConstructorExpression(userVO)) + .from(attendance) + .innerJoin(user).on(user.idx.eq(attendance.userIdx)) + .innerJoin(studentId).on(studentId.userIdx.eq(attendance.userIdx)) + .innerJoin(room).on(room.code.eq(attendance.code)) + .where(attendance.userIdx.eq(userVO.getIdx())) + .fetchFirst(); } - - - private ConstructorExpression studentInfoConstructorExpression(User user) { - return Projections.constructor(StudentInfoResponse.class, - studentIdEntity.grade, - studentIdEntity.cls, - studentIdEntity.num, - roomEntity.name); + private ConstructorExpression attendanceListConstructorExpression() { + return Projections.constructor(AttendanceByCodeRes.class, + user.name, + studentId.grade, + studentId.cls, + studentId.num); } + private ConstructorExpression studentInfoConstructorExpression(UserVO vo) { + return Projections.constructor(StudentByUserRes.class, + user.name, + user.email, + studentId.grade, + studentId.cls, + studentId.num, + room.name); + } + private ConstructorExpression memberListConstructorExpression() { + return Projections.constructor(StudentByGradeClsRes.class, + user.name, + studentId.num, + room.floor, + room.name); + } } diff --git a/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/impl/RoomRepositoryCustomImpl.java b/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/impl/RoomRepositoryCustomImpl.java index d1f8d36..53d4925 100644 --- a/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/impl/RoomRepositoryCustomImpl.java +++ b/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/impl/RoomRepositoryCustomImpl.java @@ -2,8 +2,7 @@ import com.beep.beep.domain.beep.domain.repository.querydsl.RoomRepositoryCustom; -import com.beep.beep.domain.beep.presentation.dto.Attendance; -import com.beep.beep.domain.beep.presentation.dto.Room; +import com.beep.beep.domain.beep.presentation.dto.RoomVO; import com.querydsl.core.types.ConstructorExpression; import com.querydsl.core.types.Projections; import com.querydsl.jpa.impl.JPAQueryFactory; @@ -11,7 +10,7 @@ import org.springframework.stereotype.Repository; import java.util.List; -import static com.beep.beep.domain.beep.domain.QRoomEntity.roomEntity; +import static com.beep.beep.domain.beep.domain.QRoom.room; @Repository @RequiredArgsConstructor @@ -20,19 +19,19 @@ public class RoomRepositoryCustomImpl implements RoomRepositoryCustom { private final JPAQueryFactory query; @Override - public List roomListByName(String name) { + public List roomListByName(String name) { return query.select(roomConstructorExpression()) - .from(roomEntity) - .where(roomEntity.name.contains(name)) + .from(room) + .where(room.name.contains(name)) .fetch(); } - private ConstructorExpression roomConstructorExpression() { - return Projections.constructor(Room.class, - roomEntity.code, - roomEntity.name, - roomEntity.floor); + private ConstructorExpression roomConstructorExpression() { + return Projections.constructor(RoomVO.class, + room.code, + room.name, + room.floor); } } diff --git a/src/main/java/com/beep/beep/domain/beep/exception/NonExitException.java b/src/main/java/com/beep/beep/domain/beep/exception/NotExitedException.java similarity index 56% rename from src/main/java/com/beep/beep/domain/beep/exception/NonExitException.java rename to src/main/java/com/beep/beep/domain/beep/exception/NotExitedException.java index e03c07a..a0126f1 100644 --- a/src/main/java/com/beep/beep/domain/beep/exception/NonExitException.java +++ b/src/main/java/com/beep/beep/domain/beep/exception/NotExitedException.java @@ -4,10 +4,10 @@ import com.beep.beep.domain.beep.exception.error.BeepErrorProperty; import com.beep.beep.global.exception.BusinessException; -public class NonExitException extends BusinessException { - public static final NonExitException EXCEPTION = new NonExitException(); +public class NotExitedException extends BusinessException { + public static final NotExitedException EXCEPTION = new NotExitedException(); - private NonExitException(){ + private NotExitedException(){ super(BeepErrorProperty.NOT_EXITED); } diff --git a/src/main/java/com/beep/beep/domain/beep/mapper/BeepMapper.java b/src/main/java/com/beep/beep/domain/beep/mapper/BeepMapper.java index ceec2c7..ed7f923 100644 --- a/src/main/java/com/beep/beep/domain/beep/mapper/BeepMapper.java +++ b/src/main/java/com/beep/beep/domain/beep/mapper/BeepMapper.java @@ -1,49 +1,30 @@ package com.beep.beep.domain.beep.mapper; -import com.beep.beep.domain.beep.domain.AttendanceEntity; -import com.beep.beep.domain.beep.domain.RoomEntity; -import com.beep.beep.domain.beep.presentation.dto.Attendance; -import com.beep.beep.domain.beep.presentation.dto.response.GetAttendanceResponse; -import com.beep.beep.domain.beep.presentation.dto.Room; -import com.beep.beep.domain.student.domain.StudentIdEntity; -import com.beep.beep.domain.user.domain.UserEntity; -import com.beep.beep.domain.user.presentation.dto.User; +import com.beep.beep.domain.beep.domain.Attendance; +import com.beep.beep.domain.beep.presentation.dto.AttendanceVO; +import com.beep.beep.domain.user.presentation.dto.UserVO; import org.springframework.stereotype.Component; @Component public class BeepMapper { - public AttendanceEntity toEdit(Attendance attendance){ - return AttendanceEntity.builder() - .userIdx(attendance.getUserIdx()) - .code(attendance.getCode()).build(); - } - - public static GetAttendanceResponse toGetAttendanceDto(UserEntity user, StudentIdEntity studentId) { - return GetAttendanceResponse.builder() - .grade(studentId.getGrade()) - .cls(studentId.getCls()) - .num(studentId.getNum()).build(); - } - - public static Room toGetRoomDto(RoomEntity room) { - return Room.builder() - .name(room.getName()) - .code(room.getCode()) - .floor(room.getFloor()).build(); + public Attendance toEdit(AttendanceVO vo){ + return Attendance.builder() + .userIdx(vo.getUserIdx()) + .code(vo.getCode()).build(); } - public AttendanceEntity toAttendance(User user) { - return AttendanceEntity.builder() - .userIdx(user.getIdx()) + public Attendance toAttendance(UserVO userVO) { + return Attendance.builder() + .userIdx(userVO.getIdx()) .code("404").build(); } - public Attendance toAttendanceDto(AttendanceEntity attendanceEntity) { - return Attendance.builder() - .code(attendanceEntity.getCode()) - .userIdx(attendanceEntity.getUserIdx()).build(); + public AttendanceVO toAttendanceDto(Attendance attendance) { + return AttendanceVO.builder() + .code(attendance.getCode()) + .userIdx(attendance.getUserIdx()).build(); } } diff --git a/src/main/java/com/beep/beep/domain/beep/presentation/BeepController.java b/src/main/java/com/beep/beep/domain/beep/presentation/BeepController.java index 00be5a5..46e71e1 100644 --- a/src/main/java/com/beep/beep/domain/beep/presentation/BeepController.java +++ b/src/main/java/com/beep/beep/domain/beep/presentation/BeepController.java @@ -1,11 +1,11 @@ package com.beep.beep.domain.beep.presentation; -import com.beep.beep.domain.beep.presentation.dto.request.SaveAttendanceRequest; +import com.beep.beep.domain.beep.presentation.dto.request.InitializeAttendanceReq; import com.beep.beep.domain.beep.service.BeepService; -import com.beep.beep.domain.beep.presentation.dto.request.EnterRoomRequest; -import com.beep.beep.domain.beep.presentation.dto.request.ExitRoomRequest; -import com.beep.beep.domain.beep.presentation.dto.response.GetAttendanceResponse; -import com.beep.beep.domain.beep.presentation.dto.Room; +import com.beep.beep.domain.beep.presentation.dto.request.EnterRoomReq; +import com.beep.beep.domain.beep.presentation.dto.request.ExitRoomReq; +import com.beep.beep.domain.beep.presentation.dto.response.AttendanceByCodeRes; +import com.beep.beep.domain.beep.presentation.dto.RoomVO; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; @@ -32,17 +32,17 @@ public class BeepController { @PostMapping("/attendances") @ResponseStatus(HttpStatus.CREATED) @Operation(summary = "출석정보 초기화", description = "출석정보 초기값을 설정합니다.(student)") - public void saveAttendance( - @RequestBody SaveAttendanceRequest request + public void initializeAttendance( + @RequestBody InitializeAttendanceReq request ) { - beepService.saveAttendance(request); + beepService.initializeAttendance(request); } @PutMapping("/enter") @ResponseStatus(HttpStatus.CREATED) @Operation(summary = "입실 요청", description = "입실을 요청합니다.(student)") public void enterRoom( - @RequestBody EnterRoomRequest request + @RequestBody EnterRoomReq request ) { beepService.enter(request); } @@ -51,24 +51,25 @@ public void enterRoom( @ResponseStatus(HttpStatus.CREATED) @Operation(summary = "퇴실 요청", description = "퇴실을 요청합니다.(student)") public void exitRoom( - @RequestBody ExitRoomRequest request + @RequestBody ExitRoomReq request ) { beepService.exit(request); } @GetMapping("/rooms") @Operation(summary = "실 조회", description = "실 이름으로 실을 조회합니다.(teacher)") - public List getRooms( + public List roomListByName( @RequestParam String name ){ - return beepService.getRooms(name); + return beepService.roomListByName(name); } @GetMapping("/attendances") @Operation(summary = "출석 조회", description = "실 코드로 입실한 학생목록 조회합니다. (teacher)") - public List getAttendance( + public List attendanceByCode( @RequestParam String code ){ - return beepService.getAttendance(code); + return beepService.attendanceByCode(code); } + } diff --git a/src/main/java/com/beep/beep/domain/beep/presentation/dto/Attendance.java b/src/main/java/com/beep/beep/domain/beep/presentation/dto/AttendanceVO.java similarity index 91% rename from src/main/java/com/beep/beep/domain/beep/presentation/dto/Attendance.java rename to src/main/java/com/beep/beep/domain/beep/presentation/dto/AttendanceVO.java index 7ce1ded..721bb1d 100644 --- a/src/main/java/com/beep/beep/domain/beep/presentation/dto/Attendance.java +++ b/src/main/java/com/beep/beep/domain/beep/presentation/dto/AttendanceVO.java @@ -11,7 +11,7 @@ @AllArgsConstructor @NoArgsConstructor @Builder -public class Attendance { +public class AttendanceVO { private Long userIdx; private String code; diff --git a/src/main/java/com/beep/beep/domain/beep/presentation/dto/Room.java b/src/main/java/com/beep/beep/domain/beep/presentation/dto/RoomVO.java similarity index 91% rename from src/main/java/com/beep/beep/domain/beep/presentation/dto/Room.java rename to src/main/java/com/beep/beep/domain/beep/presentation/dto/RoomVO.java index 15e68b6..c3c5933 100644 --- a/src/main/java/com/beep/beep/domain/beep/presentation/dto/Room.java +++ b/src/main/java/com/beep/beep/domain/beep/presentation/dto/RoomVO.java @@ -7,7 +7,7 @@ @Getter @Builder @AllArgsConstructor -public class Room { +public class RoomVO { private String code; private String floor; private String name; diff --git a/src/main/java/com/beep/beep/domain/beep/presentation/dto/request/ExitRoomRequest.java b/src/main/java/com/beep/beep/domain/beep/presentation/dto/request/EnterRoomReq.java similarity index 79% rename from src/main/java/com/beep/beep/domain/beep/presentation/dto/request/ExitRoomRequest.java rename to src/main/java/com/beep/beep/domain/beep/presentation/dto/request/EnterRoomReq.java index 5d457ec..72092de 100644 --- a/src/main/java/com/beep/beep/domain/beep/presentation/dto/request/ExitRoomRequest.java +++ b/src/main/java/com/beep/beep/domain/beep/presentation/dto/request/EnterRoomReq.java @@ -4,7 +4,7 @@ import lombok.Getter; @Getter -public class ExitRoomRequest { +public class EnterRoomReq { private String code; diff --git a/src/main/java/com/beep/beep/domain/beep/presentation/dto/request/EnterRoomRequest.java b/src/main/java/com/beep/beep/domain/beep/presentation/dto/request/ExitRoomReq.java similarity index 79% rename from src/main/java/com/beep/beep/domain/beep/presentation/dto/request/EnterRoomRequest.java rename to src/main/java/com/beep/beep/domain/beep/presentation/dto/request/ExitRoomReq.java index e5c6910..1afed44 100644 --- a/src/main/java/com/beep/beep/domain/beep/presentation/dto/request/EnterRoomRequest.java +++ b/src/main/java/com/beep/beep/domain/beep/presentation/dto/request/ExitRoomReq.java @@ -4,7 +4,7 @@ import lombok.Getter; @Getter -public class EnterRoomRequest { +public class ExitRoomReq { private String code; diff --git a/src/main/java/com/beep/beep/domain/beep/presentation/dto/request/SaveAttendanceRequest.java b/src/main/java/com/beep/beep/domain/beep/presentation/dto/request/InitializeAttendanceReq.java similarity index 75% rename from src/main/java/com/beep/beep/domain/beep/presentation/dto/request/SaveAttendanceRequest.java rename to src/main/java/com/beep/beep/domain/beep/presentation/dto/request/InitializeAttendanceReq.java index 0d7ca50..97dfe1f 100644 --- a/src/main/java/com/beep/beep/domain/beep/presentation/dto/request/SaveAttendanceRequest.java +++ b/src/main/java/com/beep/beep/domain/beep/presentation/dto/request/InitializeAttendanceReq.java @@ -4,6 +4,6 @@ import lombok.Getter; @Getter -public class SaveAttendanceRequest { +public class InitializeAttendanceReq { private String email; } diff --git a/src/main/java/com/beep/beep/domain/beep/presentation/dto/response/GetAttendanceResponse.java b/src/main/java/com/beep/beep/domain/beep/presentation/dto/response/AttendanceByCodeRes.java similarity index 88% rename from src/main/java/com/beep/beep/domain/beep/presentation/dto/response/GetAttendanceResponse.java rename to src/main/java/com/beep/beep/domain/beep/presentation/dto/response/AttendanceByCodeRes.java index 80c4c1e..d8cae86 100644 --- a/src/main/java/com/beep/beep/domain/beep/presentation/dto/response/GetAttendanceResponse.java +++ b/src/main/java/com/beep/beep/domain/beep/presentation/dto/response/AttendanceByCodeRes.java @@ -7,7 +7,7 @@ @Getter @Builder @AllArgsConstructor -public class GetAttendanceResponse { +public class AttendanceByCodeRes { private String userName; private int grade; diff --git a/src/main/java/com/beep/beep/domain/beep/service/BeepService.java b/src/main/java/com/beep/beep/domain/beep/service/BeepService.java index 734f003..5b91974 100644 --- a/src/main/java/com/beep/beep/domain/beep/service/BeepService.java +++ b/src/main/java/com/beep/beep/domain/beep/service/BeepService.java @@ -2,16 +2,16 @@ import com.beep.beep.domain.beep.domain.repository.AttendanceRepository; import com.beep.beep.domain.beep.domain.repository.RoomRepository; -import com.beep.beep.domain.beep.exception.NonExitException; +import com.beep.beep.domain.beep.exception.NotExitedException; import com.beep.beep.domain.beep.exception.NotCurrentRoomException; import com.beep.beep.domain.beep.exception.RoomNotExistsException; import com.beep.beep.domain.beep.mapper.BeepMapper; -import com.beep.beep.domain.beep.presentation.dto.Attendance; -import com.beep.beep.domain.beep.presentation.dto.Room; -import com.beep.beep.domain.beep.presentation.dto.request.SaveAttendanceRequest; -import com.beep.beep.domain.beep.presentation.dto.request.EnterRoomRequest; -import com.beep.beep.domain.beep.presentation.dto.request.ExitRoomRequest; -import com.beep.beep.domain.beep.presentation.dto.response.GetAttendanceResponse; +import com.beep.beep.domain.beep.presentation.dto.AttendanceVO; +import com.beep.beep.domain.beep.presentation.dto.RoomVO; +import com.beep.beep.domain.beep.presentation.dto.request.InitializeAttendanceReq; +import com.beep.beep.domain.beep.presentation.dto.request.EnterRoomReq; +import com.beep.beep.domain.beep.presentation.dto.request.ExitRoomReq; +import com.beep.beep.domain.beep.presentation.dto.response.AttendanceByCodeRes; import com.beep.beep.global.common.service.UserUtil; import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; @@ -29,28 +29,28 @@ public class BeepService { private final RoomRepository roomRepository; private final AttendanceRepository attendanceRepository; - public void saveAttendance(SaveAttendanceRequest request){ - attendanceRepository.save(beepMapper.toAttendance(userUtil.findUserByEmail(request.getEmail()))); + public void initializeAttendance(InitializeAttendanceReq req){ + attendanceRepository.save(beepMapper.toAttendance(userUtil.findUserByEmail(req.getEmail()))); } @Transactional - public void enter(EnterRoomRequest request){ - String code = request.getCode(); + public void enter(EnterRoomReq req){ + String code = req.getCode(); existsByCode(code); // room 존재 여부 확인 - Attendance attendance = findUserAttendance(); // 유저 출석정보 조회 + AttendanceVO attendance = findUserAttendance(); // 유저 출석정보 조회 if (!Objects.equals(attendance.getCode(), "404")) - throw NonExitException.EXCEPTION; + throw NotExitedException.EXCEPTION; attendance.setCode(code); // room코드 변경 attendanceRepository.save(beepMapper.toEdit(attendance)); } @Transactional - public void exit(ExitRoomRequest request){ - String code = request.getCode(); + public void exit(ExitRoomReq req){ + String code = req.getCode(); existsByCode(code); - Attendance attendance = findUserAttendance(); + AttendanceVO attendance = findUserAttendance(); if (!Objects.equals(code, attendance.getCode())) throw NotCurrentRoomException.EXCEPTION; @@ -58,16 +58,16 @@ public void exit(ExitRoomRequest request){ attendanceRepository.save(beepMapper.toEdit(attendance)); } - public List getRooms(String name){ + public List roomListByName(String name){ return roomRepository.roomListByName(name); } - public List getAttendance(String code){ + public List attendanceByCode(String code){ return attendanceRepository.attendanceListByCode(code); } - private Attendance findUserAttendance(){ - return beepMapper.toAttendanceDto(attendanceRepository.findByUserIdx(userUtil.getCurrentUser().getIdx())); + private AttendanceVO findUserAttendance(){ + return beepMapper.toAttendanceDto(attendanceRepository.findById(userUtil.getCurrentUser().getIdx()).get()); } private void existsByCode(String code){ diff --git a/src/main/java/com/beep/beep/domain/student/domain/StudentIdEntity.java b/src/main/java/com/beep/beep/domain/student/domain/StudentId.java similarity index 94% rename from src/main/java/com/beep/beep/domain/student/domain/StudentIdEntity.java rename to src/main/java/com/beep/beep/domain/student/domain/StudentId.java index 9151393..23b8e9d 100644 --- a/src/main/java/com/beep/beep/domain/student/domain/StudentIdEntity.java +++ b/src/main/java/com/beep/beep/domain/student/domain/StudentId.java @@ -14,7 +14,7 @@ @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @SuperBuilder @Table(name = "tb_student_id") -public class StudentIdEntity { +public class StudentId { @Id private Long userIdx; diff --git a/src/main/java/com/beep/beep/domain/student/domain/repository/StudentIdRepository.java b/src/main/java/com/beep/beep/domain/student/domain/repository/StudentIdRepository.java index 7274304..16a791e 100644 --- a/src/main/java/com/beep/beep/domain/student/domain/repository/StudentIdRepository.java +++ b/src/main/java/com/beep/beep/domain/student/domain/repository/StudentIdRepository.java @@ -1,25 +1,8 @@ package com.beep.beep.domain.student.domain.repository; - -import com.beep.beep.domain.student.domain.StudentIdEntity; -import org.springframework.data.jpa.repository.Query; +import com.beep.beep.domain.student.domain.StudentId; +import com.beep.beep.domain.student.domain.repository.querydsl.StudentIdRepositoryCustom; import org.springframework.data.repository.CrudRepository; -import org.springframework.data.repository.query.Param; - -import java.util.List; - - -public interface StudentIdRepository extends CrudRepository { - - StudentIdEntity findByUserIdx(Long userIdx); - - @Query("SELECT s FROM StudentIdEntity s WHERE s.grade = :grade AND s.cls = :cls") - List findByGradeAndCls(@Param("grade") int grade, @Param("cls") int cls); - - @Query("SELECT DISTINCT s.cls FROM StudentIdEntity s WHERE s.grade = :grade") - List findClsByGrade(@Param("grade") int grade); - - @Query("SELECT COUNT(s) FROM StudentIdEntity s WHERE s.grade = :grade AND s.cls = :cls") - int countByCls(@Param("grade") int grade,@Param("cls") int cls); +public interface StudentIdRepository extends CrudRepository , StudentIdRepositoryCustom { } diff --git a/src/main/java/com/beep/beep/domain/student/domain/repository/querydsl/StudentIdRepositoryCustom.java b/src/main/java/com/beep/beep/domain/student/domain/repository/querydsl/StudentIdRepositoryCustom.java index 814b79a..80be594 100644 --- a/src/main/java/com/beep/beep/domain/student/domain/repository/querydsl/StudentIdRepositoryCustom.java +++ b/src/main/java/com/beep/beep/domain/student/domain/repository/querydsl/StudentIdRepositoryCustom.java @@ -1,8 +1,11 @@ package com.beep.beep.domain.student.domain.repository.querydsl; -import com.beep.beep.domain.student.presentation.dto.response.StudentInfoResponse; -import com.beep.beep.domain.user.presentation.dto.User; +import com.beep.beep.domain.student.presentation.dto.response.ClsByGradeRes; + +import java.util.List; public interface StudentIdRepositoryCustom { -// StudentInfoResponse studentInfo(User user); + + List clsListByGrade(int grade); + } diff --git a/src/main/java/com/beep/beep/domain/student/domain/repository/querydsl/StudentIdRepositoryCustomImpl.java b/src/main/java/com/beep/beep/domain/student/domain/repository/querydsl/StudentIdRepositoryCustomImpl.java index 0bc847d..985255f 100644 --- a/src/main/java/com/beep/beep/domain/student/domain/repository/querydsl/StudentIdRepositoryCustomImpl.java +++ b/src/main/java/com/beep/beep/domain/student/domain/repository/querydsl/StudentIdRepositoryCustomImpl.java @@ -1,18 +1,19 @@ package com.beep.beep.domain.student.domain.repository.querydsl; -import com.beep.beep.domain.student.domain.StudentIdEntity; -import com.beep.beep.domain.student.presentation.dto.response.StudentInfoResponse; -import com.beep.beep.domain.user.presentation.dto.User; -import com.querydsl.core.types.ConstructorExpression; +import com.beep.beep.domain.student.presentation.dto.response.ClsByGradeRes; import com.querydsl.core.types.Projections; +import com.querydsl.core.types.dsl.NumberExpression; import com.querydsl.jpa.impl.JPAQueryFactory; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; import java.util.List; -import static com.beep.beep.domain.beep.domain.QRoomEntity.roomEntity; -import static com.beep.beep.domain.student.domain.QStudentIdEntity.studentIdEntity; +import static com.beep.beep.domain.beep.domain.QAttendance.attendance; +import static com.beep.beep.domain.beep.domain.QRoom.room; +import static com.beep.beep.domain.student.domain.QStudentId.studentId; +import static com.beep.beep.domain.user.domain.QUser.user; + @Repository @RequiredArgsConstructor @@ -20,46 +21,18 @@ public class StudentIdRepositoryCustomImpl implements StudentIdRepositoryCustom private final JPAQueryFactory query; -// @Override -// public StudentInfoResponse studentInfo(User user) { -// return query.select(studentInfoConstructorExpression()); -// } -// -// private ConstructorExpression studentInfoConstructorExpression(User user) { -// return Projections.constructor(StudentInfoResponse.class, -// studentIdEntity.grade, -// studentIdEntity.cls, -// studentIdEntity.num, -// roomEntity.name); -// } -// - -// @Override -// public List findByGradeAndCls(int grade, int cls) { -// return query.selectFrom(studentIdEntity) -// .where(studentIdEntity.grade.eq(grade),studentIdEntity.cls.eq(cls)) -// .fetch(); -// } - -// @Override -// public List findClsByGrade(int grade) { -// return query.select(studentIdEntity.cls) -// .from(studentIdEntity) -// .where(studentIdEntity.grade.eq(grade)).fetch(); -// } + @Override + public List clsListByGrade(int grade) { + NumberExpression countExpression = studentId.count(); -// @Override -// public int countByCls(int grade, int cls) { -// return query.select(studentIdEntity.count()) -// .from(studentIdEntity) -// .where(studentIdEntity.grade.eq(grade) -// .and(studentIdEntity.cls.eq(cls))) -// .fetchOne(); -// } + return query + .select(Projections.constructor(ClsByGradeRes.class, + studentId.cls, + countExpression)) + .from(studentId) + .where(studentId.grade.eq(grade)) + .groupBy(studentId.cls) + .fetch(); + } -// public List findAllByName(String name) { -// return query.selectFrom(roomEntity) -// .where(roomEntity.name.contains(name)) -// .fetch(); -// } } diff --git a/src/main/java/com/beep/beep/domain/student/mapper/StudentMapper.java b/src/main/java/com/beep/beep/domain/student/mapper/StudentMapper.java index 5850f85..3761e4b 100644 --- a/src/main/java/com/beep/beep/domain/student/mapper/StudentMapper.java +++ b/src/main/java/com/beep/beep/domain/student/mapper/StudentMapper.java @@ -1,69 +1,17 @@ package com.beep.beep.domain.student.mapper; -import com.beep.beep.domain.beep.domain.RoomEntity; -import com.beep.beep.domain.student.domain.StudentIdEntity; -import com.beep.beep.domain.student.presentation.dto.request.StudentIdRequest; -import com.beep.beep.domain.student.presentation.dto.response.AdminStudentResponse; -import com.beep.beep.domain.student.presentation.dto.response.GetClsResponse; -import com.beep.beep.domain.student.presentation.dto.response.GetStudentResponse; -import com.beep.beep.domain.student.presentation.dto.response.SearchStudentResponse; -import com.beep.beep.domain.student.presentation.dto.response.StudentInfoResponse; -import com.beep.beep.domain.user.domain.UserEntity; -import com.beep.beep.domain.user.presentation.dto.User; +import com.beep.beep.domain.student.domain.StudentId; +import com.beep.beep.domain.student.presentation.dto.request.SaveStudentIdReq; +import com.beep.beep.domain.user.presentation.dto.UserVO; import org.springframework.stereotype.Component; @Component public class StudentMapper { - public static AdminStudentResponse toAdminStudentDto(UserEntity user, StudentIdEntity studentId) { - return AdminStudentResponse.builder() - .idx(user.getIdx()) - .id(user.getId()) - .name(user.getName()) - .email(user.getEmail()) - .grade(studentId.getGrade()) - .cls(studentId.getCls()) - .num(studentId.getNum()).build(); - } - - public static GetStudentResponse toGetStudentDto(StudentIdEntity studentId, UserEntity user, RoomEntity room) { - return GetStudentResponse.builder() - .name(user.getName()) - .grade(studentId.getGrade()) - .cls(studentId.getCls()) - .num(studentId.getNum()) - .room(room.getName()) - .floor(room.getFloor()).build(); - } - - public static GetClsResponse toGetClsDto(int cls, int headCount){ - return GetClsResponse.builder() - .cls(cls) - .headCount(headCount).build(); - } - - public static SearchStudentResponse toSearchStudentDto(UserEntity user, StudentIdEntity studentId, RoomEntity room) { - return SearchStudentResponse.builder() - .name(user.getName()) - .grade(studentId.getGrade()) - .cls(studentId.getCls()) - .num(studentId.getNum()) - .room(room.getName()).build(); - } - - public static StudentInfoResponse toStudentInfoDto(User user, StudentIdEntity studentId, RoomEntity room) { - return StudentInfoResponse.builder() - .name(user.getName()) - .email(user.getEmail()) - .grade(studentId.getGrade()) - .cls(studentId.getCls()) - .num(studentId.getNum()).build(); - } - - public StudentIdEntity toStudentId(User user, StudentIdRequest request) { - return StudentIdEntity.builder() - .userIdx(user.getIdx()) - .grade(request.getGrade()) - .cls(request.getCls()) - .num(request.getNum()).build(); + public StudentId toStudentId(UserVO userVO, SaveStudentIdReq req) { + return StudentId.builder() + .userIdx(userVO.getIdx()) + .grade(req.getGrade()) + .cls(req.getCls()) + .num(req.getNum()).build(); } } diff --git a/src/main/java/com/beep/beep/domain/student/presentation/StudentController.java b/src/main/java/com/beep/beep/domain/student/presentation/StudentController.java index c047846..ad8a4af 100644 --- a/src/main/java/com/beep/beep/domain/student/presentation/StudentController.java +++ b/src/main/java/com/beep/beep/domain/student/presentation/StudentController.java @@ -1,24 +1,23 @@ package com.beep.beep.domain.student.presentation; -import com.beep.beep.domain.student.presentation.dto.request.GetStudentRequest; -import com.beep.beep.domain.student.presentation.dto.request.StudentIdRequest; -import com.beep.beep.domain.student.presentation.dto.response.AdminStudentResponse; -import com.beep.beep.domain.student.presentation.dto.response.GetClsResponse; -import com.beep.beep.domain.student.presentation.dto.response.GetStudentResponse; -import com.beep.beep.domain.student.presentation.dto.response.SearchStudentResponse; -import com.beep.beep.domain.student.presentation.dto.response.StudentInfoResponse; +import com.beep.beep.domain.student.presentation.dto.request.StudentByGradeClsReq; +import com.beep.beep.domain.student.presentation.dto.request.SaveStudentIdReq; +import com.beep.beep.domain.student.presentation.dto.response.StudentRes; +import com.beep.beep.domain.student.presentation.dto.response.ClsByGradeRes; +import com.beep.beep.domain.student.presentation.dto.response.StudentByGradeClsRes; +import com.beep.beep.domain.student.presentation.dto.response.StudentByNameRes; +import com.beep.beep.domain.student.presentation.dto.response.StudentByUserRes; import com.beep.beep.domain.student.service.StudentService; +import com.beep.beep.global.common.dto.request.PageRequest; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseStatus; @@ -38,45 +37,47 @@ public class StudentController { @ResponseStatus(HttpStatus.CREATED) @Operation(summary = "학번 저장", description = "학번을 저장합니다. (student)") public void saveStudentId( - @RequestBody StudentIdRequest request + @RequestBody SaveStudentIdReq req ){ - studentService.saveStudentId(request); + studentService.saveStudentId(req); } @GetMapping("") @Operation(summary = "학생계정 조회", description = "학생계정 전부 조회합니다. (admin)") - public List studentList(){ - return studentService.studentList(); + public List studentList( + @ModelAttribute PageRequest req + ){ + return studentService.studentList(req); } @GetMapping("/info") @Operation(summary = "학생프로필 조회", description = "학생프로필 조회입니다 (student)") - public StudentInfoResponse getInfo() { - return studentService.getStudentInfo(); + public StudentByUserRes studentByUser() { + return studentService.studentByUser(); } @GetMapping("/cls") @Operation(summary = "반 조회", description = "학년 param로 반을 조회합니다.(teacher)") - public List getCls( + public List clsListByGrade( @RequestParam int grade ){ - return studentService.getCls(grade); + return studentService.clsListByGrade(grade); } @GetMapping("/member") @Operation(summary = "반 구성원 조회", description = "학년-반으로 반 구성원 목록을 조회합니다. (teacher)") - public List getStudents( - @ModelAttribute GetStudentRequest request + public List studentListByGradeCls( + @ModelAttribute StudentByGradeClsReq req ){ - return studentService.getStudents(request); + return studentService.studentListByGradeCls(req); } @GetMapping("/name") @Operation(summary = "학생 조회", description = "학생이름으로 학생을 조회합니다.(teacher)") - public List searchStudents( + public List studentListByName( @RequestParam String name ){ - return studentService.searchStudents(name); + return studentService.studentListByName(name); } } diff --git a/src/main/java/com/beep/beep/domain/student/presentation/dto/request/StudentIdRequest.java b/src/main/java/com/beep/beep/domain/student/presentation/dto/request/SaveStudentIdReq.java similarity index 85% rename from src/main/java/com/beep/beep/domain/student/presentation/dto/request/StudentIdRequest.java rename to src/main/java/com/beep/beep/domain/student/presentation/dto/request/SaveStudentIdReq.java index 8e57b6b..6f74a56 100644 --- a/src/main/java/com/beep/beep/domain/student/presentation/dto/request/StudentIdRequest.java +++ b/src/main/java/com/beep/beep/domain/student/presentation/dto/request/SaveStudentIdReq.java @@ -3,7 +3,7 @@ import lombok.Getter; @Getter -public class StudentIdRequest { +public class SaveStudentIdReq { private String email; private int grade; diff --git a/src/main/java/com/beep/beep/domain/student/presentation/dto/request/GetStudentRequest.java b/src/main/java/com/beep/beep/domain/student/presentation/dto/request/StudentByGradeClsReq.java similarity index 82% rename from src/main/java/com/beep/beep/domain/student/presentation/dto/request/GetStudentRequest.java rename to src/main/java/com/beep/beep/domain/student/presentation/dto/request/StudentByGradeClsReq.java index a24279f..d97099d 100644 --- a/src/main/java/com/beep/beep/domain/student/presentation/dto/request/GetStudentRequest.java +++ b/src/main/java/com/beep/beep/domain/student/presentation/dto/request/StudentByGradeClsReq.java @@ -6,7 +6,7 @@ @Getter @Setter -public class GetStudentRequest { +public class StudentByGradeClsReq { private int grade; private int cls; diff --git a/src/main/java/com/beep/beep/domain/student/presentation/dto/response/GetClsResponse.java b/src/main/java/com/beep/beep/domain/student/presentation/dto/response/ClsByGradeRes.java similarity index 69% rename from src/main/java/com/beep/beep/domain/student/presentation/dto/response/GetClsResponse.java rename to src/main/java/com/beep/beep/domain/student/presentation/dto/response/ClsByGradeRes.java index 0ad087d..66d18ce 100644 --- a/src/main/java/com/beep/beep/domain/student/presentation/dto/response/GetClsResponse.java +++ b/src/main/java/com/beep/beep/domain/student/presentation/dto/response/ClsByGradeRes.java @@ -7,8 +7,7 @@ @Getter @Builder @AllArgsConstructor -public class GetClsResponse { - private int cls; - private int headCount; - +public class ClsByGradeRes { + private Integer cls; + private Long headCount; } diff --git a/src/main/java/com/beep/beep/domain/student/presentation/dto/response/GetStudentResponse.java b/src/main/java/com/beep/beep/domain/student/presentation/dto/response/StudentByGradeClsRes.java similarity index 71% rename from src/main/java/com/beep/beep/domain/student/presentation/dto/response/GetStudentResponse.java rename to src/main/java/com/beep/beep/domain/student/presentation/dto/response/StudentByGradeClsRes.java index d0f3ca7..e0a5b2d 100644 --- a/src/main/java/com/beep/beep/domain/student/presentation/dto/response/GetStudentResponse.java +++ b/src/main/java/com/beep/beep/domain/student/presentation/dto/response/StudentByGradeClsRes.java @@ -6,15 +6,14 @@ @Getter @Builder @AllArgsConstructor -public class GetStudentResponse { +public class StudentByGradeClsRes { private String name; - private int grade; - private int cls; private int num; - private String room; private String floor; + private String roomName; + } diff --git a/src/main/java/com/beep/beep/domain/student/presentation/dto/response/StudentInfoResponse.java b/src/main/java/com/beep/beep/domain/student/presentation/dto/response/StudentByNameRes.java similarity index 83% rename from src/main/java/com/beep/beep/domain/student/presentation/dto/response/StudentInfoResponse.java rename to src/main/java/com/beep/beep/domain/student/presentation/dto/response/StudentByNameRes.java index a96ae61..353edae 100644 --- a/src/main/java/com/beep/beep/domain/student/presentation/dto/response/StudentInfoResponse.java +++ b/src/main/java/com/beep/beep/domain/student/presentation/dto/response/StudentByNameRes.java @@ -7,9 +7,9 @@ @Getter @Builder @AllArgsConstructor -public class StudentInfoResponse { +public class StudentByNameRes { + private String name; - private String email; private int grade; private int cls; diff --git a/src/main/java/com/beep/beep/domain/student/presentation/dto/response/SearchStudentResponse.java b/src/main/java/com/beep/beep/domain/student/presentation/dto/response/StudentByUserRes.java similarity index 56% rename from src/main/java/com/beep/beep/domain/student/presentation/dto/response/SearchStudentResponse.java rename to src/main/java/com/beep/beep/domain/student/presentation/dto/response/StudentByUserRes.java index 3f28191..dd4e4ff 100644 --- a/src/main/java/com/beep/beep/domain/student/presentation/dto/response/SearchStudentResponse.java +++ b/src/main/java/com/beep/beep/domain/student/presentation/dto/response/StudentByUserRes.java @@ -7,14 +7,14 @@ @Getter @Builder @AllArgsConstructor -public class SearchStudentResponse { - +public class StudentByUserRes { private String name; + private String email; - private int grade; - private int cls; - private int num; + private Integer grade; + private Integer cls; + private Integer num; - private String room; + private String roomName; } diff --git a/src/main/java/com/beep/beep/domain/student/presentation/dto/response/AdminStudentResponse.java b/src/main/java/com/beep/beep/domain/student/presentation/dto/response/StudentRes.java similarity index 86% rename from src/main/java/com/beep/beep/domain/student/presentation/dto/response/AdminStudentResponse.java rename to src/main/java/com/beep/beep/domain/student/presentation/dto/response/StudentRes.java index b67285e..9376123 100644 --- a/src/main/java/com/beep/beep/domain/student/presentation/dto/response/AdminStudentResponse.java +++ b/src/main/java/com/beep/beep/domain/student/presentation/dto/response/StudentRes.java @@ -7,7 +7,7 @@ @Getter @Builder @AllArgsConstructor -public class AdminStudentResponse { +public class StudentRes { private Long idx; private String id; private String name; @@ -16,4 +16,6 @@ public class AdminStudentResponse { private int grade; private int cls; private int num; + + private String code; } diff --git a/src/main/java/com/beep/beep/domain/student/service/StudentService.java b/src/main/java/com/beep/beep/domain/student/service/StudentService.java index 3fdf454..f1258b6 100644 --- a/src/main/java/com/beep/beep/domain/student/service/StudentService.java +++ b/src/main/java/com/beep/beep/domain/student/service/StudentService.java @@ -1,97 +1,55 @@ package com.beep.beep.domain.student.service; import com.beep.beep.domain.beep.domain.repository.AttendanceRepository; -import com.beep.beep.domain.beep.domain.repository.RoomRepository; -import com.beep.beep.domain.beep.mapper.BeepMapper; -import com.beep.beep.domain.beep.presentation.dto.Attendance; import com.beep.beep.domain.student.domain.repository.StudentIdRepository; import com.beep.beep.domain.student.mapper.StudentMapper; -import com.beep.beep.domain.student.presentation.dto.request.GetStudentRequest; -import com.beep.beep.domain.student.presentation.dto.request.StudentIdRequest; -import com.beep.beep.domain.student.presentation.dto.response.AdminStudentResponse; -import com.beep.beep.domain.beep.domain.RoomEntity; -import com.beep.beep.domain.student.domain.StudentIdEntity; -import com.beep.beep.domain.student.presentation.dto.response.GetClsResponse; -import com.beep.beep.domain.student.presentation.dto.response.GetStudentResponse; -import com.beep.beep.domain.student.presentation.dto.response.SearchStudentResponse; -import com.beep.beep.domain.student.presentation.dto.response.StudentInfoResponse; -import com.beep.beep.domain.user.domain.UserEntity; -import com.beep.beep.domain.user.domain.repository.UserRepository; -import com.beep.beep.domain.user.presentation.dto.User; +import com.beep.beep.domain.student.presentation.dto.request.StudentByGradeClsReq; +import com.beep.beep.domain.student.presentation.dto.request.SaveStudentIdReq; +import com.beep.beep.domain.student.presentation.dto.response.StudentRes; +import com.beep.beep.domain.student.presentation.dto.response.ClsByGradeRes; +import com.beep.beep.domain.student.presentation.dto.response.StudentByGradeClsRes; +import com.beep.beep.domain.student.presentation.dto.response.StudentByNameRes; +import com.beep.beep.domain.student.presentation.dto.response.StudentByUserRes; +import com.beep.beep.domain.user.domain.repository.UserRepo; +import com.beep.beep.global.common.dto.request.PageRequest; import com.beep.beep.global.common.service.UserUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.List; -import static com.beep.beep.domain.user.domain.enums.UserType.STUDENT; - @Service @RequiredArgsConstructor public class StudentService { private final StudentMapper studentMapper; - private final BeepMapper beepMapper; private final UserUtil userUtil; - private final RoomRepository roomRepository; private final StudentIdRepository studentIdRepository; private final AttendanceRepository attendanceRepository; - private final UserRepository userRepository; + private final UserRepo userRepository; - public void saveStudentId(StudentIdRequest request){ + public void saveStudentId(SaveStudentIdReq request){ studentIdRepository.save(studentMapper.toStudentId(userUtil.findUserByEmail(request.getEmail()),request)); } - public List studentList(){ - List studentList = userRepository.findAllByAuthority(STUDENT); - System.out.println(studentList.get(0)); - return studentList.stream() - .map(student -> - StudentMapper.toAdminStudentDto(student,studentIdRepository.findByUserIdx(student.getIdx()))) - .toList(); + public List studentList(PageRequest request){ + return userRepository.studentList(request); } - public StudentInfoResponse getStudentInfo() { - User user = userUtil.getCurrentUser(); - Long userIdx = user.getIdx(); - return StudentMapper.toStudentInfoDto(user, studentIdRepository.findByUserIdx(userIdx), findRoomByUserIdx(userIdx)); + public StudentByUserRes studentByUser() { + return attendanceRepository.studentByUser(userUtil.getCurrentUser()); } - public List getStudents(GetStudentRequest request){ - List studentIdEntityList = studentIdRepository.findByGradeAndCls(request.getGrade(), request.getCls()); - - return studentIdEntityList.stream() - .map(studentId -> { - Long userIdx = studentId.getUserIdx(); - return StudentMapper.toGetStudentDto(studentId, userRepository.findByIdx(userIdx), findRoomByUserIdx(userIdx)); - }) - .toList(); + public List studentListByGradeCls(StudentByGradeClsReq request){ + return attendanceRepository.studentListByGradeCls(request); } - public List searchStudents(String name){ - List userEntityList = userRepository.findByName(name, STUDENT); - // 2. studentId 찾기 , attendance -> roomName 찾기 - return userEntityList.stream() - .map(user -> { - Long userIdx = user.getIdx(); - return StudentMapper.toSearchStudentDto(user, studentIdRepository.findByUserIdx(userIdx), findRoomByUserIdx(userIdx)); - }) - .toList(); - } - - public List getCls(int grade){ - List clsList = studentIdRepository.findClsByGrade(grade); - - return clsList.stream() - .map( cls -> { - int headCount = studentIdRepository.countByCls(grade,cls); - return StudentMapper.toGetClsDto(cls,headCount); - }).toList(); + public List studentListByName(String name){ + return userRepository.studentListByName(name); } - private RoomEntity findRoomByUserIdx(Long userIdx) { - Attendance attendance = beepMapper.toAttendanceDto(attendanceRepository.findByUserIdx(userIdx)); - return roomRepository.findByCode(attendance.getCode()); + public List clsListByGrade(int grade){ + return studentIdRepository.clsListByGrade(grade); } } diff --git a/src/main/java/com/beep/beep/domain/teacher/domain/JobEntity.java b/src/main/java/com/beep/beep/domain/teacher/domain/Job.java similarity index 96% rename from src/main/java/com/beep/beep/domain/teacher/domain/JobEntity.java rename to src/main/java/com/beep/beep/domain/teacher/domain/Job.java index 1b642ba..ca31e76 100644 --- a/src/main/java/com/beep/beep/domain/teacher/domain/JobEntity.java +++ b/src/main/java/com/beep/beep/domain/teacher/domain/Job.java @@ -16,7 +16,7 @@ @Getter @SuperBuilder @Table(name = "tb_job") @NoArgsConstructor(access = AccessLevel.PROTECTED) -public class JobEntity { +public class Job { @Id private Long userIdx; diff --git a/src/main/java/com/beep/beep/domain/teacher/domain/repository/JobRepository.java b/src/main/java/com/beep/beep/domain/teacher/domain/repository/JobRepository.java index 5c780c6..6be7de7 100644 --- a/src/main/java/com/beep/beep/domain/teacher/domain/repository/JobRepository.java +++ b/src/main/java/com/beep/beep/domain/teacher/domain/repository/JobRepository.java @@ -1,12 +1,7 @@ package com.beep.beep.domain.teacher.domain.repository; -import com.beep.beep.domain.teacher.domain.JobEntity; - -import org.springframework.data.jpa.repository.JpaRepository; - -import java.util.Optional; - -public interface JobRepository extends JpaRepository { - Optional findByUserIdx(Long userIdx); +import com.beep.beep.domain.teacher.domain.Job; +import org.springframework.data.repository.CrudRepository; +public interface JobRepository extends CrudRepository { } diff --git a/src/main/java/com/beep/beep/domain/teacher/mapper/TeacherMapper.java b/src/main/java/com/beep/beep/domain/teacher/mapper/TeacherMapper.java index ff667dd..e60e5bc 100644 --- a/src/main/java/com/beep/beep/domain/teacher/mapper/TeacherMapper.java +++ b/src/main/java/com/beep/beep/domain/teacher/mapper/TeacherMapper.java @@ -1,39 +1,19 @@ package com.beep.beep.domain.teacher.mapper; -import com.beep.beep.domain.teacher.domain.JobEntity; -import com.beep.beep.domain.teacher.presentation.dto.request.SaveJobRequest; -import com.beep.beep.domain.teacher.presentation.dto.response.AdminTeacherResponse; -import com.beep.beep.domain.teacher.presentation.dto.response.TeacherInfoResponse; -import com.beep.beep.domain.user.domain.UserEntity; -import com.beep.beep.domain.user.presentation.dto.User; +import com.beep.beep.domain.teacher.domain.Job; +import com.beep.beep.domain.teacher.presentation.dto.request.SaveJobReq; +import com.beep.beep.domain.user.presentation.dto.UserVO; import org.springframework.stereotype.Component; @Component public class TeacherMapper { - public JobEntity toJob(User user, SaveJobRequest request) { - return JobEntity.builder() + public Job toJob(UserVO userVO, SaveJobReq request) { + return Job.builder() .job(request.getJob()) .department(request.getDepartment()) - .userIdx(user.getIdx()).build(); + .userIdx(userVO.getIdx()).build(); } - public static AdminTeacherResponse toAdminTeacherDto(UserEntity user, JobEntity job) { - return AdminTeacherResponse.builder() - .idx(user.getIdx()) - .id(user.getId()) - .email(user.getEmail()) - .name(user.getName()) - .department(job.getDepartment()) - .job(job.getJob()).build(); - } - - public static TeacherInfoResponse toTeacherInfoDto(User user, JobEntity job) { - return TeacherInfoResponse.builder() - .name(user.getName()) - .email(user.getEmail()) - .department(job.getDepartment()) - .job(job.getJob()).build(); - } } diff --git a/src/main/java/com/beep/beep/domain/teacher/presentation/TeacherController.java b/src/main/java/com/beep/beep/domain/teacher/presentation/TeacherController.java index f3524db..2220230 100644 --- a/src/main/java/com/beep/beep/domain/teacher/presentation/TeacherController.java +++ b/src/main/java/com/beep/beep/domain/teacher/presentation/TeacherController.java @@ -1,18 +1,19 @@ package com.beep.beep.domain.teacher.presentation; -import com.beep.beep.domain.teacher.presentation.dto.request.SaveJobRequest; -import com.beep.beep.domain.teacher.presentation.dto.response.AdminTeacherResponse; -import com.beep.beep.domain.teacher.presentation.dto.response.TeacherInfoResponse; +import com.beep.beep.domain.teacher.presentation.dto.request.SaveJobReq; +import com.beep.beep.domain.teacher.presentation.dto.response.TeacherRes; +import com.beep.beep.domain.teacher.presentation.dto.response.TeacherByUserRes; import com.beep.beep.domain.teacher.service.TeacherService; +import com.beep.beep.global.common.dto.request.PageRequest; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; @@ -31,22 +32,23 @@ public class TeacherController { @ResponseStatus(HttpStatus.CREATED) @Operation(summary = "직책 저장", description = "선생님 직책을 저장합니다. (teacher)") public void saveJob( - @RequestBody SaveJobRequest request + @RequestBody SaveJobReq req ){ - teacherService.saveJob(request); + teacherService.saveJob(req); } @GetMapping("") @Operation(summary = "선생님계정 조회", description = "선생님계정 전부 조회합니다. (admin)") - public List teacherList(){ - return teacherService.teacherList(); + public List teacherList( + @ModelAttribute PageRequest request + ){ + return teacherService.teacherList(request); } @GetMapping("/info") @Operation(summary = "선생님프로필 조회", description = "선생님프로필 조회합니다. (teacher)") - public TeacherInfoResponse getInfo() { - System.out.println("일단 왔음"); - return teacherService.getTeacherInfo(); + public TeacherByUserRes teacherByUser() { + return teacherService.teacherByUser(); } diff --git a/src/main/java/com/beep/beep/domain/teacher/presentation/dto/request/SaveJobRequest.java b/src/main/java/com/beep/beep/domain/teacher/presentation/dto/request/SaveJobReq.java similarity index 85% rename from src/main/java/com/beep/beep/domain/teacher/presentation/dto/request/SaveJobRequest.java rename to src/main/java/com/beep/beep/domain/teacher/presentation/dto/request/SaveJobReq.java index fc58e1b..5670dd6 100644 --- a/src/main/java/com/beep/beep/domain/teacher/presentation/dto/request/SaveJobRequest.java +++ b/src/main/java/com/beep/beep/domain/teacher/presentation/dto/request/SaveJobReq.java @@ -3,7 +3,7 @@ import lombok.Getter; @Getter -public class SaveJobRequest { +public class SaveJobReq { private String email; private String job; private String department; diff --git a/src/main/java/com/beep/beep/domain/teacher/presentation/dto/response/TeacherInfoResponse.java b/src/main/java/com/beep/beep/domain/teacher/presentation/dto/response/TeacherByUserRes.java similarity index 89% rename from src/main/java/com/beep/beep/domain/teacher/presentation/dto/response/TeacherInfoResponse.java rename to src/main/java/com/beep/beep/domain/teacher/presentation/dto/response/TeacherByUserRes.java index 8943dc3..b7fed01 100644 --- a/src/main/java/com/beep/beep/domain/teacher/presentation/dto/response/TeacherInfoResponse.java +++ b/src/main/java/com/beep/beep/domain/teacher/presentation/dto/response/TeacherByUserRes.java @@ -7,7 +7,7 @@ @Getter @Builder @AllArgsConstructor -public class TeacherInfoResponse { +public class TeacherByUserRes { private String name; private String email; diff --git a/src/main/java/com/beep/beep/domain/teacher/presentation/dto/response/AdminTeacherResponse.java b/src/main/java/com/beep/beep/domain/teacher/presentation/dto/response/TeacherRes.java similarity index 90% rename from src/main/java/com/beep/beep/domain/teacher/presentation/dto/response/AdminTeacherResponse.java rename to src/main/java/com/beep/beep/domain/teacher/presentation/dto/response/TeacherRes.java index 325792b..454d900 100644 --- a/src/main/java/com/beep/beep/domain/teacher/presentation/dto/response/AdminTeacherResponse.java +++ b/src/main/java/com/beep/beep/domain/teacher/presentation/dto/response/TeacherRes.java @@ -6,7 +6,7 @@ @Getter @Builder @AllArgsConstructor -public class AdminTeacherResponse { +public class TeacherRes { private Long idx; private String id; diff --git a/src/main/java/com/beep/beep/domain/teacher/service/TeacherService.java b/src/main/java/com/beep/beep/domain/teacher/service/TeacherService.java index 08a3fb3..404a94c 100644 --- a/src/main/java/com/beep/beep/domain/teacher/service/TeacherService.java +++ b/src/main/java/com/beep/beep/domain/teacher/service/TeacherService.java @@ -1,16 +1,12 @@ package com.beep.beep.domain.teacher.service; -import com.beep.beep.domain.teacher.domain.JobEntity; import com.beep.beep.domain.teacher.domain.repository.JobRepository; -import com.beep.beep.domain.teacher.exception.JobNotFoundException; import com.beep.beep.domain.teacher.mapper.TeacherMapper; -import com.beep.beep.domain.teacher.presentation.dto.request.SaveJobRequest; -import com.beep.beep.domain.teacher.presentation.dto.response.AdminTeacherResponse; -import com.beep.beep.domain.teacher.presentation.dto.response.TeacherInfoResponse; -import com.beep.beep.domain.user.domain.UserEntity; -import com.beep.beep.domain.user.domain.enums.UserType; -import com.beep.beep.domain.user.domain.repository.UserRepository; -import com.beep.beep.domain.user.presentation.dto.User; +import com.beep.beep.domain.teacher.presentation.dto.request.SaveJobReq; +import com.beep.beep.domain.teacher.presentation.dto.response.TeacherRes; +import com.beep.beep.domain.teacher.presentation.dto.response.TeacherByUserRes; +import com.beep.beep.domain.user.domain.repository.UserRepo; +import com.beep.beep.global.common.dto.request.PageRequest; import com.beep.beep.global.common.service.UserUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -23,31 +19,19 @@ public class TeacherService { private final TeacherMapper teacherMapper; private final JobRepository jobRepository; - private final UserRepository userRepository; + private final UserRepo userRepository; private final UserUtil userUtil; - public void saveJob(SaveJobRequest request){ - jobRepository.save(teacherMapper.toJob(userUtil.findUserByEmail(request.getEmail()),request)); + public void saveJob(SaveJobReq req){ + jobRepository.save(teacherMapper.toJob(userUtil.findUserByEmail(req.getEmail()),req)); } - public List teacherList() { - List teacherList = userRepository.findAllByAuthority(UserType.TEACHER); - - return teacherList.stream() - .map(teacher -> - TeacherMapper.toAdminTeacherDto(teacher,findByUserIdx(teacher.getIdx()))) - .toList(); - } - - public TeacherInfoResponse getTeacherInfo(){ - User user = userUtil.getCurrentUser(); - return TeacherMapper.toTeacherInfoDto(user, findByUserIdx(user.getIdx())); + public List teacherList(PageRequest request) { + return userRepository.teacherList(request); } - private JobEntity findByUserIdx(Long userIdx){ - return jobRepository.findByUserIdx(userIdx) - .orElseThrow(() -> JobNotFoundException.EXCEPTION); + public TeacherByUserRes teacherByUser(){ + return userRepository.teacherByUser(userUtil.getCurrentUser()); } - } diff --git a/src/main/java/com/beep/beep/domain/user/domain/UserEntity.java b/src/main/java/com/beep/beep/domain/user/domain/User.java similarity index 97% rename from src/main/java/com/beep/beep/domain/user/domain/UserEntity.java rename to src/main/java/com/beep/beep/domain/user/domain/User.java index 106b298..2eb1f16 100644 --- a/src/main/java/com/beep/beep/domain/user/domain/UserEntity.java +++ b/src/main/java/com/beep/beep/domain/user/domain/User.java @@ -20,7 +20,7 @@ @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Table(name = "tb_user") @SuperBuilder -public class UserEntity { +public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/src/main/java/com/beep/beep/domain/user/domain/repository/UserRepo.java b/src/main/java/com/beep/beep/domain/user/domain/repository/UserRepo.java new file mode 100644 index 0000000..08ac995 --- /dev/null +++ b/src/main/java/com/beep/beep/domain/user/domain/repository/UserRepo.java @@ -0,0 +1,20 @@ +package com.beep.beep.domain.user.domain.repository; + +import com.beep.beep.domain.user.domain.User; +import com.beep.beep.domain.user.domain.repository.querydsl.UserRepoCustom; +import org.springframework.data.repository.CrudRepository; + +import java.util.Optional; + +public interface UserRepo extends CrudRepository , UserRepoCustom { + + boolean existsByEmail(String email); + + boolean existsById(String id); + + Optional findById(String id); + + Optional findByEmail(String email); + + +} diff --git a/src/main/java/com/beep/beep/domain/user/domain/repository/UserRepository.java b/src/main/java/com/beep/beep/domain/user/domain/repository/UserRepository.java deleted file mode 100644 index a3fdff6..0000000 --- a/src/main/java/com/beep/beep/domain/user/domain/repository/UserRepository.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.beep.beep.domain.user.domain.repository; - -import com.beep.beep.domain.user.domain.UserEntity; -import com.beep.beep.domain.user.domain.enums.UserType; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.CrudRepository; -import org.springframework.data.repository.query.Param; - -import java.util.List; -import java.util.Optional; - -public interface UserRepository extends CrudRepository { - - UserEntity findByIdx(Long idx); - - boolean existsByEmail(String email); - boolean existsById(String id); - - @Query("SELECT s FROM UserEntity s WHERE s.id = :id AND s.email = :email") - Optional findByIdEmail(@Param("id") String id, @Param("email") String email); - - @Query("SELECT s FROM UserEntity s WHERE (s.authority = :authority) AND (s.name LIKE %:name%)") - List findByName(@Param("name") String name, @Param("authority") UserType authority); - - @Query("SELECT s FROM UserEntity s WHERE s.authority = :authority") - List findAllByAuthority(@Param("authority") UserType authority); - - Optional findById(String id); - - Optional findByEmail(String email); - - -} diff --git a/src/main/java/com/beep/beep/domain/user/domain/repository/querydsl/UserRepoCustom.java b/src/main/java/com/beep/beep/domain/user/domain/repository/querydsl/UserRepoCustom.java new file mode 100644 index 0000000..390057b --- /dev/null +++ b/src/main/java/com/beep/beep/domain/user/domain/repository/querydsl/UserRepoCustom.java @@ -0,0 +1,25 @@ +package com.beep.beep.domain.user.domain.repository.querydsl; + + +import com.beep.beep.domain.student.presentation.dto.response.StudentRes; +import com.beep.beep.domain.student.presentation.dto.response.StudentByNameRes; +import com.beep.beep.domain.teacher.presentation.dto.response.TeacherRes; +import com.beep.beep.domain.teacher.presentation.dto.response.TeacherByUserRes; +import com.beep.beep.domain.user.presentation.dto.UserVO; +import com.beep.beep.global.common.dto.request.PageRequest; + +import java.util.List; + +public interface UserRepoCustom { + + List studentList(PageRequest request); + + List teacherList(PageRequest request); + + List studentListByName(String name); + + TeacherByUserRes teacherByUser(UserVO userVO); + + boolean existsByIdEmail(String id,String email); + +} diff --git a/src/main/java/com/beep/beep/domain/user/domain/repository/querydsl/UserRepoCustomImpl.java b/src/main/java/com/beep/beep/domain/user/domain/repository/querydsl/UserRepoCustomImpl.java new file mode 100644 index 0000000..564015f --- /dev/null +++ b/src/main/java/com/beep/beep/domain/user/domain/repository/querydsl/UserRepoCustomImpl.java @@ -0,0 +1,127 @@ +package com.beep.beep.domain.user.domain.repository.querydsl; + +import com.beep.beep.domain.student.presentation.dto.response.StudentRes; +import com.beep.beep.domain.student.presentation.dto.response.StudentByNameRes; +import com.beep.beep.domain.teacher.presentation.dto.response.TeacherRes; +import com.beep.beep.domain.teacher.presentation.dto.response.TeacherByUserRes; +import com.beep.beep.domain.user.presentation.dto.UserVO; +import com.beep.beep.global.common.dto.request.PageRequest; +import com.querydsl.core.types.ConstructorExpression; +import com.querydsl.core.types.Projections; +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +import static com.beep.beep.domain.beep.domain.QAttendance.attendance; +import static com.beep.beep.domain.beep.domain.QRoom.room; +import static com.beep.beep.domain.student.domain.QStudentId.studentId; +import static com.beep.beep.domain.teacher.domain.QJob.job1; +import static com.beep.beep.domain.user.domain.QUser.user; +import static com.beep.beep.domain.user.domain.enums.UserType.STUDENT; +import static com.beep.beep.domain.user.domain.enums.UserType.TEACHER; + + +@Repository +@RequiredArgsConstructor +public class UserRepoCustomImpl implements UserRepoCustom { + + private final JPAQueryFactory query; + + @Override + public List studentList(PageRequest request) { + return query + .select(studentListConstructorExpression()) + .from(user) + .innerJoin(studentId).on(studentId.userIdx.eq(user.idx)) + .innerJoin(attendance).on(attendance.userIdx.eq(user.idx)) + .where(user.authority.eq(STUDENT)) + .offset((request.getPage() - 1) * request.getSize()) + .limit(request.getSize()) + .orderBy(user.idx.asc()) + .fetch(); + } + + @Override + public List teacherList(PageRequest request){ + return query + .select(teacherListConstructorExpression()) + .from(user) + .innerJoin(job1).on(job1.userIdx.eq(user.idx)) + .where(user.authority.eq(TEACHER)) + .offset((request.getPage() - 1) * request.getSize()) + .limit(request.getSize()) + .orderBy(user.idx.asc()) + .fetch(); + } + + @Override + public TeacherByUserRes teacherByUser(UserVO userVO){ + return query + .select(teacherByUserConstructorExpression()) + .from(user) + .innerJoin(job1).on(job1.userIdx.eq(user.idx)) + .where(user.idx.eq(userVO.getIdx())) + .fetchFirst(); + } + + @Override + public boolean existsByIdEmail(String id, String email) { + return Optional.ofNullable(query.selectFrom(user) + .where(user.email.eq(email), user.id.eq(id)) + .fetchFirst()).isPresent(); + } + + @Override + public List studentListByName(String name) { + return query.select(studentListByNameConstructorExpression()) + .from(studentId) + .innerJoin(attendance).on(attendance.userIdx.eq(studentId.userIdx)) + .innerJoin(room).on(room.code.eq(attendance.code)) + .innerJoin(user).on(user.idx.eq(studentId.userIdx)) + .where(user.name.contains(name)) + .fetch(); + } + + private ConstructorExpression studentListByNameConstructorExpression() { + return Projections.constructor(StudentByNameRes.class, + user.name, + studentId.grade, + studentId.cls, + studentId.num, + room.name); + } + + private ConstructorExpression teacherByUserConstructorExpression() { + return Projections.constructor(TeacherByUserRes.class, + user.name, + user.email, + job1.department, + job1.job); + } + + private ConstructorExpression teacherListConstructorExpression() { + return Projections.constructor(TeacherRes.class, + user.idx, + user.id, + user.name, + user.email, + job1.department, + job1.job); + } + + private ConstructorExpression studentListConstructorExpression() { + return Projections.constructor(StudentRes.class, + user.idx, + user.id, + user.name, + user.email, + studentId.grade, + studentId.cls, + studentId.num, + attendance.code); + } + +} \ No newline at end of file diff --git a/src/main/java/com/beep/beep/domain/user/domain/repository/querydsl/UserRepositoryCustom.java b/src/main/java/com/beep/beep/domain/user/domain/repository/querydsl/UserRepositoryCustom.java deleted file mode 100644 index dabe7f3..0000000 --- a/src/main/java/com/beep/beep/domain/user/domain/repository/querydsl/UserRepositoryCustom.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.beep.beep.domain.user.domain.repository.querydsl; - - -public interface UserRepositoryCustom { -} diff --git a/src/main/java/com/beep/beep/domain/user/domain/repository/querydsl/UserRepositoryCustomImpl.java b/src/main/java/com/beep/beep/domain/user/domain/repository/querydsl/UserRepositoryCustomImpl.java deleted file mode 100644 index 0c03daf..0000000 --- a/src/main/java/com/beep/beep/domain/user/domain/repository/querydsl/UserRepositoryCustomImpl.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.beep.beep.domain.user.domain.repository.querydsl; - -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Repository; - - -@Repository -@RequiredArgsConstructor -public class UserRepositoryCustomImpl implements UserRepositoryCustom{ - - -} diff --git a/src/main/java/com/beep/beep/domain/user/mapper/UserMapper.java b/src/main/java/com/beep/beep/domain/user/mapper/UserMapper.java index 2ac8dd3..4e4def4 100644 --- a/src/main/java/com/beep/beep/domain/user/mapper/UserMapper.java +++ b/src/main/java/com/beep/beep/domain/user/mapper/UserMapper.java @@ -1,26 +1,26 @@ package com.beep.beep.domain.user.mapper; -import com.beep.beep.domain.user.domain.UserEntity; -import com.beep.beep.domain.user.presentation.dto.User; +import com.beep.beep.domain.user.domain.User; +import com.beep.beep.domain.user.presentation.dto.UserVO; import org.springframework.stereotype.Component; @Component public class UserMapper { - public UserEntity toEdit(User user){ - return UserEntity.builder() - .password(user.getPassword()) + public User toEdit(UserVO userVO){ + return User.builder() + .password(userVO.getPassword()) .build(); } - public User toUserDto(UserEntity userEntity){ - return User.builder() - .idx(userEntity.getIdx()) - .id(userEntity.getId()) - .email(userEntity.getEmail()) - .password(userEntity.getPassword()) - .name(userEntity.getName()) - .authority(userEntity.getAuthority()).build(); + public UserVO toUserDto(User user){ + return UserVO.builder() + .idx(user.getIdx()) + .id(user.getId()) + .email(user.getEmail()) + .password(user.getPassword()) + .name(user.getName()) + .authority(user.getAuthority()).build(); } } diff --git a/src/main/java/com/beep/beep/domain/user/presentation/UserController.java b/src/main/java/com/beep/beep/domain/user/presentation/UserController.java index 0618fa2..6a15af8 100644 --- a/src/main/java/com/beep/beep/domain/user/presentation/UserController.java +++ b/src/main/java/com/beep/beep/domain/user/presentation/UserController.java @@ -1,22 +1,18 @@ package com.beep.beep.domain.user.presentation; -import com.beep.beep.domain.user.presentation.dto.request.WithdrawalRequest; -import com.beep.beep.domain.user.presentation.dto.request.ChangePwRequest; -import com.beep.beep.domain.user.presentation.dto.response.UserIdResponse; +import com.beep.beep.domain.user.presentation.dto.request.ChangePwReq; +import com.beep.beep.domain.user.presentation.dto.response.UserIdRes; import com.beep.beep.domain.user.service.UserService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; -import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; @RestController @@ -45,14 +41,14 @@ public void checkIdEmail( @PutMapping("/change-pw") @Operation(summary = "비밀번호 변경", description = "아이디와 변경할 비번 값을 받아 비번을 변경해줍니다.(unauthenticated)") public void changePw( - @RequestBody ChangePwRequest request + @RequestBody ChangePwReq request ) { userService.changePw(request); } @GetMapping("/find-id") @Operation(summary = "아이디 찾기", description = "검증된 이메일로 아이디를 찾습니다. (unauthenticated)") - public UserIdResponse findId( + public UserIdRes findId( @RequestParam String email ){ return userService.findId(email); diff --git a/src/main/java/com/beep/beep/domain/user/presentation/dto/User.java b/src/main/java/com/beep/beep/domain/user/presentation/dto/UserVO.java similarity index 78% rename from src/main/java/com/beep/beep/domain/user/presentation/dto/User.java rename to src/main/java/com/beep/beep/domain/user/presentation/dto/UserVO.java index 3feeed2..c59ad8d 100644 --- a/src/main/java/com/beep/beep/domain/user/presentation/dto/User.java +++ b/src/main/java/com/beep/beep/domain/user/presentation/dto/UserVO.java @@ -2,9 +2,6 @@ import com.beep.beep.domain.user.domain.enums.UserType; -import jakarta.persistence.Column; -import jakarta.persistence.EnumType; -import jakarta.persistence.Enumerated; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -16,7 +13,7 @@ @AllArgsConstructor @NoArgsConstructor @Builder -public class User { +public class UserVO { private Long idx; diff --git a/src/main/java/com/beep/beep/domain/user/presentation/dto/request/ChangePwRequest.java b/src/main/java/com/beep/beep/domain/user/presentation/dto/request/ChangePwReq.java similarity index 62% rename from src/main/java/com/beep/beep/domain/user/presentation/dto/request/ChangePwRequest.java rename to src/main/java/com/beep/beep/domain/user/presentation/dto/request/ChangePwReq.java index d7402dc..8c57f23 100644 --- a/src/main/java/com/beep/beep/domain/user/presentation/dto/request/ChangePwRequest.java +++ b/src/main/java/com/beep/beep/domain/user/presentation/dto/request/ChangePwReq.java @@ -1,12 +1,10 @@ package com.beep.beep.domain.user.presentation.dto.request; -import lombok.AccessLevel; import lombok.Getter; -import lombok.NoArgsConstructor; @Getter -public class ChangePwRequest { +public class ChangePwReq { private String email; private String password; } diff --git a/src/main/java/com/beep/beep/domain/user/presentation/dto/request/WithdrawalRequest.java b/src/main/java/com/beep/beep/domain/user/presentation/dto/request/WithdrawalUserReq.java similarity index 78% rename from src/main/java/com/beep/beep/domain/user/presentation/dto/request/WithdrawalRequest.java rename to src/main/java/com/beep/beep/domain/user/presentation/dto/request/WithdrawalUserReq.java index 64732d3..951c991 100644 --- a/src/main/java/com/beep/beep/domain/user/presentation/dto/request/WithdrawalRequest.java +++ b/src/main/java/com/beep/beep/domain/user/presentation/dto/request/WithdrawalUserReq.java @@ -3,6 +3,6 @@ import lombok.Getter; @Getter -public class WithdrawalRequest { +public class WithdrawalUserReq { private String password; } diff --git a/src/main/java/com/beep/beep/domain/user/presentation/dto/response/UserIdResponse.java b/src/main/java/com/beep/beep/domain/user/presentation/dto/response/UserIdRes.java similarity index 87% rename from src/main/java/com/beep/beep/domain/user/presentation/dto/response/UserIdResponse.java rename to src/main/java/com/beep/beep/domain/user/presentation/dto/response/UserIdRes.java index 720d4a7..4bf58d5 100644 --- a/src/main/java/com/beep/beep/domain/user/presentation/dto/response/UserIdResponse.java +++ b/src/main/java/com/beep/beep/domain/user/presentation/dto/response/UserIdRes.java @@ -8,6 +8,6 @@ @Getter @Builder @AllArgsConstructor -public class UserIdResponse { +public class UserIdRes { private String id; } diff --git a/src/main/java/com/beep/beep/domain/user/service/UserService.java b/src/main/java/com/beep/beep/domain/user/service/UserService.java index 462a69a..ba5eb11 100644 --- a/src/main/java/com/beep/beep/domain/user/service/UserService.java +++ b/src/main/java/com/beep/beep/domain/user/service/UserService.java @@ -1,14 +1,11 @@ package com.beep.beep.domain.user.service; - -import com.beep.beep.domain.user.domain.repository.UserRepository; -import com.beep.beep.domain.user.exception.UserNotFoundException; +import com.beep.beep.domain.user.domain.repository.UserRepo; +import com.beep.beep.domain.user.exception.UserAlreadyExistsException; import com.beep.beep.domain.user.mapper.UserMapper; -import com.beep.beep.domain.user.presentation.dto.User; -import com.beep.beep.domain.user.presentation.dto.request.WithdrawalRequest; -import com.beep.beep.domain.user.exception.PasswordWrongException; -import com.beep.beep.domain.user.presentation.dto.request.ChangePwRequest; -import com.beep.beep.domain.user.presentation.dto.response.UserIdResponse; +import com.beep.beep.domain.user.presentation.dto.UserVO; +import com.beep.beep.domain.user.presentation.dto.request.ChangePwReq; +import com.beep.beep.domain.user.presentation.dto.response.UserIdRes; import com.beep.beep.global.common.service.UserUtil; import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; @@ -20,35 +17,33 @@ public class UserService { private final PasswordEncoder encoder; - private final UserRepository userRepository; + private final UserRepo userRepository; private final UserUtil userUtil; private final UserMapper userMapper; - public void withdrawal() { - User user = userUtil.getCurrentUser(); - - userRepository.deleteById(user.getIdx()); + public void withdrawal(){ + userRepository.deleteById(userUtil.getCurrentUser().getIdx()); } public void idCheck(String id) { userUtil.existsById(id); } - public UserIdResponse findId(String email) { - return UserIdResponse.builder() + public UserIdRes findId(String email) { + return UserIdRes.builder() .id(userUtil.findUserByEmail(email).getId()).build(); } public void checkIdEmail(String id,String email) { - userRepository.findByIdEmail(id,email) - .orElseThrow(() -> UserNotFoundException.EXCEPTION); + if(!userRepository.existsByIdEmail(id,email)) + throw UserAlreadyExistsException.EXCEPTION; } @Transactional - public void changePw(ChangePwRequest request){ - User user = userUtil.findUserByEmail(request.getEmail()); - user.setPassword(encoder.encode(request.getPassword())); - userRepository.save(userMapper.toEdit(user)); + public void changePw(ChangePwReq request){ + UserVO userVO = userUtil.findUserByEmail(request.getEmail()); + userVO.setPassword(encoder.encode(request.getPassword())); + userRepository.save(userMapper.toEdit(userVO)); } } diff --git a/src/main/java/com/beep/beep/global/common/dto/request/PageRequest.java b/src/main/java/com/beep/beep/global/common/dto/request/PageRequest.java new file mode 100644 index 0000000..dd6ec06 --- /dev/null +++ b/src/main/java/com/beep/beep/global/common/dto/request/PageRequest.java @@ -0,0 +1,13 @@ +package com.beep.beep.global.common.dto.request; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class PageRequest { + + private int page; + private int size; + +} diff --git a/src/main/java/com/beep/beep/global/common/repository/UserSecurity.java b/src/main/java/com/beep/beep/global/common/repository/UserSecurity.java index c8b6a46..558cd7a 100644 --- a/src/main/java/com/beep/beep/global/common/repository/UserSecurity.java +++ b/src/main/java/com/beep/beep/global/common/repository/UserSecurity.java @@ -1,10 +1,10 @@ package com.beep.beep.global.common.repository; -import com.beep.beep.domain.user.presentation.dto.User; +import com.beep.beep.domain.user.presentation.dto.UserVO; public interface UserSecurity { - User getUser(); + UserVO getUser(); } diff --git a/src/main/java/com/beep/beep/global/common/repository/UserSecurityImpl.java b/src/main/java/com/beep/beep/global/common/repository/UserSecurityImpl.java index 40c02ed..9eb62e1 100644 --- a/src/main/java/com/beep/beep/global/common/repository/UserSecurityImpl.java +++ b/src/main/java/com/beep/beep/global/common/repository/UserSecurityImpl.java @@ -1,8 +1,7 @@ package com.beep.beep.global.common.repository; -import com.beep.beep.domain.user.presentation.dto.User; +import com.beep.beep.domain.user.presentation.dto.UserVO; import com.beep.beep.global.security.auth.AuthDetails; -import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Repository; @@ -10,32 +9,12 @@ public class UserSecurityImpl implements UserSecurity{ @Override - public User getUser() { - System.out.println("십것"); - Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); - if (authentication == null) { - System.out.println("Authentication is null"); - return null; - } - - Object principal = authentication.getPrincipal(); - if (principal == null) { - System.out.println("Principal is null"); - return null; - } - - if (!(principal instanceof AuthDetails)) { - System.out.println("Principal is not an instance of AuthDetails"); - return null; - } - - AuthDetails authDetails = (AuthDetails) principal; - User user = authDetails.getUser(); - if (user == null) { - System.out.println("User in AuthDetails is null"); - } - System.out.println(user.getIdx()); - return user; + public UserVO getUser() { + return ((AuthDetails) SecurityContextHolder + .getContext() + .getAuthentication() + .getPrincipal()) + .getUserVO(); } } diff --git a/src/main/java/com/beep/beep/global/common/service/UserUtil.java b/src/main/java/com/beep/beep/global/common/service/UserUtil.java index a108bd0..ac7143a 100644 --- a/src/main/java/com/beep/beep/global/common/service/UserUtil.java +++ b/src/main/java/com/beep/beep/global/common/service/UserUtil.java @@ -1,13 +1,12 @@ package com.beep.beep.global.common.service; import com.beep.beep.domain.email.exception.EmailAlreadyExistsException; -import com.beep.beep.domain.email.exception.EmailNotFoundException; -import com.beep.beep.domain.user.domain.UserEntity; -import com.beep.beep.domain.user.domain.repository.UserRepository; +import com.beep.beep.domain.user.domain.User; +import com.beep.beep.domain.user.domain.repository.UserRepo; import com.beep.beep.domain.user.exception.UserAlreadyExistsException; import com.beep.beep.domain.user.exception.UserNotFoundException; import com.beep.beep.domain.user.mapper.UserMapper; -import com.beep.beep.domain.user.presentation.dto.User; +import com.beep.beep.domain.user.presentation.dto.UserVO; import com.beep.beep.global.common.repository.UserSecurity; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -17,15 +16,15 @@ public class UserUtil { private final UserSecurity userSecurity; - private final UserRepository userRepository; + private final UserRepo userRepository; private final UserMapper userMapper; - public User getCurrentUser() { + public UserVO getCurrentUser() { System.out.println("여기임?"); return userSecurity.getUser(); } - public User findUserByEmail(String email){ + public UserVO findUserByEmail(String email){ return userRepository.findByEmail(email).map(userMapper::toUserDto) .orElseThrow(() -> UserNotFoundException.EXCEPTION); } @@ -35,7 +34,7 @@ public void existsById(String id){ throw UserAlreadyExistsException.EXCEPTION; } - public UserEntity findUserById(String id) { + public User findUserById(String id) { return userRepository.findById(id) .orElseThrow(() -> UserNotFoundException.EXCEPTION ); } diff --git a/src/main/java/com/beep/beep/global/config/MailRedisConfiguration.java b/src/main/java/com/beep/beep/global/config/MailRedisConfig.java similarity index 96% rename from src/main/java/com/beep/beep/global/config/MailRedisConfiguration.java rename to src/main/java/com/beep/beep/global/config/MailRedisConfig.java index e539b3a..6b65cb0 100644 --- a/src/main/java/com/beep/beep/global/config/MailRedisConfiguration.java +++ b/src/main/java/com/beep/beep/global/config/MailRedisConfig.java @@ -8,7 +8,7 @@ import org.springframework.data.redis.core.StringRedisTemplate; @Configuration -public class MailRedisConfiguration { +public class MailRedisConfig { @Value("${spring.data.redis.mail.host}") private String host; diff --git a/src/main/java/com/beep/beep/global/security/SecurityConfiguration.java b/src/main/java/com/beep/beep/global/security/SecurityConfig.java similarity index 97% rename from src/main/java/com/beep/beep/global/security/SecurityConfiguration.java rename to src/main/java/com/beep/beep/global/security/SecurityConfig.java index 19f41a9..679e05d 100644 --- a/src/main/java/com/beep/beep/global/security/SecurityConfiguration.java +++ b/src/main/java/com/beep/beep/global/security/SecurityConfig.java @@ -19,13 +19,12 @@ import static com.beep.beep.domain.user.domain.enums.UserType.ADMIN; import static com.beep.beep.domain.user.domain.enums.UserType.STUDENT; import static com.beep.beep.domain.user.domain.enums.UserType.TEACHER; -import static org.apache.hc.core5.http.Method.POST; @Configuration @EnableWebSecurity @RequiredArgsConstructor -public class SecurityConfiguration { +public class SecurityConfig { @Bean public PasswordEncoder passwordEncoder() { diff --git a/src/main/java/com/beep/beep/global/security/auth/AuthDetails.java b/src/main/java/com/beep/beep/global/security/auth/AuthDetails.java index 6a2ca3d..027b4c0 100644 --- a/src/main/java/com/beep/beep/global/security/auth/AuthDetails.java +++ b/src/main/java/com/beep/beep/global/security/auth/AuthDetails.java @@ -1,6 +1,6 @@ package com.beep.beep.global.security.auth; -import com.beep.beep.domain.user.presentation.dto.User; +import com.beep.beep.domain.user.presentation.dto.UserVO; import lombok.Getter; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; @@ -11,31 +11,25 @@ @Getter public class AuthDetails implements UserDetails { - private final User user; - private Collection authorities; + private final UserVO userVO; - private AuthDetails(final User user, final Collection authorities) { - this.user = user; - this.authorities = authorities; - } - - public AuthDetails(final User user) { - this.user = user; + public AuthDetails(final UserVO userVO) { + this.userVO = userVO; } @Override public Collection getAuthorities() { - return Collections.singleton((GrantedAuthority) user.getAuthority()::getAuthority); + return Collections.singleton((GrantedAuthority) userVO.getAuthority()::getAuthority); } @Override public String getPassword() { - return this.user.getPassword(); + return this.userVO.getPassword(); } @Override public String getUsername() { - return this.user.getEmail(); + return this.userVO.getEmail(); } @Override diff --git a/src/main/java/com/beep/beep/global/security/jwt/JwtExtractor.java b/src/main/java/com/beep/beep/global/security/jwt/JwtExtractor.java index 147c0bc..c2362c3 100644 --- a/src/main/java/com/beep/beep/global/security/jwt/JwtExtractor.java +++ b/src/main/java/com/beep/beep/global/security/jwt/JwtExtractor.java @@ -1,13 +1,11 @@ package com.beep.beep.global.security.jwt; -import com.beep.beep.domain.user.domain.repository.UserRepository; -import com.beep.beep.domain.user.exception.UserNotFoundException; +import com.beep.beep.domain.user.domain.repository.UserRepo; import com.beep.beep.domain.user.mapper.UserMapper; -import com.beep.beep.domain.user.presentation.dto.User; +import com.beep.beep.domain.user.presentation.dto.UserVO; import com.beep.beep.global.security.auth.AuthDetails; import com.beep.beep.global.security.jwt.config.JwtProperties; import com.beep.beep.global.security.jwt.enums.JwtType; -import com.beep.beep.global.security.jwt.exception.TokenTypeException; import io.jsonwebtoken.Claims; import io.jsonwebtoken.ExpiredJwtException; import io.jsonwebtoken.Header; @@ -27,26 +25,26 @@ public class JwtExtractor { private final JwtProperties jwtProperties; - private final UserRepository userRepository; + private final UserRepo userRepository; private final UserMapper userMapper; public Authentication getAuthentication(final String token) { final Jws claims = getClaims(token); if (isWrongType(claims, JwtType.ACCESS)) { - throw TokenTypeException.EXCEPTION; + throw new IllegalArgumentException("토큰 타입이 옳지 않습니다"); } System.out.println("what's the matter"); - User user = userRepository.findByEmail(claims + UserVO userVO = userRepository.findByEmail(claims .getBody() .getSubject()) .map(userMapper::toUserDto) - .orElseThrow(()-> UserNotFoundException.EXCEPTION ); + .orElseThrow(()-> new IllegalArgumentException("유저가 존재하지 않습니다") ); System.out.println("here."); - final AuthDetails details = new AuthDetails(user); - System.out.println(user.getAuthority()); + final AuthDetails details = new AuthDetails(userVO); + System.out.println(userVO.getAuthority()); System.out.println("네?"); // 사용자 인증 정보를 생성 후 관리 (객체 생성을 통해) @@ -84,16 +82,4 @@ public String extractToken(final String token) { return token; // 토큰 이상하면 그냥 token return } -// public String parseToken(String bearerToken) { -// if (bearerToken != null && bearerToken.startsWith(jwtProperties.getPrefix())){ -// return bearerToken.replace(jwtProperties.getPrefix(),"").replaceAll("\\s", ""); -// } -// return null; -// } - - -// public String getTokenSubject(String token){ -// return getClaims(token).getBody().getSubject(); -// } - } diff --git a/src/main/java/com/beep/beep/global/security/jwt/filter/JwtExceptionFilter.java b/src/main/java/com/beep/beep/global/security/jwt/filter/JwtExceptionFilter.java index 880b4d8..e104a04 100644 --- a/src/main/java/com/beep/beep/global/security/jwt/filter/JwtExceptionFilter.java +++ b/src/main/java/com/beep/beep/global/security/jwt/filter/JwtExceptionFilter.java @@ -21,15 +21,6 @@ import java.io.IOException; import java.util.HashMap; import java.util.Map; -import java.util.NoSuchElementException; - -import static com.beep.beep.domain.user.exception.error.UserErrorProperty.USER_NOT_FOUND; -import static com.beep.beep.global.exception.error.ErrorCode.BAD_REQUEST; -import static com.beep.beep.global.security.jwt.exception.error.JwtErrorProperty.EXPIRED_TOKEN; -import static com.beep.beep.global.security.jwt.exception.error.JwtErrorProperty.ILLEGAL_TOKEN; -import static com.beep.beep.global.security.jwt.exception.error.JwtErrorProperty.TOKEN_TYPE_ERROR; -import static com.beep.beep.global.security.jwt.exception.error.JwtErrorProperty.UNSUPPORTED_TOKEN; - @Component @Slf4j @@ -38,45 +29,23 @@ public class JwtExceptionFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws IOException, ServletException { try { - filterChain.doFilter(request, response); // 에러 없으면 다음 필터로 - } catch (ExpiredJwtException e) { - //토큰의 유효기간 만료 - log.error("만료된 토큰입니다"); - setErrorResponse(EXPIRED_TOKEN,response); - } catch(TokenTypeException e){ - log.error("옳지 않은 타입입니다."); - setErrorResponse(TOKEN_TYPE_ERROR,response); - } -// catch (JwtException | IllegalArgumentException e) { -// //유효하지 않은 토큰 -// log.error("유효하지 않은 토큰이 입력되었습니다."); -// setErrorResponse(ILLEGAL_TOKEN,response); -// } - catch (NoSuchElementException | UserNotFoundException e) { - //사용자 찾을 수 없음 - log.error("사용자를 찾을 수 없습니다."); - setErrorResponse(USER_NOT_FOUND,response); - - } catch (ArrayIndexOutOfBoundsException e) { - log.error("토큰을 추출할 수 없습니다."); - setErrorResponse(UNSUPPORTED_TOKEN,response); - } catch (ServletException e) { - setErrorResponse(BAD_REQUEST, response); - }catch (NullPointerException e) { filterChain.doFilter(request, response); + } catch (IllegalArgumentException e) { + setErrorResponse(HttpStatus.UNAUTHORIZED, response, e); + } catch (ServletException e) { + setErrorResponse(HttpStatus.BAD_REQUEST, response, e); } } // 에러 response 설정 - public void setErrorResponse(ErrorProperty errorCode, HttpServletResponse response) throws IOException { + public void setErrorResponse(HttpStatus status, HttpServletResponse response, Throwable ex) throws IOException { response.setContentType("application/json;charset=UTF-8"); - response.setStatus(errorCode.getStatus().value()); + response.setStatus(status.value()); ObjectMapper mapper = new ObjectMapper(); Map map = new HashMap<>(); - map.put("status", String.valueOf(errorCode.getStatus().value())); - map.put("message", errorCode.getMessage()); + map.put("status", String.valueOf(status.value())); + map.put("message", ex.getMessage()); response.getWriter().write(mapper.writeValueAsString(map)); } - } From 94b19c1dff76103ed7730f35bdd44a411b57f68e Mon Sep 17 00:00:00 2001 From: heunseoRyu Date: Thu, 23 May 2024 09:46:23 +0900 Subject: [PATCH 2/4] [Fix] :: all 1. made naming rule 2. migrate attendance queryDSL method to studentId's one --- .../beep/domain/auth/service/AuthService.java | 4 +-- .../querydsl/AttendanceRepositoryCustom.java | 2 -- ...mpl.java => AttendanceRepoCustomImpl.java} | 24 +----------------- ...ustomImpl.java => RoomRepoCustomImpl.java} | 2 +- .../repository/StudentIdRepository.java | 4 +-- .../querydsl/StudentIdRepoCustom.java | 15 +++++++++++ ...Impl.java => StudentIdRepoCustomImpl.java} | 25 ++++++++++++++++++- .../querydsl/StudentIdRepositoryCustom.java | 11 -------- .../student/service/StudentService.java | 6 ++--- .../teacher/service/TeacherService.java | 4 +-- .../{UserRepo.java => UserRepository.java} | 2 +- .../beep/domain/user/service/UserService.java | 4 +-- .../beep/global/common/service/UserUtil.java | 4 +-- .../global/security/jwt/JwtExtractor.java | 4 +-- 14 files changed, 57 insertions(+), 54 deletions(-) rename src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/impl/{AttendanceRepositoryCustomImpl.java => AttendanceRepoCustomImpl.java} (71%) rename src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/impl/{RoomRepositoryCustomImpl.java => RoomRepoCustomImpl.java} (93%) create mode 100644 src/main/java/com/beep/beep/domain/student/domain/repository/querydsl/StudentIdRepoCustom.java rename src/main/java/com/beep/beep/domain/student/domain/repository/querydsl/{StudentIdRepositoryCustomImpl.java => StudentIdRepoCustomImpl.java} (51%) delete mode 100644 src/main/java/com/beep/beep/domain/student/domain/repository/querydsl/StudentIdRepositoryCustom.java rename src/main/java/com/beep/beep/domain/user/domain/repository/{UserRepo.java => UserRepository.java} (83%) diff --git a/src/main/java/com/beep/beep/domain/auth/service/AuthService.java b/src/main/java/com/beep/beep/domain/auth/service/AuthService.java index cc60f51..bf0c33e 100644 --- a/src/main/java/com/beep/beep/domain/auth/service/AuthService.java +++ b/src/main/java/com/beep/beep/domain/auth/service/AuthService.java @@ -8,7 +8,7 @@ import com.beep.beep.domain.auth.presentation.dto.response.TokenRefreshRes; import com.beep.beep.domain.user.domain.User; import com.beep.beep.domain.user.domain.enums.UserType; -import com.beep.beep.domain.user.domain.repository.UserRepo; +import com.beep.beep.domain.user.domain.repository.UserRepository; import com.beep.beep.domain.user.exception.PasswordWrongException; import com.beep.beep.global.common.service.UserUtil; import com.beep.beep.global.security.jwt.JwtExtractor; @@ -33,7 +33,7 @@ public class AuthService { private final JwtProvider jwtProvider; private final JwtExtractor jwtExtractor; private final AuthMapper authMapper; - private final UserRepo userRepository; + private final UserRepository userRepository; private final UserUtil userUtil; /** 학생 회원가입 */ diff --git a/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/AttendanceRepositoryCustom.java b/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/AttendanceRepositoryCustom.java index 79342ca..62eb7c0 100644 --- a/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/AttendanceRepositoryCustom.java +++ b/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/AttendanceRepositoryCustom.java @@ -10,8 +10,6 @@ public interface AttendanceRepositoryCustom { - List studentListByGradeCls(StudentByGradeClsReq request); - List attendanceListByCode(String code); StudentByUserRes studentByUser(UserVO userVO); diff --git a/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/impl/AttendanceRepositoryCustomImpl.java b/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/impl/AttendanceRepoCustomImpl.java similarity index 71% rename from src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/impl/AttendanceRepositoryCustomImpl.java rename to src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/impl/AttendanceRepoCustomImpl.java index 88a41fc..6a77f3a 100644 --- a/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/impl/AttendanceRepositoryCustomImpl.java +++ b/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/impl/AttendanceRepoCustomImpl.java @@ -3,8 +3,6 @@ import com.beep.beep.domain.beep.domain.repository.querydsl.AttendanceRepositoryCustom; import com.beep.beep.domain.beep.presentation.dto.response.AttendanceByCodeRes; -import com.beep.beep.domain.student.presentation.dto.request.StudentByGradeClsReq; -import com.beep.beep.domain.student.presentation.dto.response.StudentByGradeClsRes; import com.beep.beep.domain.student.presentation.dto.response.StudentByUserRes; import com.beep.beep.domain.user.presentation.dto.UserVO; import com.querydsl.core.types.ConstructorExpression; @@ -22,22 +20,10 @@ @Repository @RequiredArgsConstructor -public class AttendanceRepositoryCustomImpl implements AttendanceRepositoryCustom { +public class AttendanceRepoCustomImpl implements AttendanceRepositoryCustom { private final JPAQueryFactory query; - @Override - public List studentListByGradeCls(StudentByGradeClsReq req) { - return query.select(memberListConstructorExpression()) - .from(studentId) - .innerJoin(attendance).on(attendance.userIdx.eq(studentId.userIdx)) - .innerJoin(room).on(room.code.eq(attendance.code)) - .innerJoin(user).on(user.idx.eq(studentId.userIdx)) - .where(studentId.grade.eq(req.getGrade()),studentId.cls.eq(req.getCls())) - .orderBy(studentId.num.asc()) - .fetch(); - } - // room d에 누가 있는지 쿼리 // code로 attendance조회 , user -> name , room -> roomName , studentId 정보 @Override @@ -82,12 +68,4 @@ private ConstructorExpression studentInfoConstructorExpression room.name); } - private ConstructorExpression memberListConstructorExpression() { - return Projections.constructor(StudentByGradeClsRes.class, - user.name, - studentId.num, - room.floor, - room.name); - } - } diff --git a/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/impl/RoomRepositoryCustomImpl.java b/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/impl/RoomRepoCustomImpl.java similarity index 93% rename from src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/impl/RoomRepositoryCustomImpl.java rename to src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/impl/RoomRepoCustomImpl.java index 53d4925..09babbc 100644 --- a/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/impl/RoomRepositoryCustomImpl.java +++ b/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/impl/RoomRepoCustomImpl.java @@ -14,7 +14,7 @@ @Repository @RequiredArgsConstructor -public class RoomRepositoryCustomImpl implements RoomRepositoryCustom { +public class RoomRepoCustomImpl implements RoomRepositoryCustom { private final JPAQueryFactory query; diff --git a/src/main/java/com/beep/beep/domain/student/domain/repository/StudentIdRepository.java b/src/main/java/com/beep/beep/domain/student/domain/repository/StudentIdRepository.java index 16a791e..24d8694 100644 --- a/src/main/java/com/beep/beep/domain/student/domain/repository/StudentIdRepository.java +++ b/src/main/java/com/beep/beep/domain/student/domain/repository/StudentIdRepository.java @@ -1,8 +1,8 @@ package com.beep.beep.domain.student.domain.repository; import com.beep.beep.domain.student.domain.StudentId; -import com.beep.beep.domain.student.domain.repository.querydsl.StudentIdRepositoryCustom; +import com.beep.beep.domain.student.domain.repository.querydsl.StudentIdRepoCustom; import org.springframework.data.repository.CrudRepository; -public interface StudentIdRepository extends CrudRepository , StudentIdRepositoryCustom { +public interface StudentIdRepository extends CrudRepository , StudentIdRepoCustom { } diff --git a/src/main/java/com/beep/beep/domain/student/domain/repository/querydsl/StudentIdRepoCustom.java b/src/main/java/com/beep/beep/domain/student/domain/repository/querydsl/StudentIdRepoCustom.java new file mode 100644 index 0000000..d5e3876 --- /dev/null +++ b/src/main/java/com/beep/beep/domain/student/domain/repository/querydsl/StudentIdRepoCustom.java @@ -0,0 +1,15 @@ +package com.beep.beep.domain.student.domain.repository.querydsl; + +import com.beep.beep.domain.student.presentation.dto.request.StudentByGradeClsReq; +import com.beep.beep.domain.student.presentation.dto.response.ClsByGradeRes; +import com.beep.beep.domain.student.presentation.dto.response.StudentByGradeClsRes; + +import java.util.List; + +public interface StudentIdRepoCustom { + + List clsListByGrade(int grade); + + List studentListByGradeCls(StudentByGradeClsReq req); + +} diff --git a/src/main/java/com/beep/beep/domain/student/domain/repository/querydsl/StudentIdRepositoryCustomImpl.java b/src/main/java/com/beep/beep/domain/student/domain/repository/querydsl/StudentIdRepoCustomImpl.java similarity index 51% rename from src/main/java/com/beep/beep/domain/student/domain/repository/querydsl/StudentIdRepositoryCustomImpl.java rename to src/main/java/com/beep/beep/domain/student/domain/repository/querydsl/StudentIdRepoCustomImpl.java index 985255f..d7a6104 100644 --- a/src/main/java/com/beep/beep/domain/student/domain/repository/querydsl/StudentIdRepositoryCustomImpl.java +++ b/src/main/java/com/beep/beep/domain/student/domain/repository/querydsl/StudentIdRepoCustomImpl.java @@ -1,6 +1,9 @@ package com.beep.beep.domain.student.domain.repository.querydsl; +import com.beep.beep.domain.student.presentation.dto.request.StudentByGradeClsReq; import com.beep.beep.domain.student.presentation.dto.response.ClsByGradeRes; +import com.beep.beep.domain.student.presentation.dto.response.StudentByGradeClsRes; +import com.querydsl.core.types.ConstructorExpression; import com.querydsl.core.types.Projections; import com.querydsl.core.types.dsl.NumberExpression; import com.querydsl.jpa.impl.JPAQueryFactory; @@ -17,10 +20,22 @@ @Repository @RequiredArgsConstructor -public class StudentIdRepositoryCustomImpl implements StudentIdRepositoryCustom { +public class StudentIdRepoCustomImpl implements StudentIdRepoCustom { private final JPAQueryFactory query; + @Override + public List studentListByGradeCls(StudentByGradeClsReq req) { + return query.select(memberListConstructorExpression()) + .from(studentId) + .innerJoin(attendance).on(attendance.userIdx.eq(studentId.userIdx)) + .innerJoin(room).on(room.code.eq(attendance.code)) + .innerJoin(user).on(user.idx.eq(studentId.userIdx)) + .where(studentId.grade.eq(req.getGrade()),studentId.cls.eq(req.getCls())) + .orderBy(studentId.num.asc()) + .fetch(); + } + @Override public List clsListByGrade(int grade) { NumberExpression countExpression = studentId.count(); @@ -35,4 +50,12 @@ public List clsListByGrade(int grade) { .fetch(); } + private ConstructorExpression memberListConstructorExpression() { + return Projections.constructor(StudentByGradeClsRes.class, + user.name, + studentId.num, + room.floor, + room.name); + } + } diff --git a/src/main/java/com/beep/beep/domain/student/domain/repository/querydsl/StudentIdRepositoryCustom.java b/src/main/java/com/beep/beep/domain/student/domain/repository/querydsl/StudentIdRepositoryCustom.java deleted file mode 100644 index 80be594..0000000 --- a/src/main/java/com/beep/beep/domain/student/domain/repository/querydsl/StudentIdRepositoryCustom.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.beep.beep.domain.student.domain.repository.querydsl; - -import com.beep.beep.domain.student.presentation.dto.response.ClsByGradeRes; - -import java.util.List; - -public interface StudentIdRepositoryCustom { - - List clsListByGrade(int grade); - -} diff --git a/src/main/java/com/beep/beep/domain/student/service/StudentService.java b/src/main/java/com/beep/beep/domain/student/service/StudentService.java index f1258b6..2cb9aa1 100644 --- a/src/main/java/com/beep/beep/domain/student/service/StudentService.java +++ b/src/main/java/com/beep/beep/domain/student/service/StudentService.java @@ -10,7 +10,7 @@ import com.beep.beep.domain.student.presentation.dto.response.StudentByGradeClsRes; import com.beep.beep.domain.student.presentation.dto.response.StudentByNameRes; import com.beep.beep.domain.student.presentation.dto.response.StudentByUserRes; -import com.beep.beep.domain.user.domain.repository.UserRepo; +import com.beep.beep.domain.user.domain.repository.UserRepository; import com.beep.beep.global.common.dto.request.PageRequest; import com.beep.beep.global.common.service.UserUtil; import lombok.RequiredArgsConstructor; @@ -26,7 +26,7 @@ public class StudentService { private final UserUtil userUtil; private final StudentIdRepository studentIdRepository; private final AttendanceRepository attendanceRepository; - private final UserRepo userRepository; + private final UserRepository userRepository; public void saveStudentId(SaveStudentIdReq request){ studentIdRepository.save(studentMapper.toStudentId(userUtil.findUserByEmail(request.getEmail()),request)); @@ -41,7 +41,7 @@ public StudentByUserRes studentByUser() { } public List studentListByGradeCls(StudentByGradeClsReq request){ - return attendanceRepository.studentListByGradeCls(request); + return studentIdRepository.studentListByGradeCls(request); } public List studentListByName(String name){ diff --git a/src/main/java/com/beep/beep/domain/teacher/service/TeacherService.java b/src/main/java/com/beep/beep/domain/teacher/service/TeacherService.java index 404a94c..f9ee3f9 100644 --- a/src/main/java/com/beep/beep/domain/teacher/service/TeacherService.java +++ b/src/main/java/com/beep/beep/domain/teacher/service/TeacherService.java @@ -5,7 +5,7 @@ import com.beep.beep.domain.teacher.presentation.dto.request.SaveJobReq; import com.beep.beep.domain.teacher.presentation.dto.response.TeacherRes; import com.beep.beep.domain.teacher.presentation.dto.response.TeacherByUserRes; -import com.beep.beep.domain.user.domain.repository.UserRepo; +import com.beep.beep.domain.user.domain.repository.UserRepository; import com.beep.beep.global.common.dto.request.PageRequest; import com.beep.beep.global.common.service.UserUtil; import lombok.RequiredArgsConstructor; @@ -19,7 +19,7 @@ public class TeacherService { private final TeacherMapper teacherMapper; private final JobRepository jobRepository; - private final UserRepo userRepository; + private final UserRepository userRepository; private final UserUtil userUtil; public void saveJob(SaveJobReq req){ diff --git a/src/main/java/com/beep/beep/domain/user/domain/repository/UserRepo.java b/src/main/java/com/beep/beep/domain/user/domain/repository/UserRepository.java similarity index 83% rename from src/main/java/com/beep/beep/domain/user/domain/repository/UserRepo.java rename to src/main/java/com/beep/beep/domain/user/domain/repository/UserRepository.java index 08ac995..e534316 100644 --- a/src/main/java/com/beep/beep/domain/user/domain/repository/UserRepo.java +++ b/src/main/java/com/beep/beep/domain/user/domain/repository/UserRepository.java @@ -6,7 +6,7 @@ import java.util.Optional; -public interface UserRepo extends CrudRepository , UserRepoCustom { +public interface UserRepository extends CrudRepository , UserRepoCustom { boolean existsByEmail(String email); diff --git a/src/main/java/com/beep/beep/domain/user/service/UserService.java b/src/main/java/com/beep/beep/domain/user/service/UserService.java index ba5eb11..6e7ab32 100644 --- a/src/main/java/com/beep/beep/domain/user/service/UserService.java +++ b/src/main/java/com/beep/beep/domain/user/service/UserService.java @@ -1,6 +1,6 @@ package com.beep.beep.domain.user.service; -import com.beep.beep.domain.user.domain.repository.UserRepo; +import com.beep.beep.domain.user.domain.repository.UserRepository; import com.beep.beep.domain.user.exception.UserAlreadyExistsException; import com.beep.beep.domain.user.mapper.UserMapper; import com.beep.beep.domain.user.presentation.dto.UserVO; @@ -17,7 +17,7 @@ public class UserService { private final PasswordEncoder encoder; - private final UserRepo userRepository; + private final UserRepository userRepository; private final UserUtil userUtil; private final UserMapper userMapper; diff --git a/src/main/java/com/beep/beep/global/common/service/UserUtil.java b/src/main/java/com/beep/beep/global/common/service/UserUtil.java index ac7143a..91e9fe6 100644 --- a/src/main/java/com/beep/beep/global/common/service/UserUtil.java +++ b/src/main/java/com/beep/beep/global/common/service/UserUtil.java @@ -2,7 +2,7 @@ import com.beep.beep.domain.email.exception.EmailAlreadyExistsException; import com.beep.beep.domain.user.domain.User; -import com.beep.beep.domain.user.domain.repository.UserRepo; +import com.beep.beep.domain.user.domain.repository.UserRepository; import com.beep.beep.domain.user.exception.UserAlreadyExistsException; import com.beep.beep.domain.user.exception.UserNotFoundException; import com.beep.beep.domain.user.mapper.UserMapper; @@ -16,7 +16,7 @@ public class UserUtil { private final UserSecurity userSecurity; - private final UserRepo userRepository; + private final UserRepository userRepository; private final UserMapper userMapper; public UserVO getCurrentUser() { diff --git a/src/main/java/com/beep/beep/global/security/jwt/JwtExtractor.java b/src/main/java/com/beep/beep/global/security/jwt/JwtExtractor.java index c2362c3..a71da2a 100644 --- a/src/main/java/com/beep/beep/global/security/jwt/JwtExtractor.java +++ b/src/main/java/com/beep/beep/global/security/jwt/JwtExtractor.java @@ -1,6 +1,6 @@ package com.beep.beep.global.security.jwt; -import com.beep.beep.domain.user.domain.repository.UserRepo; +import com.beep.beep.domain.user.domain.repository.UserRepository; import com.beep.beep.domain.user.mapper.UserMapper; import com.beep.beep.domain.user.presentation.dto.UserVO; import com.beep.beep.global.security.auth.AuthDetails; @@ -25,7 +25,7 @@ public class JwtExtractor { private final JwtProperties jwtProperties; - private final UserRepo userRepository; + private final UserRepository userRepository; private final UserMapper userMapper; public Authentication getAuthentication(final String token) { From 9c7bdbacd8d12de111c5b30e17ffbba0c18558c0 Mon Sep 17 00:00:00 2001 From: heunseoRyu Date: Thu, 23 May 2024 11:53:12 +0900 Subject: [PATCH 3/4] [Fix] :: domain.beep, global 1. fix UnSatisfiedException by unifying class name 2. remove unused sout() codes --- .../domain/beep/domain/repository/AttendanceRepository.java | 4 ++-- .../beep/domain/beep/domain/repository/RoomRepository.java | 4 ++-- ...endanceRepositoryCustom.java => AttendanceRepoCustom.java} | 4 +--- .../{RoomRepositoryCustom.java => RoomRepoCustom.java} | 2 +- .../repository/querydsl/impl/AttendanceRepoCustomImpl.java | 4 ++-- .../domain/repository/querydsl/impl/RoomRepoCustomImpl.java | 4 ++-- .../java/com/beep/beep/global/security/jwt/JwtExtractor.java | 4 ---- .../global/security/jwt/filter/JwtAuthenticationFilter.java | 1 - 8 files changed, 10 insertions(+), 17 deletions(-) rename src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/{AttendanceRepositoryCustom.java => AttendanceRepoCustom.java} (66%) rename src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/{RoomRepositoryCustom.java => RoomRepoCustom.java} (82%) diff --git a/src/main/java/com/beep/beep/domain/beep/domain/repository/AttendanceRepository.java b/src/main/java/com/beep/beep/domain/beep/domain/repository/AttendanceRepository.java index 184cec1..26c309c 100644 --- a/src/main/java/com/beep/beep/domain/beep/domain/repository/AttendanceRepository.java +++ b/src/main/java/com/beep/beep/domain/beep/domain/repository/AttendanceRepository.java @@ -1,8 +1,8 @@ package com.beep.beep.domain.beep.domain.repository; import com.beep.beep.domain.beep.domain.Attendance; -import com.beep.beep.domain.beep.domain.repository.querydsl.AttendanceRepositoryCustom; +import com.beep.beep.domain.beep.domain.repository.querydsl.AttendanceRepoCustom; import org.springframework.data.repository.CrudRepository; -public interface AttendanceRepository extends CrudRepository , AttendanceRepositoryCustom { +public interface AttendanceRepository extends CrudRepository , AttendanceRepoCustom { } diff --git a/src/main/java/com/beep/beep/domain/beep/domain/repository/RoomRepository.java b/src/main/java/com/beep/beep/domain/beep/domain/repository/RoomRepository.java index 463a184..d573999 100644 --- a/src/main/java/com/beep/beep/domain/beep/domain/repository/RoomRepository.java +++ b/src/main/java/com/beep/beep/domain/beep/domain/repository/RoomRepository.java @@ -1,9 +1,9 @@ package com.beep.beep.domain.beep.domain.repository; import com.beep.beep.domain.beep.domain.Room; -import com.beep.beep.domain.beep.domain.repository.querydsl.RoomRepositoryCustom; +import com.beep.beep.domain.beep.domain.repository.querydsl.RoomRepoCustom; import org.springframework.data.repository.CrudRepository; -public interface RoomRepository extends CrudRepository , RoomRepositoryCustom { +public interface RoomRepository extends CrudRepository , RoomRepoCustom { } diff --git a/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/AttendanceRepositoryCustom.java b/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/AttendanceRepoCustom.java similarity index 66% rename from src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/AttendanceRepositoryCustom.java rename to src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/AttendanceRepoCustom.java index 62eb7c0..bd11e6b 100644 --- a/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/AttendanceRepositoryCustom.java +++ b/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/AttendanceRepoCustom.java @@ -1,14 +1,12 @@ package com.beep.beep.domain.beep.domain.repository.querydsl; import com.beep.beep.domain.beep.presentation.dto.response.AttendanceByCodeRes; -import com.beep.beep.domain.student.presentation.dto.request.StudentByGradeClsReq; -import com.beep.beep.domain.student.presentation.dto.response.StudentByGradeClsRes; import com.beep.beep.domain.student.presentation.dto.response.StudentByUserRes; import com.beep.beep.domain.user.presentation.dto.UserVO; import java.util.List; -public interface AttendanceRepositoryCustom { +public interface AttendanceRepoCustom { List attendanceListByCode(String code); diff --git a/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/RoomRepositoryCustom.java b/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/RoomRepoCustom.java similarity index 82% rename from src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/RoomRepositoryCustom.java rename to src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/RoomRepoCustom.java index c9ab389..0ed6a8c 100644 --- a/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/RoomRepositoryCustom.java +++ b/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/RoomRepoCustom.java @@ -4,6 +4,6 @@ import java.util.List; -public interface RoomRepositoryCustom { +public interface RoomRepoCustom { List roomListByName(String name); } diff --git a/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/impl/AttendanceRepoCustomImpl.java b/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/impl/AttendanceRepoCustomImpl.java index 6a77f3a..019b966 100644 --- a/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/impl/AttendanceRepoCustomImpl.java +++ b/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/impl/AttendanceRepoCustomImpl.java @@ -1,7 +1,7 @@ package com.beep.beep.domain.beep.domain.repository.querydsl.impl; -import com.beep.beep.domain.beep.domain.repository.querydsl.AttendanceRepositoryCustom; +import com.beep.beep.domain.beep.domain.repository.querydsl.AttendanceRepoCustom; import com.beep.beep.domain.beep.presentation.dto.response.AttendanceByCodeRes; import com.beep.beep.domain.student.presentation.dto.response.StudentByUserRes; import com.beep.beep.domain.user.presentation.dto.UserVO; @@ -20,7 +20,7 @@ @Repository @RequiredArgsConstructor -public class AttendanceRepoCustomImpl implements AttendanceRepositoryCustom { +public class AttendanceRepoCustomImpl implements AttendanceRepoCustom { private final JPAQueryFactory query; diff --git a/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/impl/RoomRepoCustomImpl.java b/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/impl/RoomRepoCustomImpl.java index 09babbc..f788a41 100644 --- a/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/impl/RoomRepoCustomImpl.java +++ b/src/main/java/com/beep/beep/domain/beep/domain/repository/querydsl/impl/RoomRepoCustomImpl.java @@ -1,7 +1,7 @@ package com.beep.beep.domain.beep.domain.repository.querydsl.impl; -import com.beep.beep.domain.beep.domain.repository.querydsl.RoomRepositoryCustom; +import com.beep.beep.domain.beep.domain.repository.querydsl.RoomRepoCustom; import com.beep.beep.domain.beep.presentation.dto.RoomVO; import com.querydsl.core.types.ConstructorExpression; import com.querydsl.core.types.Projections; @@ -14,7 +14,7 @@ @Repository @RequiredArgsConstructor -public class RoomRepoCustomImpl implements RoomRepositoryCustom { +public class RoomRepoCustomImpl implements RoomRepoCustom { private final JPAQueryFactory query; diff --git a/src/main/java/com/beep/beep/global/security/jwt/JwtExtractor.java b/src/main/java/com/beep/beep/global/security/jwt/JwtExtractor.java index a71da2a..89c0aa3 100644 --- a/src/main/java/com/beep/beep/global/security/jwt/JwtExtractor.java +++ b/src/main/java/com/beep/beep/global/security/jwt/JwtExtractor.java @@ -35,18 +35,14 @@ public Authentication getAuthentication(final String token) { throw new IllegalArgumentException("토큰 타입이 옳지 않습니다"); } - System.out.println("what's the matter"); UserVO userVO = userRepository.findByEmail(claims .getBody() .getSubject()) .map(userMapper::toUserDto) .orElseThrow(()-> new IllegalArgumentException("유저가 존재하지 않습니다") ); - System.out.println("here."); final AuthDetails details = new AuthDetails(userVO); - System.out.println(userVO.getAuthority()); - System.out.println("네?"); // 사용자 인증 정보를 생성 후 관리 (객체 생성을 통해) // UsernamePasswordAuthenticationToken(Principal, Credentials, Authorities) // 사용자의 주요정보, 인증과정의 비밀번호 저장 안하려고 null , 사용자의 권한 목록 return new UsernamePasswordAuthenticationToken(details, null, details.getAuthorities()); diff --git a/src/main/java/com/beep/beep/global/security/jwt/filter/JwtAuthenticationFilter.java b/src/main/java/com/beep/beep/global/security/jwt/filter/JwtAuthenticationFilter.java index 2b53a32..9f32020 100644 --- a/src/main/java/com/beep/beep/global/security/jwt/filter/JwtAuthenticationFilter.java +++ b/src/main/java/com/beep/beep/global/security/jwt/filter/JwtAuthenticationFilter.java @@ -23,7 +23,6 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { String token = jwtExtractor.extractTokenFromRequest(request); - System.out.println(token); if (token != null) { // 토큰이 존재하면 // 사용자 인증정보를 SecurityContext에 설정하는 과정 From 067523780939192a19925323ea7306a7e683e915 Mon Sep 17 00:00:00 2001 From: heunseoRyu Date: Thu, 23 May 2024 14:27:49 +0900 Subject: [PATCH 4/4] [Fix] :: gradle.yml try to deploy redis --- .github/workflows/gradle.yml | 9 ++++++++- src/main/resources/application.yml | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 2f6396a..89bdffe 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -39,7 +39,14 @@ jobs: envs: GITHUB_SHA script: | docker stop beep + docker stop beep-redis docker rm beep + docker rm beep-redis docker rmi ${{ secrets.DOCKER_USERNAME }}/beep:0.0.1-SNAPSHOT docker pull ${{ secrets.DOCKER_USERNAME }}/beep:0.0.1-SNAPSHOT - docker run -d -p 80:8080 --name beep ${{ secrets.DOCKER_USERNAME }}/beep:0.0.1-SNAPSHOT + + docker run -d --name beep-redis --network redis-network redis + docker run -d -p 80:8080 --name beep --network redis-network \ + --env SPRING_REDIS_HOST=beep-redis --env SPRING_REDIS_PORT=6379 ${{ secrets.DOCKER_USERNAME }}/beep:0.0.1-SNAPSHOT + + diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 178049c..e5d4aa9 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -16,7 +16,7 @@ spring: data: redis: mail: - host: redis # ?? ???? ???? ???? ?? ?? + host: beep-redis # ?? ???? ???? ???? ?? ?? port: 6379 mail: