Changeset ccb5a6b
- Timestamp:
- 05/23/26 20:35:57 (4 months ago)
- Branches:
- master
- Children:
- ed083e6
- Parents:
- 946877f
- Location:
- backend/src/main/java/medora
- Files:
-
- 5 edited
-
controller/LabController.java (modified) (2 diffs)
-
dto/LabTestRequestDTO.java (modified) (2 diffs)
-
models/domain/PerformedLabTests.java (modified) (3 diffs)
-
repository/PerformedLabTestRepository.java (modified) (1 diff)
-
service/LabService.java (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
backend/src/main/java/medora/controller/LabController.java
r946877f rccb5a6b 278 278 } 279 279 280 @GetMapping("/requests/pending") 281 public ResponseEntity<?> getPendingLabTests(HttpServletRequest httpRequest) { 282 try { 283 String role = securityUtil.getRoleFromRequest(httpRequest); 284 if (role == null) { 285 return ResponseEntity.status(HttpStatus.UNAUTHORIZED) 286 .body(Map.of("error", "Unauthorized")); 287 } 288 289 290 if (!role.equals("LAB_TECHNICIAN")) { 291 return ResponseEntity.status(HttpStatus.FORBIDDEN) 292 .body(Map.of("error", "Only lab technicians can view pending tests")); 293 } 294 295 logger.info("Fetching pending lab tests"); 296 List<PerformedLabTests> pendingTests = labService.getPendingLabTests(); 297 List<LabTestRequestDTO> dtos = pendingTests.stream() 298 .map(this::convertPerformedTestToDTO) 299 .collect(Collectors.toList()); 300 return ResponseEntity.ok(dtos); 301 } catch (RuntimeException e) { 302 logger.error("Error fetching pending lab tests: {}", e.getMessage()); 303 return ResponseEntity.badRequest() 304 .body(Map.of("error", e.getMessage())); 305 } catch (Exception e) { 306 logger.error("Unexpected error fetching pending lab tests: {}", e.getMessage()); 307 return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) 308 .body(Map.of("error", "Failed to fetch pending lab tests: " + e.getMessage())); 309 } 310 } 311 280 312 private LabTestDTO convertToDTO(LabTests labTest) { 281 313 return new LabTestDTO( … … 295 327 performedTest.getDoctor().getDoctorId(), 296 328 performedTest.getDoctor().getFirstName() + " " + performedTest.getDoctor().getLastName(), 329 performedTest.getCreatedAt() != null ? performedTest.getCreatedAt().toLocalDate() : performedTest.getTestDate(), 297 330 performedTest.getTestDate(), 298 331 performedTest.getNotes() -
backend/src/main/java/medora/dto/LabTestRequestDTO.java
r946877f rccb5a6b 5 5 import lombok.NoArgsConstructor; 6 6 import lombok.Setter; 7 8 7 import java.time.LocalDate; 9 8 … … 20 19 private String doctorName; 21 20 private LocalDate requestDate; 21 private LocalDate testDate; 22 22 private String notes; 23 23 } -
backend/src/main/java/medora/models/domain/PerformedLabTests.java
r946877f rccb5a6b 6 6 7 7 import java.time.LocalDate; 8 import java.time.LocalDateTime; 8 9 9 10 @Getter … … 38 39 private LocalDate testDate; 39 40 41 @Column(name = "created_at") 42 private LocalDateTime createdAt; 43 40 44 private String notes; 41 45 … … 44 48 45 49 public PerformedLabTests(Long performedTestId, 46 LabTests labTest,47 Patient patient,48 Doctors doctor,49 LabTechnician technician,50 LocalDate testDate,51 String notes) {50 LabTests labTest, 51 Patient patient, 52 Doctors doctor, 53 LabTechnician technician, 54 LocalDate testDate, 55 String notes) { 52 56 this.performedTestId = performedTestId; 53 57 this.labTest = labTest; -
backend/src/main/java/medora/repository/PerformedLabTestRepository.java
r946877f rccb5a6b 22 22 """) 23 23 List<PerformedLabTests> findByPatientAndDate(@Param("patientId") Long patientId, @Param("testDate") java.time.LocalDate testDate); 24 24 25 } -
backend/src/main/java/medora/service/LabService.java
r946877f rccb5a6b 13 13 14 14 /** 15 * LabService handles lab test and lab result operations.15 * 16 16 * UC013 – Record Lab Test Request 17 17 * UC014 – Store Lab Results … … 53 53 } 54 54 55 // ================= LAB TEST ================= 55 56 56 57 57 @Transactional … … 107 107 } 108 108 109 // ================= LAB TEST REQUESTS (UC013) =================109 // UC013 110 110 111 111 @Transactional … … 172 172 } 173 173 174 // ================= LAB RESULTS (UC014, UC015) =================174 //UC014, UC015 175 175 176 176 @Transactional … … 220 220 return medicalRecordLabResultRepository.findByMedicalRecordRecordId(medicalRecordId); 221 221 } 222 223 @Transactional(readOnly = true) 224 public List<PerformedLabTests> getPendingLabTests() { 225 // Get all performed tests and filter to only those without results 226 List<PerformedLabTests> allTests = performedLabTestRepository.findAll(); 227 228 return allTests.stream() 229 .filter(test -> { 230 // Get the patient's medical record 231 Optional<MedicalRecord> recordOpt = medicalRecordRepository.findByPatientPatientId(test.getPatient().getPatientId()); 232 if (recordOpt.isEmpty()) { 233 return true; // No medical record, so no results possible 234 } 235 236 MedicalRecord record = recordOpt.get(); 237 // Check if this test has results in this medical record 238 List<MedicalRecordLabResults> results = medicalRecordLabResultRepository 239 .findByMedicalRecordRecordId(record.getRecordId()); 240 241 // Filter to only results for this specific test 242 return results.stream() 243 .noneMatch(r -> r.getLabResult().getLabTest().getTestId().equals(test.getLabTest().getTestId())); 244 }) 245 .toList(); 246 } 222 247 }
Note:
See TracChangeset
for help on using the changeset viewer.
