Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,8 @@ protected boolean shouldNotFilter(HttpServletRequest request) throws ServletExce
path.startsWith("/api/v2/auth/google") ||
path.startsWith("/oauth/callback") ||
path.startsWith("/login/google") ||
path.startsWith("/login/oauth2/code/google")
path.startsWith("/login/oauth2/code/google") ||
path.startsWith("/api/v2/auth/signup")
;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,8 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {

.requestMatchers(
"/api/v1/auth/token",
"/api/v2/auth/google"
"/api/v2/auth/google",
"/api/v2/auth/signup"
).permitAll()

.requestMatchers(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
package com.pinback.api.google.controller;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.pinback.api.auth.dto.request.SignUpRequest;
import com.pinback.api.google.dto.request.GoogleLoginRequest;
import com.pinback.application.auth.dto.SignUpResponse;
import com.pinback.application.auth.usecase.AuthUsecase;
import com.pinback.application.google.dto.response.GoogleLoginResponse;
import com.pinback.application.google.usecase.GoogleUsecase;
Expand All @@ -20,7 +24,7 @@

@Slf4j
@RestController
@RequestMapping("/api/v2/auth/google")
@RequestMapping("/api/v2/auth")
@RequiredArgsConstructor
@Tag(name = "Google", description = "구글 소셜 로그인 API")
public class GoogleLonginController {
Expand All @@ -29,7 +33,7 @@ public class GoogleLonginController {
private final AuthUsecase authUsecase;

@Operation(summary = "구글 소셜 로그인", description = "구글을 통한 소셜 로그인을 진행합니다")
@PostMapping()
@PostMapping("/google")
public Mono<ResponseDto<GoogleLoginResponse>> googleLogin(
@Valid @RequestBody GoogleLoginRequest request
) {
Expand All @@ -41,4 +45,13 @@ public Mono<ResponseDto<GoogleLoginResponse>> googleLogin(
});
});
}

@Operation(summary = "신규 회원 온보딩", description = "신규 회원의 기본 정보를 등록합니다")
@PatchMapping("/signup")
public ResponseEntity<SignUpResponse> signUpV2(
@Valid @RequestBody SignUpRequest request
) {
SignUpResponse response = authUsecase.signUpV2(request.toCommand());
return ResponseEntity.ok(response);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import com.pinback.application.notification.port.in.SavePushSubscriptionPort;
import com.pinback.application.user.port.out.UserGetServicePort;
import com.pinback.application.user.port.out.UserSaveServicePort;
import com.pinback.application.user.port.out.UserUpdateServicePort;
import com.pinback.application.user.port.out.UserValidateServicePort;
import com.pinback.domain.user.entity.User;

Expand All @@ -29,6 +30,7 @@ public class AuthUsecase {

private final SavePushSubscriptionPort savePushSubscriptionPort;
private final UserGetServicePort userGetServicePort;
private final UserUpdateServicePort userUpdateServicePort;

@Transactional
public SignUpResponse signUp(SignUpCommand signUpCommand) {
Expand All @@ -55,14 +57,22 @@ public TokenResponse getToken(String email) {
public Mono<GoogleLoginResponse> getInfoAndToken(String email) {
return userGetServicePort.findUserByEmail(email)
.flatMap(existingUser -> {
log.info("기존 사용자 로그인 성공: User ID {}", existingUser.getId());

//Access Token 발급
String accessToken = jwtProvider.createAccessToken(existingUser.getId());

return Mono.just(GoogleLoginResponse.loggedIn(
existingUser.getId(), existingUser.getEmail(), accessToken
));
if (existingUser.getRemindDefault() != null) {
log.info("기존 사용자 로그인 성공: User ID {}", existingUser.getId());

//Access Token 발급
String accessToken = jwtProvider.createAccessToken(existingUser.getId());

return Mono.just(GoogleLoginResponse.loggedIn(
existingUser.getId(), existingUser.getEmail(), accessToken
));
} else {
log.info("기존 사용자 - 온보딩 미완료 유저 처리: User ID {}", existingUser.getId());

return Mono.just(GoogleLoginResponse.tempLogin(
existingUser.getId(), existingUser.getEmail()
));
}
})
.switchIfEmpty(Mono.defer(() -> {
log.info("신규 유저 - 임시 유저 생성");
Expand All @@ -74,4 +84,15 @@ public Mono<GoogleLoginResponse> getInfoAndToken(String email) {
});
}));
}

@Transactional
public SignUpResponse signUpV2(SignUpCommand signUpCommand) {
User user = userGetServicePort.findByEmail(signUpCommand.email());
String accessToken = jwtProvider.createAccessToken(user.getId());
userUpdateServicePort.updateRemindDefault(user.getId(), signUpCommand.remindDefault());

savePushSubscriptionPort.savePushSubscription(user, signUpCommand.fcmToken());

return SignUpResponse.from(accessToken);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.pinback.application.user.port.out;

import java.time.LocalTime;
import java.util.UUID;

public interface UserUpdateServicePort {
void updateRemindDefault(UUID userId, LocalTime remindDefault);
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
package com.pinback.infrastructure.user.repository;

import java.time.LocalTime;
import java.util.Optional;
import java.util.UUID;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import com.pinback.domain.user.entity.User;

Expand All @@ -12,4 +16,8 @@ public interface UserRepository extends JpaRepository<User, UUID> {
Optional<User> findByEmail(String email);

boolean existsByEmail(String email);

@Modifying
@Query("UPDATE User u SET u.remindDefault = :newRemindDefault WHERE u.id = :userId")
void updateRemindDefault(@Param("userId") UUID userId, @Param("newRemindDefault") LocalTime newRemindDefault);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.pinback.infrastructure.user.service;

import java.time.LocalTime;
import java.util.UUID;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.pinback.application.user.port.out.UserUpdateServicePort;
import com.pinback.infrastructure.user.repository.UserRepository;

import lombok.RequiredArgsConstructor;

@Service
@RequiredArgsConstructor
@Transactional
public class UserUpdateService implements UserUpdateServicePort {
private final UserRepository userRepository;

@Override
public void updateRemindDefault(UUID userId, LocalTime remindDefault) {
userRepository.updateRemindDefault(userId, remindDefault);
}
}
16 changes: 0 additions & 16 deletions src/main/resources/static/login.html

This file was deleted.