diff --git a/.gitignore b/.gitignore index 3b66953..6993c75 100644 --- a/.gitignore +++ b/.gitignore @@ -34,6 +34,9 @@ dependency-reduced-pom.xml buildNumber.properties .mvn/timing.properties .mvn/wrapper/maven-wrapper.jar +.mvn/wrapper/maven-wrapper.properties +mvnw +mvnw.cmd # Gradle .gradle/ diff --git a/frontend/src/api/batchApi.ts b/frontend/src/api/batchApi.ts index 18a186b..846b51f 100644 --- a/frontend/src/api/batchApi.ts +++ b/frontend/src/api/batchApi.ts @@ -287,6 +287,7 @@ export interface RecollectionSearchResponse { number: number; size: number; totalPages: number; + failedRecordCounts: Record; } export interface RecollectionStatsResponse { diff --git a/frontend/src/pages/Recollects.tsx b/frontend/src/pages/Recollects.tsx index 6b2b898..e6bbc09 100644 --- a/frontend/src/pages/Recollects.tsx +++ b/frontend/src/pages/Recollects.tsx @@ -94,6 +94,9 @@ export default function Recollects() { const [totalCount, setTotalCount] = useState(0); const [useSearch, setUseSearch] = useState(false); + // 실패건 수 (jobExecutionId → count) + const [failedRecordCounts, setFailedRecordCounts] = useState>({}); + // 실패 로그 모달 const [failLogTarget, setFailLogTarget] = useState(null); @@ -256,6 +259,7 @@ export default function Recollects() { setHistories(data.content); setTotalPages(data.totalPages); setTotalCount(data.totalElements); + setFailedRecordCounts(data.failedRecordCounts ?? {}); if (!useSearch) setPage(data.number); } catch { setHistories([]); @@ -684,6 +688,7 @@ export default function Recollects() { 재수집 시작일시 재수집 종료일시 소요시간 + 실패건 액션 @@ -727,6 +732,23 @@ export default function Recollects() { {formatDuration(hist.durationMs)} + + {(() => { + const count = hist.jobExecutionId + ? (failedRecordCounts[hist.jobExecutionId] ?? 0) + : 0; + if (hist.executionStatus === 'STARTED') { + return -; + } + return count > 0 ? ( + + {count}건 + + ) : ( + 0 + ); + })()} +