From 47fcf082d64d37a19b78a7e0abdb068c321a7d80 Mon Sep 17 00:00:00 2001 From: Harkamal Randhawa Date: Fri, 17 Apr 2026 16:15:00 -0600 Subject: [PATCH] centralize StringUtils usage --- .../backend/controller/AuthController.java | 27 ++++------------- .../controller/DropdownController.java | 7 +++-- .../backend/service/ActivityLogService.java | 29 ++++++------------- .../backend/service/AdoptionService.java | 4 +-- .../backend/service/AnalyticsService.java | 5 ++-- .../backend/service/AppointmentService.java | 4 +-- .../petshop/backend/service/EmailService.java | 3 +- .../petshop/backend/service/PetService.java | 2 +- .../petshop/backend/service/SaleService.java | 4 +-- .../petshop/backend/service/UserService.java | 4 +-- 10 files changed, 32 insertions(+), 57 deletions(-) diff --git a/backend/src/main/java/com/petshop/backend/controller/AuthController.java b/backend/src/main/java/com/petshop/backend/controller/AuthController.java index 7bdb53a1..b0b1ffa5 100644 --- a/backend/src/main/java/com/petshop/backend/controller/AuthController.java +++ b/backend/src/main/java/com/petshop/backend/controller/AuthController.java @@ -25,7 +25,6 @@ import com.petshop.backend.service.EmailService; import com.petshop.backend.service.PasswordResetService; import com.petshop.backend.util.AuthenticationHelper; import com.petshop.backend.util.ImageValidationUtil; -import com.petshop.backend.util.PhoneUtils; import com.petshop.backend.util.StringUtils; import jakarta.validation.Valid; import org.springframework.core.io.Resource; @@ -84,7 +83,7 @@ public class AuthController { String email = StringUtils.trimToNull(request.getEmail()); String firstName = StringUtils.trimToNull(request.getFirstName()); String lastName = StringUtils.trimToNull(request.getLastName()); - String phone = normalizePhone(request.getPhone()); + String phone = StringUtils.normalizePhone(request.getPhone()); if (userRepository.findByUsername(username).isPresent()) { log.warn("Registration rejected: username already exists ({})", username); @@ -107,7 +106,7 @@ public class AuthController { user.setEmail(email); user.setFirstName(firstName); user.setLastName(lastName); - user.setFullName(joinFullName(firstName, lastName)); + user.setFullName(StringUtils.fullName(firstName, lastName)); user.setPhone(phone); user.setRole(User.Role.CUSTOMER); user.setActive(true); @@ -219,11 +218,11 @@ public class AuthController { user.setLastName(lastName); } if (firstName != null || lastName != null) { - user.setFullName(joinFullName(user.getFirstName(), user.getLastName())); + user.setFullName(StringUtils.fullName(user.getFirstName(), user.getLastName())); } if (request.getPhone() != null) { - String phone = normalizePhone(request.getPhone()); + String phone = StringUtils.normalizePhone(request.getPhone()); if (!java.util.Objects.equals(phone, user.getPhone())) { if (phone != null && userRepository.findByPhone(phone) .filter(existing -> !existing.getId().equals(user.getId())) @@ -258,7 +257,7 @@ public class AuthController { Long customerId = user.getRole() == User.Role.CUSTOMER ? user.getId() : null; String fullName = user.getFullName(); if (fullName == null || fullName.isBlank()) { - fullName = joinFullName(user.getFirstName(), user.getLastName()); + fullName = StringUtils.fullName(user.getFirstName(), user.getLastName()); } return new UserInfoResponse( user.getId(), @@ -277,22 +276,6 @@ public class AuthController { ); } - private String normalizePhone(String value) { - return StringUtils.trimToNull(PhoneUtils.normalize(StringUtils.trimToNull(value))); - } - - private String joinFullName(String firstName, String lastName) { - String first = StringUtils.trimToNull(firstName); - String last = StringUtils.trimToNull(lastName); - if (first == null) { - return last == null ? null : last; - } - if (last == null) { - return first; - } - return first + " " + last; - } - @PostMapping("/me/avatar") public ResponseEntity uploadAvatar(@RequestParam("avatar") MultipartFile file) { User user = getAuthenticatedUser(); diff --git a/backend/src/main/java/com/petshop/backend/controller/DropdownController.java b/backend/src/main/java/com/petshop/backend/controller/DropdownController.java index 5ca97986..756a9fca 100644 --- a/backend/src/main/java/com/petshop/backend/controller/DropdownController.java +++ b/backend/src/main/java/com/petshop/backend/controller/DropdownController.java @@ -3,6 +3,7 @@ package com.petshop.backend.controller; import com.petshop.backend.dto.common.DropdownOption; import com.petshop.backend.entity.User; import com.petshop.backend.repository.*; +import com.petshop.backend.util.StringUtils; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; @@ -68,7 +69,7 @@ public class DropdownController { public ResponseEntity> getCustomers() { return ResponseEntity.ok( userRepository.findByRoleAndActiveTrue(User.Role.CUSTOMER).stream() - .map(u -> new DropdownOption(u.getId(), u.getFirstName() + " " + u.getLastName())) + .map(u -> new DropdownOption(u.getId(), StringUtils.fullName(u.getFirstName(), u.getLastName()))) .sorted(Comparator.comparing(DropdownOption::getLabel, String.CASE_INSENSITIVE_ORDER)) .collect(Collectors.toList()) ); @@ -90,7 +91,7 @@ public class DropdownController { return ResponseEntity.ok( userRepository.findByRoleAndActiveTrue(User.Role.CUSTOMER).stream() .filter(u -> customersWithPets.contains(u.getId())) - .map(u -> new DropdownOption(u.getId(), u.getFirstName() + " " + u.getLastName())) + .map(u -> new DropdownOption(u.getId(), StringUtils.fullName(u.getFirstName(), u.getLastName()))) .sorted(Comparator.comparing(DropdownOption::getLabel, String.CASE_INSENSITIVE_ORDER)) .collect(Collectors.toList()) ); @@ -190,7 +191,7 @@ public class DropdownController { } return ResponseEntity.ok( employees.stream() - .map(u -> new DropdownOption(u.getId(), u.getFirstName() + " " + u.getLastName())) + .map(u -> new DropdownOption(u.getId(), StringUtils.fullName(u.getFirstName(), u.getLastName()))) .sorted(Comparator.comparing(DropdownOption::getLabel, String.CASE_INSENSITIVE_ORDER)) .collect(Collectors.toList()) ); diff --git a/backend/src/main/java/com/petshop/backend/service/ActivityLogService.java b/backend/src/main/java/com/petshop/backend/service/ActivityLogService.java index a3880071..598d9f95 100644 --- a/backend/src/main/java/com/petshop/backend/service/ActivityLogService.java +++ b/backend/src/main/java/com/petshop/backend/service/ActivityLogService.java @@ -6,6 +6,7 @@ import com.petshop.backend.entity.StoreLocation; import com.petshop.backend.entity.User; import com.petshop.backend.repository.ActivityLogRepository; import com.petshop.backend.repository.UserRepository; +import com.petshop.backend.util.StringUtils; import jakarta.persistence.criteria.Predicate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -48,7 +49,10 @@ public class ActivityLogService { entry.setUser(managedUser); entry.setStore(store); entry.setUsernameSnapshot(managedUser.getUsername()); - entry.setFullNameSnapshot(resolveFullName(managedUser)); + String fullName = managedUser.getFullName() != null && !managedUser.getFullName().isBlank() + ? managedUser.getFullName() + : StringUtils.fullName(managedUser.getFirstName(), managedUser.getLastName()); + entry.setFullNameSnapshot(fullName); entry.setRoleSnapshot(managedUser.getRole() != null ? managedUser.getRole().name() : null); entry.setStoreNameSnapshot(store != null ? store.getStoreName() : null); entry.setActivity(activity.trim()); @@ -127,7 +131,10 @@ public class ActivityLogService { if (entry.getUser() != null) { response.setUserId(entry.getUser().getId()); response.setUsername(firstNonBlank(entry.getUsernameSnapshot(), entry.getUser().getUsername())); - response.setFullName(firstNonBlank(entry.getFullNameSnapshot(), resolveFullName(entry.getUser()))); + String liveName = entry.getUser().getFullName() != null && !entry.getUser().getFullName().isBlank() + ? entry.getUser().getFullName() + : StringUtils.fullName(entry.getUser().getFirstName(), entry.getUser().getLastName()); + response.setFullName(firstNonBlank(entry.getFullNameSnapshot(), liveName)); response.setRole(firstNonBlank(entry.getRoleSnapshot(), entry.getUser().getRole() != null ? entry.getUser().getRole().name() : null)); } @@ -147,24 +154,6 @@ public class ActivityLogService { return response; } - private String resolveFullName(User user) { - if (user == null) { - return null; - } - if (user.getFullName() != null && !user.getFullName().isBlank()) { - return user.getFullName(); - } - String first = user.getFirstName(); - String last = user.getLastName(); - if (first == null || first.isBlank()) { - return last; - } - if (last == null || last.isBlank()) { - return first; - } - return first.trim() + " " + last.trim(); - } - private String firstNonBlank(String preferred, String fallback) { if (preferred != null && !preferred.isBlank()) { return preferred; diff --git a/backend/src/main/java/com/petshop/backend/service/AdoptionService.java b/backend/src/main/java/com/petshop/backend/service/AdoptionService.java index 679aa18c..6a6c32e9 100644 --- a/backend/src/main/java/com/petshop/backend/service/AdoptionService.java +++ b/backend/src/main/java/com/petshop/backend/service/AdoptionService.java @@ -256,9 +256,9 @@ public class AdoptionService { adoption.getPet().getPetId(), adoption.getPet().getPetName(), adoption.getCustomer().getId(), - adoption.getCustomer().getFirstName() + " " + adoption.getCustomer().getLastName(), + StringUtils.fullName(adoption.getCustomer().getFirstName(), adoption.getCustomer().getLastName()), adoption.getEmployee().getId(), - adoption.getEmployee().getFirstName() + " " + adoption.getEmployee().getLastName(), + StringUtils.fullName(adoption.getEmployee().getFirstName(), adoption.getEmployee().getLastName()), sourceStore != null ? sourceStore.getStoreId() : null, sourceStore != null ? sourceStore.getStoreName() : null, adoption.getAdoptionDate(), diff --git a/backend/src/main/java/com/petshop/backend/service/AnalyticsService.java b/backend/src/main/java/com/petshop/backend/service/AnalyticsService.java index 7a69357b..eae169d0 100644 --- a/backend/src/main/java/com/petshop/backend/service/AnalyticsService.java +++ b/backend/src/main/java/com/petshop/backend/service/AnalyticsService.java @@ -8,6 +8,7 @@ import com.petshop.backend.entity.User; import com.petshop.backend.repository.InventoryRepository; import com.petshop.backend.repository.ProductRepository; import com.petshop.backend.repository.SaleRepository; +import com.petshop.backend.util.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -181,12 +182,12 @@ public class AnalyticsService { if (sale.getIsRefund()) { continue; } - String employeeName = sale.getEmployee().getFirstName() + " " + sale.getEmployee().getLastName(); + String employeeName = StringUtils.fullName(sale.getEmployee().getFirstName(), sale.getEmployee().getLastName()); employeeRevenue.merge(employeeName, sale.getTotalAmount(), BigDecimal::add); } if (user.getRole() == User.Role.STAFF && employeeRevenue.isEmpty()) { - String employeeName = user.getFirstName() + " " + user.getLastName(); + String employeeName = StringUtils.fullName(user.getFirstName(), user.getLastName()); employeeRevenue.put(employeeName, BigDecimal.ZERO); } diff --git a/backend/src/main/java/com/petshop/backend/service/AppointmentService.java b/backend/src/main/java/com/petshop/backend/service/AppointmentService.java index 34e6da18..5ffcc16d 100644 --- a/backend/src/main/java/com/petshop/backend/service/AppointmentService.java +++ b/backend/src/main/java/com/petshop/backend/service/AppointmentService.java @@ -324,7 +324,7 @@ public class AppointmentService { response.setAppointmentId(appointment.getAppointmentId()); if (appointment.getCustomer() != null) { response.setCustomerId(appointment.getCustomer().getId()); - response.setCustomerName(appointment.getCustomer().getFirstName() + " " + appointment.getCustomer().getLastName()); + response.setCustomerName(StringUtils.fullName(appointment.getCustomer().getFirstName(), appointment.getCustomer().getLastName())); } if (appointment.getStore() != null) { response.setStoreId(appointment.getStore().getStoreId()); @@ -339,7 +339,7 @@ public class AppointmentService { response.setAppointmentStatus(appointment.getAppointmentStatus()); if (appointment.getEmployee() != null) { response.setEmployeeId(appointment.getEmployee().getId()); - response.setEmployeeName(appointment.getEmployee().getFirstName() + " " + appointment.getEmployee().getLastName()); + response.setEmployeeName(StringUtils.fullName(appointment.getEmployee().getFirstName(), appointment.getEmployee().getLastName())); } response.setPetName(pet != null ? pet.getPetName() : null); response.setPetId(pet != null ? pet.getPetId() : null); diff --git a/backend/src/main/java/com/petshop/backend/service/EmailService.java b/backend/src/main/java/com/petshop/backend/service/EmailService.java index e7cab2c1..6e096285 100644 --- a/backend/src/main/java/com/petshop/backend/service/EmailService.java +++ b/backend/src/main/java/com/petshop/backend/service/EmailService.java @@ -7,6 +7,7 @@ import com.petshop.backend.entity.Message; import com.petshop.backend.entity.Sale; import com.petshop.backend.entity.SaleItem; import com.petshop.backend.entity.User; +import com.petshop.backend.util.StringUtils; import com.resend.Resend; import com.resend.services.emails.model.CreateEmailOptions; import org.slf4j.Logger; @@ -246,7 +247,7 @@ public class EmailService { String date = appointment.getAppointmentDate() != null ? appointment.getAppointmentDate().format(DATE_FMT) : "—"; String time = appointment.getAppointmentTime() != null ? appointment.getAppointmentTime().format(TIME_FMT) : "—"; String employee = appointment.getEmployee() != null - ? appointment.getEmployee().getFirstName() + " " + appointment.getEmployee().getLastName() : "—"; + ? StringUtils.fullName(appointment.getEmployee().getFirstName(), appointment.getEmployee().getLastName()) : "—"; String pet = appointment.getPet() != null ? appointment.getPet().getPetName() : null; return """
diff --git a/backend/src/main/java/com/petshop/backend/service/PetService.java b/backend/src/main/java/com/petshop/backend/service/PetService.java index 2f90011a..e1aacbd2 100644 --- a/backend/src/main/java/com/petshop/backend/service/PetService.java +++ b/backend/src/main/java/com/petshop/backend/service/PetService.java @@ -330,7 +330,7 @@ public class PetService { pet.getCreatedAt(), pet.getUpdatedAt(), owner != null ? owner.getId() : null, - owner != null ? owner.getFirstName() + " " + owner.getLastName() : null, + owner != null ? StringUtils.fullName(owner.getFirstName(), owner.getLastName()) : null, store != null ? store.getStoreId() : null, store != null ? store.getStoreName() : null ); diff --git a/backend/src/main/java/com/petshop/backend/service/SaleService.java b/backend/src/main/java/com/petshop/backend/service/SaleService.java index f23796e7..c35c07da 100644 --- a/backend/src/main/java/com/petshop/backend/service/SaleService.java +++ b/backend/src/main/java/com/petshop/backend/service/SaleService.java @@ -334,7 +334,7 @@ public class SaleService { if (sale.getEmployee() != null) { response.setEmployeeId(sale.getEmployee().getId()); - response.setEmployeeName(sale.getEmployee().getFirstName() + " " + sale.getEmployee().getLastName()); + response.setEmployeeName(StringUtils.fullName(sale.getEmployee().getFirstName(), sale.getEmployee().getLastName())); } if (sale.getStore() != null) { @@ -344,7 +344,7 @@ public class SaleService { if (sale.getCustomer() != null) { response.setCustomerId(sale.getCustomer().getId()); - response.setCustomerName(sale.getCustomer().getFirstName() + " " + sale.getCustomer().getLastName()); + response.setCustomerName(StringUtils.fullName(sale.getCustomer().getFirstName(), sale.getCustomer().getLastName())); } response.setTotalAmount(sale.getTotalAmount()); diff --git a/backend/src/main/java/com/petshop/backend/service/UserService.java b/backend/src/main/java/com/petshop/backend/service/UserService.java index 4fe91a26..d5cd1243 100644 --- a/backend/src/main/java/com/petshop/backend/service/UserService.java +++ b/backend/src/main/java/com/petshop/backend/service/UserService.java @@ -90,7 +90,7 @@ public class UserService { user.setLastName(request.getLastName()); user.setFullName(request.getFullName()); user.setEmail(request.getEmail()); - user.setPhone(StringUtils.trimToNull(request.getPhone())); + user.setPhone(StringUtils.normalizePhone(request.getPhone())); user.setRole(request.getRole()); user.setStaffRole(StringUtils.trimToNull(request.getStaffRole())); user.setPrimaryStore(resolveStore(request.getPrimaryStoreId())); @@ -134,7 +134,7 @@ public class UserService { user.setLastName(request.getLastName()); user.setFullName(request.getFullName()); user.setEmail(request.getEmail()); - String phone = StringUtils.trimToNull(request.getPhone()); + String phone = StringUtils.normalizePhone(request.getPhone()); if (!Objects.equals(user.getPhone(), phone)) { validateUniquePhone(phone, user.getId()); }