UserUtilImpl.java
package com.nashtech.rookie.asset_management_0701.utils.user;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.springframework.stereotype.Component;
import com.nashtech.rookie.asset_management_0701.dtos.requests.user.UserRequest;
import com.nashtech.rookie.asset_management_0701.entities.User;
import com.nashtech.rookie.asset_management_0701.repositories.UserRepository;
import com.nashtech.rookie.asset_management_0701.services.user.UserSpecification;
import lombok.RequiredArgsConstructor;
@Component
@RequiredArgsConstructor
public class UserUtilImpl implements UserUtil{
private final UserRepository userRepository;
@Override
public String generateUsername (UserRequest userRequest) {
StringBuilder username = new StringBuilder(userRequest.getFirstName().toLowerCase().replaceAll("\\s", ""));
String[] splitSpace = userRequest.getLastName().toLowerCase().split(" ");
for (String s : splitSpace) {
username.append(s.charAt(0));
}
List<User> userList = userRepository.findAll(UserSpecification.usernameStartsWith(username.toString()));
if (userList.isEmpty()) {
return username.toString();
}
username.append(getMaxNumber(userList) + 1);
return username.toString();
}
@Override
public String generateUsernameFromWeb (String firstName, String lastName) {
StringBuilder username = new StringBuilder(firstName.toLowerCase().replace("%20", ""));
String[] splitSpace = lastName.toLowerCase().split("%20");
for (String s : splitSpace) {
username.append(s.charAt(0));
}
List<User> userList = userRepository.findAll(UserSpecification.usernameStartsWith(username.toString()));
if (userList.isEmpty()) {
return username.toString();
}
username.append(getMaxNumber(userList) + 1);
return username.toString();
}
private static int getMaxNumber (List<User> userList) {
Pattern pattern = Pattern.compile("\\d+");
List<Integer> numbersInUsernames = new ArrayList<>();
for (User user : userList) {
String existUsername = user.getUsername();
Matcher matcher = pattern.matcher(existUsername);
while (matcher.find()) {
String numberStr = matcher.group();
int number = Integer.parseInt(numberStr);
numbersInUsernames.add(number);
}
}
int number = 0;
if (!numbersInUsernames.isEmpty()) {
number = Collections.max(numbersInUsernames);
}
return number;
}
}