diff --git a/src/main/java/com/knu/ddip/auth/business/service/OAuthLoginService.java b/src/main/java/com/knu/ddip/auth/business/service/OAuthLoginService.java index 6599b6a..a6b7e99 100644 --- a/src/main/java/com/knu/ddip/auth/business/service/OAuthLoginService.java +++ b/src/main/java/com/knu/ddip/auth/business/service/OAuthLoginService.java @@ -145,7 +145,7 @@ public JwtResponse linkOAuthWithUser(User user, String oauthMappingEntityId, return generateTokensForUser(user.getId(), deviceType); } - private JwtResponse generateTokensForUser(UUID userId, DeviceType deviceType) { + public JwtResponse generateTokensForUser(UUID userId, DeviceType deviceType) { UserEntityDto userEntityDto = userRepository.getById(userId); UserFactory.create(userEntityDto.getId(), userEntityDto.getEmail(), userEntityDto.getNickname(), userEntityDto.getStatus()); diff --git a/src/main/java/com/knu/ddip/auth/domain/TokenType.java b/src/main/java/com/knu/ddip/auth/domain/TokenType.java index 5a7c734..1710fb6 100644 --- a/src/main/java/com/knu/ddip/auth/domain/TokenType.java +++ b/src/main/java/com/knu/ddip/auth/domain/TokenType.java @@ -1,6 +1,5 @@ package com.knu.ddip.auth.domain; -//TODO: 추후 KAKAO 추가 예정 public enum TokenType { ACCESS, REFRESH } diff --git a/src/main/java/com/knu/ddip/user/business/dto/DummyRequest.java b/src/main/java/com/knu/ddip/user/business/dto/DummyRequest.java new file mode 100644 index 0000000..bffaf60 --- /dev/null +++ b/src/main/java/com/knu/ddip/user/business/dto/DummyRequest.java @@ -0,0 +1,7 @@ +package com.knu.ddip.user.business.dto; + +public record DummyRequest( + String email, + String nickname +) { +} diff --git a/src/main/java/com/knu/ddip/user/business/service/UserService.java b/src/main/java/com/knu/ddip/user/business/service/UserService.java index b91f5f3..e6ab091 100644 --- a/src/main/java/com/knu/ddip/user/business/service/UserService.java +++ b/src/main/java/com/knu/ddip/user/business/service/UserService.java @@ -4,6 +4,7 @@ import com.knu.ddip.auth.business.service.OAuthLoginService; import com.knu.ddip.auth.domain.DeviceType; import com.knu.ddip.auth.exception.OAuthBadRequestException; +import com.knu.ddip.user.business.dto.DummyRequest; import com.knu.ddip.user.business.dto.SignupRequest; import com.knu.ddip.user.business.dto.UniqueMailResponse; import com.knu.ddip.user.business.dto.UserEntityDto; @@ -71,4 +72,18 @@ public JwtResponse signUp(SignupRequest request) { throw e; } } + + @Transactional + public JwtResponse dummyLogin(DummyRequest dummyRequest) { + UserEntityDto userEntityDto = userRepository.findOptionalByEmail(dummyRequest.email()) + .map(user -> userRepository.getByEmail(dummyRequest.email())) + .orElseGet(() -> userRepository.save( + dummyRequest.email(), + dummyRequest.nickname(), + UserStatus.ACTIVE.name() + )); + User user = userEntityDto.toDomain(); + + return oAuthLoginService.generateTokensForUser(user.getId(), DeviceType.PHONE); + } } diff --git a/src/main/java/com/knu/ddip/user/presentation/api/UserApi.java b/src/main/java/com/knu/ddip/user/presentation/api/UserApi.java index d6a4d83..66d3fc5 100644 --- a/src/main/java/com/knu/ddip/user/presentation/api/UserApi.java +++ b/src/main/java/com/knu/ddip/user/presentation/api/UserApi.java @@ -1,6 +1,7 @@ package com.knu.ddip.user.presentation.api; import com.knu.ddip.auth.business.dto.JwtResponse; +import com.knu.ddip.user.business.dto.DummyRequest; import com.knu.ddip.user.business.dto.SignupRequest; import com.knu.ddip.user.business.dto.UniqueMailResponse; import io.swagger.v3.oas.annotations.Operation; @@ -24,4 +25,9 @@ ResponseEntity signup( description = "메일이 사용 가능한지 조회한다. 휴면유저/탈퇴한 유저의 메일도 사용 불가.") ResponseEntity checkEmailUniqueness( @RequestParam("v") String email); + + @PostMapping("/dummy") + @Operation(summary = "[테스트용] 임시 로그인용 JWT 생성", description = "테스트를 위해 OAuth를 거치지 않고도 서버에서 사용 가능한 인증용 JWT를 생성한다. 주의: 만약 이미 존재하는 유저의 경우 닉네임이 입력한 email에 기반한 유저의 인증용 jwt가 생성되고, 닉네임은 입력한 닉네임이 아닌 기존의 닉네임으로 유지된다.") + ResponseEntity dummyLogin( + @RequestBody DummyRequest dummyRequest); } diff --git a/src/main/java/com/knu/ddip/user/presentation/controller/UserController.java b/src/main/java/com/knu/ddip/user/presentation/controller/UserController.java index 10f5da3..cd36b93 100644 --- a/src/main/java/com/knu/ddip/user/presentation/controller/UserController.java +++ b/src/main/java/com/knu/ddip/user/presentation/controller/UserController.java @@ -1,6 +1,7 @@ package com.knu.ddip.user.presentation.controller; import com.knu.ddip.auth.business.dto.JwtResponse; +import com.knu.ddip.user.business.dto.DummyRequest; import com.knu.ddip.user.business.dto.SignupRequest; import com.knu.ddip.user.business.dto.UniqueMailResponse; import com.knu.ddip.user.business.service.UserService; @@ -33,6 +34,12 @@ public ResponseEntity checkEmailUniqueness( return ResponseEntity.status(HttpStatus.ACCEPTED).body(result); } + @Override + public ResponseEntity dummyLogin(DummyRequest dummyRequest) { + JwtResponse jwtResponse = userService.dummyLogin(dummyRequest); + return ResponseEntity.ok(jwtResponse); + } + //TODO: 로그아웃 //TODO: 회원 탈퇴 //TODO: user 정보 수정 diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 30074d3..6ca187c 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -15,7 +15,7 @@ spring.data.redis.password=${REDIS_PASSWORD} # JPA spring.jpa.properties.hibernate.format_sql=true spring.jpa.show-sql=true -spring.jpa.hibernate.ddl-auto=create +spring.jpa.hibernate.ddl-auto=update spring.sql.init.mode=always spring.jpa.defer-datasource-initialization=true spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver