feat(admin): OCR admin pages — overview & model detail #265

Merged
marcel merged 53 commits from feat/issue-264-ocr-admin-pages into main 2026-04-18 12:38:42 +02:00
2 changed files with 12 additions and 1 deletions
Showing only changes of commit 16bcd0f73c - Show all commits

View File

@@ -154,7 +154,8 @@ public class SenderModelService {
OcrTrainingRun run = Objects.requireNonNull(txTemplate.execute(status ->
trainingRunRepository.findFirstByPersonIdAndStatus(personId, TrainingStatus.RUNNING)
.orElseThrow(() -> new IllegalStateException(
.orElseThrow(() -> DomainException.internal(
ErrorCode.OCR_TRAINING_CONFLICT,
"Expected RUNNING row for person " + personId + " but none found"))));
String runId = run.getId().toString();

View File

@@ -297,6 +297,16 @@ class SenderModelServiceTest {
verify(senderModelRepository, never()).save(any());
}
@Test
void triggerSenderTraining_throwsDomainException_whenRunningRowMissingAfterDispatch() {
when(trainingRunRepository.findFirstByPersonIdAndStatus(personId, TrainingStatus.RUNNING))
.thenReturn(Optional.empty());
org.assertj.core.api.Assertions.assertThatThrownBy(
() -> service.triggerSenderTraining(personId, 0))
.isInstanceOf(DomainException.class);
}
// ─── triggerSenderTraining — queue promotion ──────────────────────────────
// ─── triggerManualSenderTraining ──────────────────────────────────────────