|
12 | 12 | import org.springframework.security.crypto.password.PasswordEncoder;
|
13 | 13 | import org.springframework.stereotype.Service;
|
14 | 14 |
|
| 15 | +import java.util.HashSet; |
15 | 16 | import java.util.Set;
|
16 | 17 |
|
17 | 18 | @Service
|
@@ -39,37 +40,43 @@ public void createUser(User user) {
|
39 | 40 | }
|
40 | 41 |
|
41 | 42 | @Transactional
|
42 |
| - public void updateUser(Long userId, User user) { |
| 43 | + public User updateUser(Long userId, User user) { |
43 | 44 | User existingUser = userRepository.findById(userId)
|
44 | 45 | .orElseThrow(() -> new EntityNotFoundException("User not found with id: " + userId));
|
45 | 46 |
|
46 | 47 | existingUser.setUsername(user.getUsername());
|
47 |
| - existingUser.setPassword(passwordEncoder.encode(user.getPassword())); |
48 | 48 | existingUser.setEmail(user.getEmail());
|
49 | 49 |
|
50 |
| - for (Subscription subscription : user.getSubscriptions()) { |
51 |
| - Subscription existingSubscription = subscriptionRepository.findByName(subscription.getName()) |
52 |
| - .orElseGet(() -> { |
53 |
| - Subscription newSubscription = new Subscription(); |
54 |
| - newSubscription.setName(subscription.getName()); |
55 |
| - return subscriptionRepository.save(newSubscription); |
56 |
| - }); |
57 |
| - |
58 |
| - if (!existingUser.getSubscriptions().contains(existingSubscription)) { |
59 |
| - existingUser.getSubscriptions().add(existingSubscription); |
60 |
| - existingSubscription.getUsers().add(existingUser); |
| 50 | + if (user.getPassword() != null && !user.getPassword().isBlank()) { |
| 51 | + existingUser.setPassword(passwordEncoder.encode(user.getPassword())); |
| 52 | + } |
| 53 | + existingUser.setRole(roleService.getByRoleId(user.getRoleId())); |
| 54 | + |
| 55 | + Set<Subscription> updatedSubscriptions = new HashSet<>(); |
| 56 | + if (user.getSubscriptions() != null) { |
| 57 | + for (Subscription subscription : user.getSubscriptions()) { |
| 58 | + subscribeUserToSub(userId, subscription); |
| 59 | + subscriptionRepository.findByName(subscription.getName()) |
| 60 | + .ifPresent(updatedSubscriptions::add); |
61 | 61 | }
|
62 | 62 | }
|
63 | 63 |
|
64 |
| - existingUser.setRole(roleService.getByRoleId(user.getRoleId())); |
65 |
| - userRepository.save(existingUser); |
| 64 | + Set<Subscription> currentSubscriptions = new HashSet<>(existingUser.getSubscriptions()); |
| 65 | + for (Subscription currentSub : currentSubscriptions) { |
| 66 | + if (!updatedSubscriptions.contains(currentSub)) { |
| 67 | + removeSubFromUser(userId, currentSub.getId()); |
| 68 | + } |
| 69 | + } |
| 70 | + |
| 71 | + return existingUser; |
66 | 72 | }
|
67 | 73 |
|
68 | 74 | public User getUserById(Long id) {
|
69 | 75 | return userRepository.findById(id)
|
70 | 76 | .orElseThrow(() -> new EntityNotFoundException("User not found with id: " + id));
|
71 | 77 | }
|
72 | 78 |
|
| 79 | + @Transactional |
73 | 80 | public void subscribeUserToSub(Long userId, Subscription subscription) {
|
74 | 81 | User user = userRepository.findById(userId)
|
75 | 82 | .orElseThrow(() -> new EntityNotFoundException("User not found with id: " + userId));
|
|
0 commit comments