diff --git a/src/main/java/auth_service/configuration/security/JwtAuthenticationFilter.java b/src/main/java/auth_service/configuration/security/JwtAuthenticationFilter.java index d60cbee..6c84ee3 100644 --- a/src/main/java/auth_service/configuration/security/JwtAuthenticationFilter.java +++ b/src/main/java/auth_service/configuration/security/JwtAuthenticationFilter.java @@ -1,5 +1,6 @@ package auth_service.configuration.security; +import auth_service.shared.security.UserPrincipal; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; diff --git a/src/main/java/auth_service/domain/user/controller/UserController.java b/src/main/java/auth_service/domain/user/controller/UserController.java index 66565db..61e7777 100644 --- a/src/main/java/auth_service/domain/user/controller/UserController.java +++ b/src/main/java/auth_service/domain/user/controller/UserController.java @@ -1,6 +1,6 @@ package auth_service.domain.user.controller; -import auth_service.configuration.security.UserPrincipal; +import auth_service.shared.security.UserPrincipal; import auth_service.domain.user.controller.dto.request.UserSettingsRequest; import auth_service.domain.user.controller.dto.response.UserProfileResponse; import auth_service.domain.user.controller.mapper.ApiMapper; diff --git a/src/main/java/auth_service/domain/user/persistence/UserRepositoryImpl.java b/src/main/java/auth_service/domain/user/persistence/UserRepositoryImpl.java index 249bed8..5e1521a 100644 --- a/src/main/java/auth_service/domain/user/persistence/UserRepositoryImpl.java +++ b/src/main/java/auth_service/domain/user/persistence/UserRepositoryImpl.java @@ -61,15 +61,24 @@ public class UserRepositoryImpl implements UserRepository { @Transactional @Override public boolean updateSettings(long userId, long steamId, UserSettings settings) { - var entity = EntityMapper.toPersistence(userId, settings); - // merge() acts as an upsert: it updates if the ID exists, or inserts if it doesn't. - entityManager.merge(entity); - var userEntity = entityManager.find(UserEntity.class, userId); - if (userEntity != null && userEntity.getSteamId() != steamId) { - userEntity.setSteamId(steamId); - return true; + if (userEntity == null) { + return false; } - return false; + + var settingsEntity = userEntity.getSettings(); + if (settingsEntity == null) { + settingsEntity = new UserSettingsEntity(); + settingsEntity.setUserId(userId); + userEntity.setSettings(settingsEntity); + } + + settingsEntity.setLanguage(settings.getLanguage()); + settingsEntity.setTheme(settings.getTheme()); + + boolean steamIdChanged = userEntity.getSteamId() != steamId; + userEntity.setSteamId(steamId); + + return steamIdChanged; } } \ No newline at end of file diff --git a/src/main/java/auth_service/domain/user/persistence/entities/UserEntity.java b/src/main/java/auth_service/domain/user/persistence/entities/UserEntity.java index 3d5c80c..c436278 100644 --- a/src/main/java/auth_service/domain/user/persistence/entities/UserEntity.java +++ b/src/main/java/auth_service/domain/user/persistence/entities/UserEntity.java @@ -30,7 +30,7 @@ public class UserEntity { @Column(nullable = false) private boolean enabled; - @Column(name = "steam_id", unique = true, nullable = false) + @Column(name = "steam_id", unique = true) private Long steamId; @Column(name = "registration_date", nullable = false) diff --git a/src/main/java/auth_service/configuration/security/UserPrincipal.java b/src/main/java/auth_service/shared/security/UserPrincipal.java similarity index 85% rename from src/main/java/auth_service/configuration/security/UserPrincipal.java rename to src/main/java/auth_service/shared/security/UserPrincipal.java index ccfa99e..20ff95f 100644 --- a/src/main/java/auth_service/configuration/security/UserPrincipal.java +++ b/src/main/java/auth_service/shared/security/UserPrincipal.java @@ -1,4 +1,4 @@ -package auth_service.configuration.security; +package auth_service.shared.security; import java.security.Principal; diff --git a/src/main/resources/db/migration/V2__Add_User_Details.sql b/src/main/resources/db/migration/V2__Add_User_Details.sql index 9983b0c..3392ebb 100644 --- a/src/main/resources/db/migration/V2__Add_User_Details.sql +++ b/src/main/resources/db/migration/V2__Add_User_Details.sql @@ -1,6 +1,6 @@ -- Create the users table ALTER TABLE users - ADD COLUMN steam_id BIGINT DEFAULT 0, + ADD COLUMN steam_id BIGINT, ADD COLUMN registration_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, ADD COLUMN last_login_date TIMESTAMP; diff --git a/src/test/java/auth_service/domain/user/controller/UserControllerTest.java b/src/test/java/auth_service/domain/user/controller/UserControllerTest.java index 0214689..d1b66a0 100644 --- a/src/test/java/auth_service/domain/user/controller/UserControllerTest.java +++ b/src/test/java/auth_service/domain/user/controller/UserControllerTest.java @@ -2,7 +2,7 @@ package auth_service.domain.user.controller; import auth_service.configuration.security.JwtAuthenticationFilter; import auth_service.configuration.security.JwtService; -import auth_service.configuration.security.UserPrincipal; +import auth_service.shared.security.UserPrincipal; import auth_service.domain.user.controller.dto.request.UserSettingsRequest; import auth_service.domain.user.exception.UserNotFoundException; import auth_service.domain.user.model.User; diff --git a/src/test/java/auth_service/domain/user/persistence/UserRepositoryTest.java b/src/test/java/auth_service/domain/user/persistence/UserRepositoryTest.java index ba712d7..49a3026 100644 --- a/src/test/java/auth_service/domain/user/persistence/UserRepositoryTest.java +++ b/src/test/java/auth_service/domain/user/persistence/UserRepositoryTest.java @@ -24,7 +24,7 @@ class UserRepositoryTest extends AbstractPersistenceTest { @Test void findByEmail_Success() { // Arrange - var email = "test@example.com"; + var email = "newuser@example.com"; var userEntity = UserEntity.builder() .email(email) .password("password") diff --git a/src/test/java/auth_service/shared/test/AbstractIntegrationTest.java b/src/test/java/auth_service/shared/test/AbstractIntegrationTest.java index e0ac792..6a7a3f0 100644 --- a/src/test/java/auth_service/shared/test/AbstractIntegrationTest.java +++ b/src/test/java/auth_service/shared/test/AbstractIntegrationTest.java @@ -2,6 +2,7 @@ package auth_service.shared.test; import org.junit.jupiter.api.Tag; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; import org.springframework.boot.testcontainers.service.connection.ServiceConnection; import org.testcontainers.containers.PostgreSQLContainer; import org.testcontainers.junit.jupiter.Container; @@ -13,6 +14,7 @@ import org.testcontainers.junit.jupiter.Testcontainers; */ @Tag("IntegrationTest") @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles("dev") @Testcontainers public abstract class AbstractIntegrationTest {