From 4796e29104487680a3f8abe00e10b4108f135afe Mon Sep 17 00:00:00 2001 From: "kaihang.xkh" Date: Fri, 28 Mar 2025 15:08:47 +0800 Subject: [PATCH] Update OwnerController to handle pet name search --- .../petclinic/owner/OwnerController.java | 38 +++++++++++++++++-- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java b/src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java index fa3506456..fae94c309 100644 --- a/src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java +++ b/src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java @@ -96,12 +96,30 @@ class OwnerController { if (owner.getLastName() == null) { owner.setLastName(""); // empty string signifies broadest possible search } + + if (owner.getPetName() == null) { + owner.setPetName(""); // empty string signifies broadest possible search + } - // find owners by last name - Page ownersResults = findPaginatedForOwnersLastName(page, owner.getLastName()); + // find owners based on search parameters + Page ownersResults; + + if (!owner.getLastName().isEmpty() && !owner.getPetName().isEmpty()) { + // search by both lastName and petName + ownersResults = findPaginatedForOwnersLastNameAndPetName(page, owner.getLastName(), owner.getPetName()); + } else if (!owner.getPetName().isEmpty()) { + // search by petName only + ownersResults = findPaginatedForOwnersPetName(page, owner.getPetName()); + } else { + // search by lastName only (or return all if lastName is empty) + ownersResults = findPaginatedForOwnersLastName(page, owner.getLastName()); + } + if (ownersResults.isEmpty()) { // no owners found - result.rejectValue("lastName", "notFound", "not found"); + String errorField = !owner.getLastName().isEmpty() ? "lastName" : + (!owner.getPetName().isEmpty() ? "petName" : "lastName"); + result.rejectValue(errorField, "notFound", "not found"); return "owners/findOwners"; } @@ -129,6 +147,18 @@ class OwnerController { Pageable pageable = PageRequest.of(page - 1, pageSize); return owners.findByLastNameStartingWith(lastname, pageable); } + + private Page findPaginatedForOwnersPetName(int page, String petName) { + int pageSize = 5; + Pageable pageable = PageRequest.of(page - 1, pageSize); + return owners.findByPetNameContaining(petName, pageable); + } + + private Page findPaginatedForOwnersLastNameAndPetName(int page, String lastName, String petName) { + int pageSize = 5; + Pageable pageable = PageRequest.of(page - 1, pageSize); + return owners.findByLastNameAndPetName(lastName, petName, pageable); + } @GetMapping("/owners/{ownerId}/edit") public String initUpdateOwnerForm() { @@ -170,4 +200,4 @@ class OwnerController { return mav; } -} +} \ No newline at end of file