Add customer search and navigation updates

This commit is contained in:
2026-03-12 16:50:50 +01:00
parent 8ebb4d06e5
commit 1a8e37bd36
17 changed files with 710 additions and 137 deletions

View File

@@ -16,6 +16,8 @@ public interface SampleRepository extends MongoRepository<Sample, String> {
List<Sample> findByFarmerBusinessKeyOrderByCreatedAtDesc(String farmerBusinessKey);
List<Sample> findByCreatedAtBetweenOrderByCreatedAtDesc(LocalDateTime start, LocalDateTime end);
List<Sample> findByCompletedAtBetweenOrderByCompletedAtDesc(LocalDateTime start, LocalDateTime end);
List<Sample> findByCompletedAtNotNullOrderByCompletedAtDesc();

View File

@@ -55,6 +55,13 @@ public class PortalService {
);
}
public List<PortalSampleRow> searchSamplesByCreatedDate(LocalDate date) {
return sampleService.samplesByCreatedDate(date).stream()
.map(this::toPortalRow)
.sorted(Comparator.comparing(PortalSampleRow::createdAt).reversed())
.toList();
}
private boolean cowMatches(Sample sample, String cowQuery) {
String query = cowQuery.toLowerCase(Locale.ROOT);
return (sample.cowNumber() != null && sample.cowNumber().toLowerCase(Locale.ROOT).contains(query))

View File

@@ -456,6 +456,10 @@ public class SampleService {
return sampleRepository.findByFarmerBusinessKeyOrderByCreatedAtDesc(businessKey);
}
public List<Sample> samplesByCreatedDate(LocalDate date) {
return sampleRepository.findByCreatedAtBetweenOrderByCreatedAtDesc(date.atStartOfDay(), date.plusDays(1).atStartOfDay());
}
public List<Sample> samplesByDate(LocalDate date) {
return sampleRepository.findByCompletedAtBetweenOrderByCompletedAtDesc(date.atStartOfDay(), date.plusDays(1).atStartOfDay());
}

View File

@@ -49,6 +49,11 @@ public class PortalController {
return reportService.reportCandidates();
}
@GetMapping("/search/by-date")
public List<PortalService.PortalSampleRow> searchByDate(@RequestParam LocalDate date) {
return portalService.searchSamplesByCreatedDate(date);
}
@PostMapping("/reports/send")
public ReportService.DispatchResult send(
@RequestHeader(value = "X-MUH-Actor-Id", required = false) String actorId,