From 6164a8746d9fbc7b5c1e2e95a3e422ffc7d635be Mon Sep 17 00:00:00 2001 From: Alex <78383757+Lextical@users.noreply.github.com> Date: Tue, 7 Apr 2026 02:46:00 -0600 Subject: [PATCH] changed filtering and search in pets to use api calls --- .../example/petstoremobile/api/PetApi.java | 9 +++- .../fragments/listfragments/PetFragment.java | 48 ++++++------------- .../AdoptionDetailFragment.java | 2 +- .../AppointmentDetailFragment.java | 2 +- .../repositories/PetRepository.java | 6 +-- .../viewmodels/PetViewModel.java | 6 +-- 6 files changed, 30 insertions(+), 43 deletions(-) diff --git a/android/app/src/main/java/com/example/petstoremobile/api/PetApi.java b/android/app/src/main/java/com/example/petstoremobile/api/PetApi.java index ff7b79a7..7db2c1e3 100644 --- a/android/app/src/main/java/com/example/petstoremobile/api/PetApi.java +++ b/android/app/src/main/java/com/example/petstoremobile/api/PetApi.java @@ -20,11 +20,16 @@ public interface PetApi { // endpoint for downloading the pet's image file String PET_IMAGE_PATH = "api/v1/pets/%d/image"; - // Get all pets + // Get all pets with filters @GET("api/v1/pets") Call> getAllPets( @Query("page") int page, - @Query("size") int size + @Query("size") int size, + @Query("q") String query, + @Query("status") String status, + @Query("species") String species, + @Query("storeId") Long storeId, + @Query("sort") String sort ); // Get pet by id diff --git a/android/app/src/main/java/com/example/petstoremobile/fragments/listfragments/PetFragment.java b/android/app/src/main/java/com/example/petstoremobile/fragments/listfragments/PetFragment.java index 01331b19..2aad5eb4 100644 --- a/android/app/src/main/java/com/example/petstoremobile/fragments/listfragments/PetFragment.java +++ b/android/app/src/main/java/com/example/petstoremobile/fragments/listfragments/PetFragment.java @@ -38,10 +38,9 @@ import dagger.hilt.android.AndroidEntryPoint; public class PetFragment extends Fragment implements PetAdapter.OnPetClickListener { private FragmentPetBinding binding; private List petList = new ArrayList<>(); - private List filteredList = new ArrayList<>(); private PetAdapter adapter; private PetViewModel viewModel; - + @Inject @Named("baseUrl") String baseUrl; /** @@ -103,7 +102,7 @@ public class PetFragment extends Fragment implements PetAdapter.OnPetClickListen binding.etSearchPet.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {} @Override public void onTextChanged(CharSequence s, int start, int before, int count) { - filterPets(); + loadPetData(); } @Override public void afterTextChanged(Editable s) {} }); @@ -121,7 +120,7 @@ public class PetFragment extends Fragment implements PetAdapter.OnPetClickListen binding.spinnerStatus.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { - filterPets(); + loadPetData(); } @Override @@ -129,30 +128,6 @@ public class PetFragment extends Fragment implements PetAdapter.OnPetClickListen }); } - /** - * Filters the pet list based on both the search query and the selected status. - */ - private void filterPets() { - String query = binding.etSearchPet.getText().toString().toLowerCase(); - String selectedStatus = binding.spinnerStatus.getSelectedItem().toString(); - - filteredList.clear(); - for (PetDTO p : petList) { - boolean matchesSearch = query.isEmpty() || - p.getPetName().toLowerCase().contains(query) || - p.getPetSpecies().toLowerCase().contains(query) || - p.getPetBreed().toLowerCase().contains(query); - - boolean matchesStatus = selectedStatus.equals("All Statuses") || - p.getPetStatus().equalsIgnoreCase(selectedStatus); - - if (matchesSearch && matchesStatus) { - filteredList.add(p); - } - } - adapter.notifyDataSetChanged(); - } - /** * Sets up the SwipeRefreshLayout to allow manual re-fetching of pet data. */ @@ -165,7 +140,7 @@ public class PetFragment extends Fragment implements PetAdapter.OnPetClickListen */ private void openPetProfile(int position) { Bundle args = new Bundle(); - PetDTO pet = filteredList.get(position); + PetDTO pet = petList.get(position); args.putLong("petId", pet.getPetId()); NavHostFragment.findNavController(this).navigate(R.id.nav_pet_profile, args); @@ -187,10 +162,17 @@ public class PetFragment extends Fragment implements PetAdapter.OnPetClickListen } /** - * Fetches all pet data from the server via the ViewModel and updates the UI. + * Fetches pet data from the server with filters and updates the UI. */ private void loadPetData() { - viewModel.getAllPets(0, 100).observe(getViewLifecycleOwner(), resource -> { + String query = binding.etSearchPet.getText().toString().trim(); + String status = binding.spinnerStatus.getSelectedItem().toString(); + + if (status.equals("All Statuses")) { + status = null; + } + + viewModel.getAllPets(0, 100, query, status, null, null, "petName").observe(getViewLifecycleOwner(), resource -> { if (resource == null) return; switch (resource.status) { @@ -202,7 +184,7 @@ public class PetFragment extends Fragment implements PetAdapter.OnPetClickListen if (resource.data != null) { petList.clear(); petList.addAll(resource.data.getContent()); - filterPets(); + adapter.notifyDataSetChanged(); } break; case ERROR: @@ -218,7 +200,7 @@ public class PetFragment extends Fragment implements PetAdapter.OnPetClickListen * Initializes the RecyclerView with a layout manager and adapter for displaying pets. */ private void setupRecyclerView() { - adapter = new PetAdapter(filteredList, this); + adapter = new PetAdapter(petList, this); adapter.setBaseUrl(baseUrl); binding.recyclerViewPets.setLayoutManager(new LinearLayoutManager(getContext())); binding.recyclerViewPets.setAdapter(adapter); diff --git a/android/app/src/main/java/com/example/petstoremobile/fragments/listfragments/detailfragments/AdoptionDetailFragment.java b/android/app/src/main/java/com/example/petstoremobile/fragments/listfragments/detailfragments/AdoptionDetailFragment.java index 1bdaba71..d38622f5 100644 --- a/android/app/src/main/java/com/example/petstoremobile/fragments/listfragments/detailfragments/AdoptionDetailFragment.java +++ b/android/app/src/main/java/com/example/petstoremobile/fragments/listfragments/detailfragments/AdoptionDetailFragment.java @@ -113,7 +113,7 @@ public class AdoptionDetailFragment extends Fragment { * Loads the list of pets from the API. */ private void loadPets() { - petViewModel.getAllPets(0, 200).observe(getViewLifecycleOwner(), resource -> { + petViewModel.getAllPets(0, 200, null, null, null, null, "petName").observe(getViewLifecycleOwner(), resource -> { if (resource.status == Resource.Status.SUCCESS && resource.data != null) { petList = resource.data.getContent(); refreshPetSpinner(); diff --git a/android/app/src/main/java/com/example/petstoremobile/fragments/listfragments/detailfragments/AppointmentDetailFragment.java b/android/app/src/main/java/com/example/petstoremobile/fragments/listfragments/detailfragments/AppointmentDetailFragment.java index cc419a69..3b757b87 100644 --- a/android/app/src/main/java/com/example/petstoremobile/fragments/listfragments/detailfragments/AppointmentDetailFragment.java +++ b/android/app/src/main/java/com/example/petstoremobile/fragments/listfragments/detailfragments/AppointmentDetailFragment.java @@ -134,7 +134,7 @@ public class AppointmentDetailFragment extends Fragment { * Loads the list of pets from the ViewModel. */ private void loadPets() { - petViewModel.getAllPets(0, 200).observe(getViewLifecycleOwner(), resource -> { + petViewModel.getAllPets(0, 200, null, null, null, null, "petName").observe(getViewLifecycleOwner(), resource -> { if (resource.status == Resource.Status.SUCCESS && resource.data != null) { petList = resource.data.getContent(); refreshPetSpinner(); diff --git a/android/app/src/main/java/com/example/petstoremobile/repositories/PetRepository.java b/android/app/src/main/java/com/example/petstoremobile/repositories/PetRepository.java index 64f23b78..88ac2295 100644 --- a/android/app/src/main/java/com/example/petstoremobile/repositories/PetRepository.java +++ b/android/app/src/main/java/com/example/petstoremobile/repositories/PetRepository.java @@ -23,10 +23,10 @@ public class PetRepository extends BaseRepository { } /** - * Retrieves a paginated list of all pets from the API. + * Retrieves a paginated list of pets from the API with optional filters. */ - public LiveData>> getAllPets(int page, int size) { - return executeCall(petApi.getAllPets(page, size)); + public LiveData>> getAllPets(int page, int size, String query, String status, String species, Long storeId, String sort) { + return executeCall(petApi.getAllPets(page, size, query, status, species, storeId, sort)); } /** diff --git a/android/app/src/main/java/com/example/petstoremobile/viewmodels/PetViewModel.java b/android/app/src/main/java/com/example/petstoremobile/viewmodels/PetViewModel.java index 8b0d5fcc..b0af57c8 100644 --- a/android/app/src/main/java/com/example/petstoremobile/viewmodels/PetViewModel.java +++ b/android/app/src/main/java/com/example/petstoremobile/viewmodels/PetViewModel.java @@ -23,10 +23,10 @@ public class PetViewModel extends ViewModel { } /** - * Fetches a paginated list of all pets. + * Fetches a paginated list of pets with filters. */ - public LiveData>> getAllPets(int page, int size) { - return repository.getAllPets(page, size); + public LiveData>> getAllPets(int page, int size, String query, String status, String species, Long storeId, String sort) { + return repository.getAllPets(page, size, query, status, species, storeId, sort); } /**