From fdc583da93ee57b0677752f59e5650485444bed0 Mon Sep 17 00:00:00 2001
From: Martin Weise <martin.weise@tuwien.ac.at>
Date: Thu, 24 Apr 2025 20:55:01 +0200
Subject: [PATCH] WIP

Signed-off-by: Martin Weise <martin.weise@tuwien.ac.at>
---
 .../at/tuwien/gateway/KeycloakGatewayIntegrationTest.java | 1 -
 .../at/tuwien/service/UserServicePersistenceTest.java     | 6 ------
 .../test/java/at/tuwien/service/UserServiceUnitTest.java  | 8 ++------
 .../main/java/at/tuwien/service/impl/UserServiceImpl.java | 7 +++++++
 dbrepo-ui/pages/user/info.vue                             | 8 ++++++++
 5 files changed, 17 insertions(+), 13 deletions(-)

diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/KeycloakGatewayIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/KeycloakGatewayIntegrationTest.java
index 583fa4c440..e2d61a9936 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/KeycloakGatewayIntegrationTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/KeycloakGatewayIntegrationTest.java
@@ -103,7 +103,6 @@ public class KeycloakGatewayIntegrationTest extends AbstractUnitTest {
         keycloakUtils.createUser(USER_1_ID, USER_1_KEYCLOAK_SIGNUP_REQUEST);
 
         /* test */
-        keycloakGateway.updateUser(keycloakUtils.getUserId(USER_1_USERNAME), USER_1_UPDATE_DTO);
         final UserRepresentation user = keycloakUtils.getUser(USER_1_USERNAME);
         assertNotNull(user.getId());
         assertEquals(USER_1_FIRSTNAME, user.getFirstName());
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServicePersistenceTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServicePersistenceTest.java
index c224fa9a85..ad7a97ce03 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServicePersistenceTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServicePersistenceTest.java
@@ -20,7 +20,6 @@ import org.springframework.test.context.junit.jupiter.SpringExtension;
 import java.util.List;
 
 import static org.junit.jupiter.api.Assertions.*;
-import static org.mockito.Mockito.doNothing;
 
 @Log4j2
 @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
@@ -91,11 +90,6 @@ public class UserServicePersistenceTest extends AbstractUnitTest {
                 .language("de")
                 .build();
 
-        /* mock */
-        doNothing()
-                .when(keycloakGateway)
-                .updateUser(USER_1_ID, request);
-
         /* test */
         final User response = userService.modify(USER_1, request);
         assertEquals(USER_1_ID, response.getId());
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceUnitTest.java
index c610f3ee95..8cec9e1f95 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceUnitTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/UserServiceUnitTest.java
@@ -1,6 +1,5 @@
 package at.tuwien.service;
 
-import at.tuwien.api.user.UserUpdateDto;
 import at.tuwien.entities.user.User;
 import at.tuwien.exception.AuthServiceException;
 import at.tuwien.exception.UserNotFoundException;
@@ -17,11 +16,11 @@ import org.springframework.test.context.junit.jupiter.SpringExtension;
 
 import java.util.List;
 import java.util.Optional;
-import java.util.UUID;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.mockito.Mockito.*;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.when;
 
 @ExtendWith(SpringExtension.class)
 @SpringBootTest
@@ -87,9 +86,6 @@ public class UserServiceUnitTest extends AbstractUnitTest {
                 .thenReturn(Optional.of(USER_1));
         when(userRepository.save(any(User.class)))
                 .thenReturn(USER_1);
-        doNothing()
-                .when(keycloakGateway)
-                .updateUser(any(UUID.class), any(UserUpdateDto.class));
 
         /* test */
         final User response = userService.modify(USER_1, USER_1_UPDATE_DTO);
diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java
index ad05c4fd46..468f50f8e4 100644
--- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java
+++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java
@@ -13,6 +13,7 @@ import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.lang3.RandomStringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.nio.charset.StandardCharsets;
 import java.util.List;
@@ -33,11 +34,13 @@ public class UserServiceImpl implements UserService {
     }
 
     @Override
+    @Transactional(readOnly = true)
     public List<User> findAll() {
         return userRepository.findAll();
     }
 
     @Override
+    @Transactional(readOnly = true)
     public User findByUsername(String username) throws UserNotFoundException {
         final Optional<User> optional = userRepository.findByUsername(username);
         if (optional.isEmpty()) {
@@ -48,11 +51,13 @@ public class UserServiceImpl implements UserService {
     }
 
     @Override
+    @Transactional(readOnly = true)
     public List<User> findAllInternalUsers() {
         return userRepository.findAllInternal();
     }
 
     @Override
+    @Transactional(readOnly = true)
     public User findById(UUID id) throws UserNotFoundException {
         final Optional<User> optional = userRepository.findById(id);
         if (optional.isEmpty()) {
@@ -63,6 +68,7 @@ public class UserServiceImpl implements UserService {
     }
 
     @Override
+    @Transactional
     public User create(CreateUserDto data) {
         /* create at authentication service */
         final User entity = User.builder()
@@ -83,6 +89,7 @@ public class UserServiceImpl implements UserService {
     }
 
     @Override
+    @Transactional
     public User modify(User user, UserUpdateDto data) throws UserNotFoundException, AuthServiceException {
         user.setFirstname(data.getFirstname());
         user.setLastname(data.getLastname());
diff --git a/dbrepo-ui/pages/user/info.vue b/dbrepo-ui/pages/user/info.vue
index 0f52ca7fcc..3c222a15b6 100644
--- a/dbrepo-ui/pages/user/info.vue
+++ b/dbrepo-ui/pages/user/info.vue
@@ -237,6 +237,14 @@ export default {
         .then(() => {
           console.info('Updated user information')
           const toast = useToastInstance()
+          const user = Object.assign({}, this.cacheUser)
+          user.given_name = this.model.firstname
+          user.family_name = this.model.lastname
+          user.orcid = this.model.orcid
+          user.affiliation = this.model.affiliation
+          user.theme = this.model.theme
+          user.language = this.model.language
+          this.cacheStore.setUser(user)
           toast.success(this.$t('success.user.info'))
           /* language */
           this.cacheStore.setLocale(this.model.language)
-- 
GitLab