Fix pet update functionality - Fixed issue where editing a pet's type or name wasn't persisting - Updated processUpdateForm to modify existing pet instead of adding new one - Added proper handling of existing pet update Fixes #1752

This commit is contained in:
VishantOwO 2025-01-01 03:52:27 +05:30
parent 6148ddd967
commit 101ee08c8e

View file

@ -125,11 +125,11 @@ class PetController {
@PostMapping("/pets/{petId}/edit") @PostMapping("/pets/{petId}/edit")
public String processUpdateForm(Owner owner, @Valid Pet pet, BindingResult result, public String processUpdateForm(Owner owner, @Valid Pet pet, BindingResult result,
RedirectAttributes redirectAttributes) { RedirectAttributes redirectAttributes) {
String petName = pet.getName(); String petName = pet.getName();
// checking if the pet name already exist for the owner // checking if the pet name already exists for the owner
if (StringUtils.hasText(petName)) { if (StringUtils.hasText(petName)) {
Pet existingPet = owner.getPet(petName, false); Pet existingPet = owner.getPet(petName, false);
if (existingPet != null && !existingPet.getId().equals(pet.getId())) { if (existingPet != null && !existingPet.getId().equals(pet.getId())) {
@ -146,8 +146,21 @@ class PetController {
return VIEWS_PETS_CREATE_OR_UPDATE_FORM; return VIEWS_PETS_CREATE_OR_UPDATE_FORM;
} }
owner.addPet(pet);
this.owners.save(owner); Pet existingPet = owner.getPet(pet.getId());
if (existingPet != null) {
// Update existing pet's properties
existingPet.setName(pet.getName());
existingPet.setBirthDate(pet.getBirthDate());
existingPet.setType(pet.getType());
this.owners.save(owner);
} else {
owner.addPet(pet);
this.owners.save(owner);
}
redirectAttributes.addFlashAttribute("message", "Pet details has been edited"); redirectAttributes.addFlashAttribute("message", "Pet details has been edited");
return "redirect:/owners/{ownerId}"; return "redirect:/owners/{ownerId}";
} }