From 51a48e07ebfed8cf9176cbd0ce6e5bdcaf2cfa02 Mon Sep 17 00:00:00 2001 From: Harkamal Randhawa Date: Tue, 14 Apr 2026 19:37:43 -0600 Subject: [PATCH] Fix stuck pet status --- .../backend/service/AdoptionService.java | 33 ++++++++++++++++--- 1 file changed, 28 insertions(+), 5 deletions(-) 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 8885b3c8..3e777060 100644 --- a/backend/src/main/java/com/petshop/backend/service/AdoptionService.java +++ b/backend/src/main/java/com/petshop/backend/service/AdoptionService.java @@ -22,6 +22,7 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.List; @Service public class AdoptionService { @@ -159,15 +160,37 @@ public class AdoptionService { @Transactional public void deleteAdoption(Long id) { - if (!adoptionRepository.existsById(id)) { - throw new ResourceNotFoundException("Adoption not found with id: " + id); - } - adoptionRepository.deleteById(id); + Adoption adoption = adoptionRepository.findById(id) + .orElseThrow(() -> new ResourceNotFoundException("Adoption not found with id: " + id)); + Pet pet = adoption.getPet(); + String status = adoption.getAdoptionStatus(); + adoptionRepository.delete(adoption); + resetPetIfPending(pet, status); } @Transactional public void bulkDeleteAdoptions(BulkDeleteRequest request) { - adoptionRepository.deleteAllById(request.getIds()); + List adoptions = adoptionRepository.findAllById(request.getIds()); + adoptionRepository.deleteAll(adoptions); + for (Adoption adoption : adoptions) { + resetPetIfPending(adoption.getPet(), adoption.getAdoptionStatus()); + } + } + + private void resetPetIfPending(Pet pet, String deletedAdoptionStatus) { + if (!ADOPTION_STATUS_PENDING.equalsIgnoreCase(deletedAdoptionStatus)) { + return; + } + if (!PET_STATUS_PENDING.equalsIgnoreCase(pet.getPetStatus())) { + return; + } + boolean completedElsewhere = adoptionRepository.existsByPet_IdAndAdoptionStatusIgnoreCase( + pet.getPetId(), ADOPTION_STATUS_COMPLETED); + if (!completedElsewhere) { + pet.setPetStatus(PET_STATUS_AVAILABLE); + pet.setOwner(null); + petRepository.save(pet); + } } private String normalizeFilter(String value) {