From 2cacf1f85247984b735f2926d524b625d45601f4 Mon Sep 17 00:00:00 2001 From: Harkamal Randhawa Date: Sun, 29 Mar 2026 22:37:18 -0600 Subject: [PATCH] Clean up customer accounts --- .../backend/service/CustomerService.java | 19 +++++------- .../backend/service/CustomerServiceTest.java | 30 +++++++++++++++++++ 2 files changed, 38 insertions(+), 11 deletions(-) diff --git a/backend/src/main/java/com/petshop/backend/service/CustomerService.java b/backend/src/main/java/com/petshop/backend/service/CustomerService.java index 3b1e7dfe..33c731d1 100644 --- a/backend/src/main/java/com/petshop/backend/service/CustomerService.java +++ b/backend/src/main/java/com/petshop/backend/service/CustomerService.java @@ -60,15 +60,7 @@ public class CustomerService { customer.setEmail(request.getEmail()); customer = customerRepository.save(customer); - Customer savedCustomer = customer; - User user = userRepository.findByEmail(savedCustomer.getEmail()) - .map(existing -> { - if (existing.getRole() != User.Role.CUSTOMER) { - throw new ResponseStatusException(CONFLICT, "Email already exists for a different account type"); - } - return existing; - }) - .orElseGet(() -> createLinkedUser(savedCustomer)); + User user = createLinkedUser(customer); Customer linkedCustomer = userBusinessLinkageService.ensureLinkedCustomer(user); syncLinkedUser(linkedCustomer); @@ -93,9 +85,14 @@ public class CustomerService { @Transactional public void deleteCustomer(Long id) { - if (!customerRepository.existsById(id)) { - throw new ResourceNotFoundException("Customer not found with id: " + id); + Customer customer = customerRepository.findById(id) + .orElseThrow(() -> new ResourceNotFoundException("Customer not found with id: " + id)); + + if (customer.getUserId() != null && userRepository.existsById(customer.getUserId())) { + userRepository.deleteById(customer.getUserId()); + return; } + customerRepository.deleteById(id); } diff --git a/backend/src/test/java/com/petshop/backend/service/CustomerServiceTest.java b/backend/src/test/java/com/petshop/backend/service/CustomerServiceTest.java index a9d82f5b..dde07768 100644 --- a/backend/src/test/java/com/petshop/backend/service/CustomerServiceTest.java +++ b/backend/src/test/java/com/petshop/backend/service/CustomerServiceTest.java @@ -20,6 +20,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -147,4 +148,33 @@ class CustomerServiceTest { assertThrows(ResponseStatusException.class, () -> customerService.updateCustomer(7L, request)); } + + @Test + void deleteCustomerDeletesLinkedUser() { + Customer customer = new Customer(); + customer.setCustomerId(7L); + customer.setUserId(11L); + + when(customerRepository.findById(7L)).thenReturn(Optional.of(customer)); + when(userRepository.existsById(11L)).thenReturn(true); + + customerService.deleteCustomer(7L); + + verify(userRepository).deleteById(11L); + verify(customerRepository, never()).deleteById(7L); + } + + @Test + void deleteCustomerDeletesCustomerWhenNoLinkedUserExists() { + Customer customer = new Customer(); + customer.setCustomerId(7L); + customer.setUserId(11L); + + when(customerRepository.findById(7L)).thenReturn(Optional.of(customer)); + when(userRepository.existsById(11L)).thenReturn(false); + + customerService.deleteCustomer(7L); + + verify(customerRepository).deleteById(7L); + } }