Tighten seed filters

This commit is contained in:
2026-03-29 23:07:16 -06:00
parent d5fdee10d5
commit b18599c280
9 changed files with 328 additions and 393 deletions

View File

@@ -26,6 +26,22 @@ public class DropdownApi {
return apiClient.getObjectMapper().readValue(response, new TypeReference<List<DropdownOption>>() {});
}
public List<DropdownOption> getProductCategories() throws Exception {
String response = apiClient.getRawResponse("/api/v1/dropdowns/product-categories");
if (response == null || response.isEmpty()) {
throw new IllegalStateException("Empty response from product categories endpoint");
}
return apiClient.getObjectMapper().readValue(response, new TypeReference<List<DropdownOption>>() {});
}
public List<DropdownOption> getPetSpecies() throws Exception {
String response = apiClient.getRawResponse("/api/v1/dropdowns/pet-species");
if (response == null || response.isEmpty()) {
throw new IllegalStateException("Empty response from pet species endpoint");
}
return apiClient.getObjectMapper().readValue(response, new TypeReference<List<DropdownOption>>() {});
}
public List<DropdownOption> getProducts() throws Exception {
String response = apiClient.getRawResponse("/api/v1/dropdowns/products");
if (response == null || response.isEmpty()) {

View File

@@ -15,6 +15,8 @@ import javafx.scene.layout.StackPane;
import javafx.stage.Modality;
import javafx.stage.Stage;
import org.example.petshopdesktop.api.dto.pet.PetResponse;
import org.example.petshopdesktop.api.dto.common.DropdownOption;
import org.example.petshopdesktop.api.endpoints.DropdownApi;
import org.example.petshopdesktop.api.endpoints.PetApi;
import org.example.petshopdesktop.controllers.dialogcontrollers.PetDialogController;
import org.example.petshopdesktop.models.Pet;
@@ -156,8 +158,7 @@ public class PetController {
colPetPrice.setCellValueFactory(new PropertyValueFactory<Pet,Double>("petPrice"));
configureImageColumn(colPetImage);
cbSpeciesFilter.setItems(FXCollections.observableArrayList("All Species", "Dog", "Cat", "Bird", "Fish", "Rabbit", "Hamster"));
cbSpeciesFilter.getSelectionModel().selectFirst();
loadSpeciesFilter();
cbStatusFilter.setItems(FXCollections.observableArrayList("All Statuses", "Available", "Adopted", "Pending"));
cbStatusFilter.getSelectionModel().selectFirst();
@@ -245,6 +246,26 @@ public class PetController {
displayFilteredPet(txtSearch.getText());
}
private void loadSpeciesFilter() {
new Thread(() -> {
try {
List<String> values = DropdownApi.getInstance().getPetSpecies().stream()
.map(DropdownOption::getLabel)
.collect(Collectors.toList());
values.add(0, "All Species");
Platform.runLater(() -> {
cbSpeciesFilter.setItems(FXCollections.observableArrayList(values));
cbSpeciesFilter.getSelectionModel().selectFirst();
});
} catch (Exception e) {
Platform.runLater(() -> ActivityLogger.getInstance().logException(
"PetController.loadSpeciesFilter",
e,
"Loading species filter options"));
}
}).start();
}
private String selectedSpecies() {
String value = cbSpeciesFilter.getValue();
return value == null || value.equals("All Species") ? null : value;

View File

@@ -269,7 +269,7 @@ public class ProductController {
all.setId(null);
all.setLabel("All Categories");
options.add(all);
options.addAll(DropdownApi.getInstance().getCategories());
options.addAll(DropdownApi.getInstance().getProductCategories());
Platform.runLater(() -> {
cbCategoryFilter.setItems(FXCollections.observableArrayList(options));
cbCategoryFilter.getSelectionModel().selectFirst();

View File

@@ -89,7 +89,7 @@ public class ProductDialogController {
//Set up combobox for selecting category
try {
List<DropdownOption> categories = DropdownApi.getInstance().getCategories();
List<DropdownOption> categories = DropdownApi.getInstance().getProductCategories();
if (categories != null) {
ObservableList<DropdownOption> categoriesObs = FXCollections.observableArrayList(categories);
cbProdCategory.setItems(categoriesObs);