diff --git a/backend/src/main/java/com/printcalculator/controller/OptionsController.java b/backend/src/main/java/com/printcalculator/controller/OptionsController.java index 3b2295b..e187422 100644 --- a/backend/src/main/java/com/printcalculator/controller/OptionsController.java +++ b/backend/src/main/java/com/printcalculator/controller/OptionsController.java @@ -16,6 +16,7 @@ import com.printcalculator.repository.NozzleOptionRepository; import com.printcalculator.repository.PrinterMachineRepository; import com.printcalculator.service.OrcaProfileResolver; import org.springframework.http.ResponseEntity; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @@ -54,13 +55,13 @@ public class OptionsController { } @GetMapping("/api/calculator/options") + @Transactional(readOnly = true) public ResponseEntity getOptions( @RequestParam(value = "printerMachineId", required = false) Long printerMachineId, @RequestParam(value = "nozzleDiameter", required = false) Double nozzleDiameter ) { List types = materialRepo.findAll(); - List allVariants = variantRepo.findAll().stream() - .filter(v -> Boolean.TRUE.equals(v.getIsActive())) + List allVariants = variantRepo.findByIsActiveTrue().stream() .sorted(Comparator .comparing((FilamentVariant v) -> safeMaterialCode(v.getFilamentMaterialType()), String.CASE_INSENSITIVE_ORDER) .thenComparing(v -> safeString(v.getVariantDisplayName()), String.CASE_INSENSITIVE_ORDER)) diff --git a/backend/src/main/java/com/printcalculator/repository/FilamentVariantRepository.java b/backend/src/main/java/com/printcalculator/repository/FilamentVariantRepository.java index 43b9e73..bd70537 100644 --- a/backend/src/main/java/com/printcalculator/repository/FilamentVariantRepository.java +++ b/backend/src/main/java/com/printcalculator/repository/FilamentVariantRepository.java @@ -2,11 +2,16 @@ package com.printcalculator.repository; import com.printcalculator.entity.FilamentVariant; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.EntityGraph; import com.printcalculator.entity.FilamentMaterialType; +import java.util.List; import java.util.Optional; public interface FilamentVariantRepository extends JpaRepository { + @EntityGraph(attributePaths = {"filamentMaterialType"}) + List findByIsActiveTrue(); + // We try to match by color name if possible, or get first active Optional findByFilamentMaterialTypeAndColorName(FilamentMaterialType type, String colorName); Optional findByFilamentMaterialTypeAndVariantDisplayName(FilamentMaterialType type, String variantDisplayName); diff --git a/backend/src/main/java/com/printcalculator/repository/MaterialOrcaProfileMapRepository.java b/backend/src/main/java/com/printcalculator/repository/MaterialOrcaProfileMapRepository.java index 0c2e61c..30c7d35 100644 --- a/backend/src/main/java/com/printcalculator/repository/MaterialOrcaProfileMapRepository.java +++ b/backend/src/main/java/com/printcalculator/repository/MaterialOrcaProfileMapRepository.java @@ -3,6 +3,7 @@ package com.printcalculator.repository; import com.printcalculator.entity.FilamentMaterialType; import com.printcalculator.entity.MaterialOrcaProfileMap; import com.printcalculator.entity.PrinterMachineProfile; +import org.springframework.data.jpa.repository.EntityGraph; import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; @@ -14,5 +15,6 @@ public interface MaterialOrcaProfileMapRepository extends JpaRepository findByPrinterMachineProfileAndIsActiveTrue(PrinterMachineProfile printerMachineProfile); }