Исправлена V1 миграция - добавлена запятая после email

Реализован saveWithOAuth2() в UserRepository
Реализован findByProviderAndProviderId() в UserRepository
Обновлен CustomOAuth2UserService для использования OAuth2 методов
Исправил package declaration во всех 7 OAuth2 файлах
This commit is contained in:
skettiks
2026-05-14 20:57:58 +03:00
parent 88794e6a96
commit 166c5be863
11 changed files with 88 additions and 24 deletions
@@ -1,4 +1,4 @@
package com.project.movienight.adapters.security.oauth2
package com.project.movienight.adapters.security
import com.project.movienight.application.ports.output.IdGenerator
import com.project.movienight.application.ports.output.UserRepositoryPort
@@ -37,21 +37,34 @@ class CustomOAuth2UserService(
}
private fun findOrCreateUser(userInfo: OAuth2UserInfo): User {
val existingUser = userRepository.findByEmail(userInfo.getEmail())
// Сначала ищем по provider + provider_id (основной способ для OAuth2)
val existingUser = userRepository.findByProviderAndProviderId(
userInfo.getProvider(),
userInfo.getProviderId()
)
return if (existingUser != null) {
log.debug("User found by email: {}", userInfo.getEmail())
log.debug("User found by provider: {}", userInfo.getProvider())
existingUser
} else {
log.debug("Creating new user for provider: {}", userInfo.getProvider())
val newUser = User(
id = idGenerator.generateId(),
name = userInfo.getName(),
email = userInfo.getEmail(),
password = "", // OAuth2 пользователи не имеют пароля
library = null,
)
userRepository.save(newUser)
// Проверяем нет ли пользователя с таким email (связывание аккаунтов)
val userByEmail = userRepository.findByEmail(userInfo.getEmail())
if (userByEmail != null) {
// Пользователь существует, обновляем его OAuth2 данными
log.debug("Linking OAuth2 account to existing user: {}", userInfo.getEmail())
userRepository.saveWithOAuth2(userByEmail, userInfo.getProvider(), userInfo.getProviderId())
} else {
log.debug("Creating new user for provider: {}", userInfo.getProvider())
val newUser = User(
id = idGenerator.generateId(),
name = userInfo.getName(),
email = userInfo.getEmail(),
password = "",
library = null,
)
userRepository.saveWithOAuth2(newUser, userInfo.getProvider(), userInfo.getProviderId())
}
}
}
}
@@ -1,4 +1,4 @@
package com.project.movienight.adapters.security.oauth2
package com.project.movienight.adapters.security
class GoogleOAuth2UserInfo(
private val attributes: Map<String, Any>
@@ -1,4 +1,4 @@
package com.project.movienight.adapters.security.oauth2
package com.project.movienight.adapters.security
interface OAuth2UserInfo {
fun getProviderId(): String
@@ -1,4 +1,4 @@
package com.project.movienight.adapters.security.oauth2
package com.project.movienight.adapters.security
import org.springframework.security.oauth2.core.OAuth2AuthenticationException
import org.springframework.security.oauth2.core.user.OAuth2User
@@ -1,4 +1,4 @@
package com.project.movienight.adapters.security.oauth2
package com.project.movienight.adapters.security
import com.project.movienight.domain.model.User
import org.springframework.security.core.GrantedAuthority
@@ -1,4 +1,4 @@
package com.project.movienight.adapters.security.oauth2
package com.project.movienight.adapters.security
@Suppress("UNCHECKED_CAST")
class VkOAuth2UserInfo(
@@ -1,4 +1,4 @@
package com.project.movienight.adapters.security.oauth2
package com.project.movienight.adapters.security
@Suppress("UNCHECKED_CAST")
class YandexOAuth2UserInfo(